Repository navigation
Releases: mutoharohfiqhiabcd-source/dsh-updater
Release list
dsh 自动更新 v1.0.5
v1.0.5 发布说明 —— 修复「等待关闭 DSH 超时 → 无法继续更新」
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装 / 升级
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqabcd-source/dsh-updater🐛 本版修复
1. 自动关闭 DSH 找不到进程(导致「等待关闭 DSH 超时」)
现象:点更新并勾了「自动关闭 DSH」,结果看护进程一直等不到 DSH 关闭,
30 分钟后报「等待关闭 DSH 超时,这次更新已放弃」。
根因:核心是以 python -X utf8 启动的,而 processes_on_port 用
subprocess.run(["netstat", "-ano"], text=True) 读进程列表;中文 Windows 的
netstat 输出是 GBK,UTF-8 解码在 Python 的 reader 线程里抛
UnicodeDecodeError,函数吞掉异常后返回空列表 → 看护进程以为「DSH 没在运行」,
于是不会执行自动关闭,只能干等到超时。
修复:控制台命令一律先收字节、再按控制台代码页解码(Windows 优先
mbcs,即 cp936),netstat / tasklist / taskkill 不再解码失败;pnpm 实时日志
也改成跟随系统代码页,避免中文输出乱码。
2. 超时后红条常驻、界面像「再也不能更新」
现象:超时后更新器里一直挂着「等待关闭 DSH 超时,这次更新已放弃」,而且所有
行都是「未检测」、没有「更新」按钮。
修复:
expired/canceled的旧任务不再返回给界面(顺手清掉清单),红条消失;- 官方版本查询失败时,用缓存里的 tags / versions 兜底算出参照版本,行状态
不再全是「未检测」; - 客户端:
unknown状态(且上游查询已结束)也会显示「更新」按钮——
网络再差也有更新入口,不会被锁死。
3. 顺带保留 v1.0.4 的改动
下载总时长上限仍是 10 小时(慢网络可以挂着慢慢下,随时可取消)。
🛠️ 技术细节
updater_core.py:新增_decode_console_output()/_run_console();
processes_on_port/close_dsh/running_node_count全部改走字节+代码页解码;
_run_pnpm_step的编码跟随locale.getpreferredencoding();
新增_best_known_ref(),detect_all在官方版本抓取失败时用缓存清单兜底;
pending_update_status隐藏 expired/canceled 并清理清单lib/client.js:DetectRows允许 unknown 状态(上游查询结束后)显示更新按钮- 测试 188 → 195(GBK netstat/tasklist/taskkill 回归、自动关 DSH 找到进程、
缓存兜底参照、过期/取消状态隐藏)
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。版本号同步 1.0.5 |
dsh-updater-src-v1.0.5.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 注意
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(Host 半边不会热替换)
- 更新下载需要能访问 GitHub;网络差时现在可以挂着慢慢下,也可以取消
- 自动关闭模式会让当前 DSH 会话短暂断开(会话记录不受影响),重启后页面自动刷新
- 桌面更新器 / Python 源码版 / DSH 插件三条线版本号统一为 1.0.5
dsh 自动更新 v1.0.4
v1.0.4 发布说明 —— 慢网络也能更完:下载上限放宽到 10 小时
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。v1.0.3 把下载改成了后台任务并加了进度条;v1.0.4 根据实际网络情况,
把下载总时长上限从 15 分钟放宽到 10 小时,慢网也能挂着下完。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装 / 升级
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqabcd-source/dsh-updater⚡ 本版变化
1. 下载总时长上限:15 分钟 → 10 小时
实测在很差的网络下,GitHub 官方 zip(约 43 MB)只有 14 KB/s,15 分钟连 1/3 都下不完,
直接被判「下载超时」太不友好。现在允许下载慢慢磨 10 小时:
- 后台 worker 不会因为时间被掐断;
- 对话框里的进度条一直显示百分比 / 已下载 / 速度 / 剩余时间;
- 不想等了随时点「取消更新」,立刻结束下载并清理暂存。
断网/连不上的情况仍会按正常网络错误快速失败(连接超时、TLS 错误等),
不会无意义地空等 10 小时。
2. 顺带修掉「DSH 重启后页面偶尔不自动刷新」
v1.0.3 的自动刷新逻辑要求先观察到「DSH 断开」再观察到「恢复」才刷新;
如果进度轮询晚到、页面晚打开,可能永远观察不到断开事件,页面就停在等待状态。
现在 12 秒内没观察到断开也会刷新一次(DSH 已重启完成时正好用上)。
🛠️ 技术细节
updater_core.py:_UPDATE_STAGE_DOWNLOAD_TIMEOUT900 → 36000 秒;
download_file(max_total=...)逻辑不变,只是上限放宽index.js:非运行中目标的同步更新路由超时同步放宽到 10 小时;
正在运行的目标仍走后台 worker(无请求超时)lib/client.js:waiting-restart轮询增加 12 秒兜底刷新- 测试 187 → 188(断言下载上限 = 36000 秒)
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。功能与 v1.0.3 一致,版本号同步 1.0.4 |
dsh-updater-src-v1.0.4.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 注意
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(Host 半边不会热替换)
- 更新下载需要能访问 GitHub;网络差时现在可以挂着慢慢下,也可以取消
- 自动关闭模式会让当前 DSH 会话短暂断开(会话记录不受影响),重启后页面自动刷新
- 桌面更新器 / Python 源码版 / DSH 插件三条线版本号统一为 1.0.4
dsh 自动更新 v1.0.3
v1.0.3 发布说明 —— 更新进度条 + 后台下载(不再卡 20 分钟超时)
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。v1.0.2 把桌面更新器的流程搬进了插件;v1.0.3 修掉它最难受的两个体验问题:
看不到进度、下载慢时会一直卡到超时。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装 / 升级
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqabcd-source/dsh-updater⚡ 本版变化
1. 下载/解压改成后台 worker —— 不再阻塞请求
之前:点「开始更新」后插件同步跑 Python 下载,网络慢就会一直卡在请求里,
最长 20 分钟超时(超时后下载进程还可能挂在后台)。
现在:POST /update-source 立刻返回,真正的下载/解压交给脱离 DSH 的后台 worker
(python updater_core.py --json stage-source ...),界面轮询 /update-progress
拿进度。HTTP 请求不会再超时。
2. 对话框里有实时进度条
进度来自 updater_core.py 写出的 %APPDATA%\dsh-updater\update-progress.json:
正在下载官方源码… 37% · 12.3 MB / 33.1 MB · 1.2 MB/s · 18s
[██████████░░░░░░░░░░░░░░░░]
下载期间可以取消;暂存完成后看护进程会自动关闭 DSH 并更新
覆盖:准备 → 下载 → 解压 → 暂存,每一步都有百分比、速度、剩余时间。
3. 下载期间可以「取消更新」
点对话框里的「取消更新」会结束后台 worker、清掉暂存目录、把进度标记为已取消。
4. 真的卡死会明确报错,而不是无限等
单次下载总时长上限 15 分钟:超过就报「下载超时(网络太慢)」,不会无声无息挂着。
5. 后续流程不变(仍是 v1.0.2 那套)
暂存完成后:按勾选自动关闭 DSH → 备份旧目录 → 换入新源码 → 按需
pnpm install / pnpm run build → 自动重启 DSH → 页面轮询到 DSH 恢复后自动刷新。
不勾自动关闭时仍是「提示你关 DSH → 关后自动应用 → 自动重启」。
🛠️ 技术细节
updater_core.py:download_file/_extract_zip_with_progress新增detail_cb
(结构化进度)与max_total(总时长上限);新增update-progress.json读写、
--json update-progress动作;cancel-staged在还没有 manifest 时也能取消下载index.js:/update-source对「正在运行的 DSH」改为 detached 后台 worker;
新增GET /update-progress(直接读文件,不启动 Python);进度文件路径与
updater_core.py的_settings_dir()保持一致(支持DSH_UPDATER_SETTINGS_DIR)lib/client.js:新增进度条组件与轮询;下载中可取消;「先断后连」逻辑确保
DSH 重启完成后才刷新页面(不会刚断开就误刷新)- 测试 183 → 187(staged/failed 进度落盘、下载中取消杀 worker、进度 CLI)
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。功能与 v1.0.2 一致,版本号同步 1.0.3 |
dsh-updater-src-v1.0.3.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 注意
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(Host 半边不会热替换)
- 更新下载需要能访问 GitHub;网络不好时会走得慢,但现在能看到进度、也能取消
- 自动关闭模式会让当前 DSH 会话短暂断开(会话记录不受影响),重启后页面自动刷新
- 桌面更新器 / Python 源码版 / DSH 插件三条线版本号统一为 1.0.3
dsh 自动更新 v1.0.2
v1.0.2 发布说明 —— 插件内更新对话框:复刻桌面更新器的完整体验
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。v1.0.1 把「更新」按钮改成弹桌面 EXE;v1.0.2 再往前走一步:插件自己把桌面更新器的
流程复刻出来——不用离开 DSH,就能完成「下载 → 关 DSH → 替换 → 构建 → 重启 DSH」。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装 / 升级
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqabcd-source/dsh-updater⚡ 本版变化
1. 点「更新」→ 插件内更新对话框(不再直接弹 EXE)
对话框里和桌面版一样有:
| 项目 | 说明 |
|---|---|
| 目标目录 | 要更新的源码检出(运行时 profile 会指向同一个检出) |
| 版本 | 当前版本 → 官方最新版本 |
| ✅ 更新时自动关闭 DSH | 看护进程会自动结束 DSH(只结束占用端口的 PID),完成后自动重启 |
☐ 替换后运行 pnpm install |
依赖有变化时建议勾选 |
☐ 替换后运行 pnpm run build |
用源码版启动 DSH 时必需 |
| 按钮 | 开始更新 / 关闭 / 改用桌面更新器(仍然可以启动 EXE) |
2. 勾「自动关闭 DSH」后的完整流程(复刻桌面版)
- 插件下载官方源码到暂存目录(页面显示提示,可能要几分钟);
- 后台看护进程(脱离 DSH 独立存活)等 3 秒后自动关闭 DSH;
- 备份旧目录 → 换入新源码 → 搬回
node_modules/.git→ 按需pnpm install/pnpm run build; - 用原来的启动参数自动重新启动 DSH;
- 页面轮询到 DSH 重新监听端口后自动刷新,看到的就是新版本。
仍保留手动模式:不勾「自动关闭 DSH」时,流程变成「提示你关 DSH → 关闭后自动应用 → 自动重启」。
3. 安全细节
- 自动关闭只对占用端口的 PID 发 SIGTERM,不用
taskkill /T——看护进程是 DSH 的
子进程,/T会把它自己一起杀掉,导致更新卡死; - 旧目录整目录备份,构建失败自动回滚到旧版本再重启 DSH(不会「DSH 被弄没」);
- 目录被别的实例占用时保留暂存更新,界面提供「重试应用」,不用重新下载;
- 暂存后、关闭 DSH 前仍可「取消更新」。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。功能与 v1.0.1 一致,版本号同步 1.0.2 |
dsh-updater-src-v1.0.2.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 注意
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(Host 半边不会热替换)
- 自动关闭模式会让当前 DSH 会话短暂断开(会话记录不受影响),重启后页面自动刷新
- 同一目录启动了多个 DSH 实例时,建议先把它们都关掉再点更新(否则会进入「重试应用」)
- 更新期间需要能访问 GitHub(下载官方源码);网络不好时下载会慢或失败,可稍后重试
- 桌面更新器 / Python 源码版 / DSH 插件三条线版本号统一为 1.0.2
dsh 自动更新 v1.0.1
v1.0.1 发布说明 —— 「更新」按钮直接弹出桌面更新器窗口
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。v1.0.0 是首个「完善版」;v1.0.1 修掉插件「更新」入口的几个问题,让更新 DSH 本体
回到桌面版那套成熟流程上。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装 / 升级
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqabcd-source/dsh-updater⚡ 本版变化
1. 「检测」按钮改名「更新器」
标题栏三个按钮现在是「更新器 / 回滚 / 版本」,面板标题简化为「DSH 自动更新器」。
检测本来就是为了更新,不必再分开叫。
2. 「更新」按钮 → 直接弹出桌面更新器窗口
| 之前(v1.0.0) | 现在(v1.0.1) | |
|---|---|---|
| 点「更新」后 | 插件自己下载暂存,提示你关 DSH,再靠看护进程替换 | 直接弹出桌面更新器窗口(EXE) |
| 更新流程 | 插件内两段式:暂存 → 关 DSH → 替换+构建+重启 | 桌面版完整流程:检测 DSH 在跑 → 询问后自动关闭 DSH → 备份旧目录 → 下载官方源码 → 整目录替换(可选 pnpm install / pnpm run build) |
| 适合谁 | 习惯「插件自己搞定」的人 | 想直接更新 DSH 本体、且复用桌面版成熟流程的人 |
插件里找不到本地更新器 EXE 时,会自动回退到原来的插件内更新流程,不会点了没反应。
3. 更新器 EXE 永远挑最新的
profile 里配置的 updaterPath 可能指向很旧的构建(本机配置还指着一个 0.8.0 的 dist)。
现在会把「配置路径 + searchDirs」里的 EXE 全部找出来,按修改时间取最新的
(文件名带 updater / dsh 优先),不会再弹出旧版本。
4. 修复「点了更新报 log is not defined」
上一版(未发布到 npm 的开发提交)里接口返回 502、面板红字报错,但 EXE 其实已经启动。
v1.0.1 修好,现在正常返回 200,窗口弹出、提示正常显示。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。本版内容与 v1.0.0 功能一致,版本号同步为 1.0.1 |
dsh-updater-src-v1.0.1.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 注意
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(DSH 插件页不支持自动更新;
Host 半边不会热替换,不重启会出现旧按钮 404 / 旧路径报错) - 插件点「更新」弹出的桌面更新器会先关掉当前 DSH(有确认框),更新完重新打开 DSH 即可;
会话记录不受影响 - 同一目录启动了多个 DSH 实例时,桌面更新器更新前需要把它们全部关闭
- 桌面更新器 / Python 源码版 / DSH 插件三条线版本号统一为 1.0.1
dsh 自动更新 v1.0.0
v1.0.0 发布说明 —— 首个完善版:在 DSH 插件里直接更新 DSH
⭐ v1.0.0 是本项目第一个「完善版」:桌面 EXE、Python 源码版、DSH 插件三条线功能齐全、
行为一致;检测、回滚、插件内更新 DSH 全部可用,npm / GitHub 两种安装方式均已端到端验证。本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqhiabcd-source/dsh-updater |
| npm 包页 | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqhiabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
安装(二选一,装完重启 DSH):
:: 从 npm 安装
dsh plugin --profile web add dsh-updater-plugin
:: 或从 GitHub 安装(安装地址一直没变)
dsh plugin --profile web add github:mutoharohfiqhiabcd-source/dsh-updater⚡ 本版新功能:在插件里点一下就能更新 DSH
「检测」面板里,可更新的源码检出那一行会多出一个「更新」按钮:
- 点两下确认(第一次变「确认更新?」,第二次才执行);
- 插件自动下载官方源码并暂存(此时不碰正在运行的 DSH 目录);
- 完成后提示你关闭 DSH(同一目录开了多个实例就都关掉);
- 后台看护进程在 DSH 关闭后自动完成:整目录替换 → 按需
pnpm install→
按需pnpm run build→ 自动重新启动 DSH(约 2~5 分钟); - 刷新页面,版本已经更新。
下载、替换、构建、重启的全过程都有日志(界面里会显示日志路径),
什么时候该关、关掉之后在干什么,都不用猜。
🧠 为什么不能「点完立刻在线替换」
Windows 不允许对一个正被其他进程当作工作目录的目录改名(实测 Move-Item
直接报「文件正被另一进程使用」)。而 DSH 的源码检出正是它自己的运行目录,
所以只能拆成两段:
| 阶段 | 时机 | 做什么 |
|---|---|---|
| ① 暂存 | DSH 运行中(安全) | 下载官方源码 → 解压到目标同级暂存目录 → 写清单、启动看护进程 |
| ② 应用 | DSH 关闭后(看护进程) | 旧目录改名为备份 → 暂存目录换到位 → 恢复 node_modules/.git → 按需 install/build → 重启 DSH |
这样替换那一刻磁盘上的文件不会被任何进程占用,也才能保证「构建失败还能回到旧版本」。
🔒 安全设计(都是自动的)
- 旧目录整目录备份:替换前改名成
*.dsh-bak-时间戳,更新失败自动回滚; - 构建失败自动回滚:
pnpm run build失败会把旧目录换回来,保证重启后一定能用; - 目录被占用不判死刑:如果关闭 DSH 后目录仍被别的实例占用,暂存更新会保留,
界面提示「重试应用」——关掉占用进程再点一次即可,不用重新下载; - 可取消:暂存后、关闭 DSH 前可随时「取消更新」(会结束看护进程并清理暂存目录);
- 换错目标不会乱动手:应用前重新校验目标仍是 DSH 源码检出、版本与清单一致;
- 只处理源码检出;npm 全局安装不在本功能范围。
运行时 profile 如果其@deepseek-ai/dsh是指向源码检出的 junction(本机就是),
那一行也会有「更新」按钮——它更新的就是这个源码检出,更新并重启后,
所有使用该运行时的 profile 都会变成新版本。
📋 使用步骤
| 步骤 | 你会看到 |
|---|---|
| 1. 检测 → 点「更新」→ 再点「确认更新?」 | 行尾变成「下载中…(可能要几分钟)」 |
| 2. 下载完成 | 面板顶部出现「更新包已就绪:旧版本 → 新版本」+ 关闭提示 |
| 3. 关闭 DSH(所有从该目录启动的实例) | ——(DSH 已退出,看护进程接手) |
| 4. 等待 2~5 分钟 | DSH 会自动重新启动 |
| 5. 刷新 DSH 页面 → 再点「检测」 | 版本已是最新,顶部显示「上次更新完成」 |
如果更新失败,DSH 也会被重新启动(旧版本),页面里会显示失败原因与日志路径,
旧版本备份还在,可以用「回滚」按钮退回去。
🛠️ 本版改动(技术细节)
updater_core.py:新增 5 个--json动作 ——stage-source/update-source/
update-status/cancel-staged/resume-staged;暂存、清单、看护进程、
替换/回滚、自动重启都在核心层实现,桌面 GUI 行为不变;- 看护进程用
DETACHED_PROCESS+pythonw启动(DSH 退出不会带走它),
轮询端口确认 DSH 已关闭后才动手;完成后用原来的 argv / 工作目录重新拉起 DSH; index.js:新增/update-source、/update-status、/cancel-update、
/resume-update四个路由;自动识别「目标目录就是当前运行 DSH 的根目录」——
是则走暂存流程,否则直接更新;lib/client.js:检测面板新增「更新」按钮(两次确认)与待应用更新横幅
(就绪 / 应用中 / 完成 / 失败 / 超时 / 取消,含取消与重试按钮),中英文案;- 「更新」按钮不只出现在源码检出行:运行时 profile 的
@deepseek-ai/dsh若是指向
源码检出的 junction,对应的 desktop / headless / web 行也会出现按钮(点哪行都是
更新同一个源码检出,检测结果里带update_target字段); - 测试 155 → 179(新增 24 条:暂存不碰目标目录、应用并保留 node_modules、
构建失败回滚、目录被占用保留暂存可重试、取消/重试、看护脚本语法、
junction 运行时解析、update_target 语义等)。
⚙️ 说明
- 需要本机 Python 3.10+(插件本来就用它做检测/回滚;没有 Python 时更新按钮不可用);
pnpm install只在pnpm-lock.yaml变化时执行;
pnpm run build只在目标目录本来就有apps/cli/lib(说明你用构建产物启动 DSH)时执行;- 首次构建可能比较慢,请耐心等看护进程日志里的「已重新启动 DSH」。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。含 v0.8.1 的检测提速 |
dsh-updater-src-v1.0.0.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 已知限制
- 在线更新针对源码检出(以及 junction 指向源码检出的运行时 profile);
纯 npm 安装的运行时 / npm 全局请用桌面版或手动处理 - 同一目录启动了多个 DSH 实例时,更新前需要把它们全部关闭
- 网页插件升级仍需「卸载 → 重新安装」并重启 DSH(DSH 插件页不支持自动更新)
- 断网时只显示本地结果,官方版本一栏会提示查询失败
- 回滚窗口最旧的一个备份若读不出
package.json的版本,会显示「回到 备份版本」 - 「使用 GPU 加速」目前仅记录偏好:DSH 尚未提供 GPU 加速选项
dsh 自动更新 v0.9.0
v0.9.0 发布说明 —— 上架 npm + 插件包名迁移(安装地址不变)
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqhiabcd-source/dsh-updater |
| npm 包页(v0.9.0 起) | https://www.npmjs.com/package/dsh-updater-plugin |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqhiabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
📦 这一版:插件上了 npm,包名改成 dsh-updater-plugin
npm 上的 dsh-updater 这个名字已经被别人的同名插件占用(不是本仓库),
所以本版把包名改成 dsh-updater-plugin 并正式发布到 npm。
GitHub 安装地址完全没变(仓库名还是 dsh-updater),只是包的内部名字变了:
| 项目 | 之前 | 现在 |
|---|---|---|
| GitHub 安装 spec | github:mutoharohfiqhiabcd-source/dsh-updater |
不变 |
| npm 安装 spec | (没有) | dsh-updater-plugin |
| 插件在 DSH 里显示的名字 | dsh-updater |
dsh-updater-plugin |
| 桌面 EXE / 源码版 zip | 不变 | 不变(版本号跟着升到 0.9.0) |
已经在用旧版插件的:卸载旧插件 → 按下面任一方式重装 → 重启 DSH。
(DSH 的插件升级本来就必须重启,「旧名 + 新名」也不建议同时装。)
📥 安装 / 升级
DSH 网页插件(两种方式任选)
:: 方式 A:从 npm 安装(v0.9.0 起可用)
dsh plugin --profile web add dsh-updater-plugin
:: 方式 B:从 GitHub 安装(一直可用,安装地址没变)
dsh plugin --profile web add github:mutoharohfiqhiabcd-source/dsh-updater图形界面:DSH 侧边栏 → 插件 → 添加插件 → 填 dsh-updater-plugin
或 github:mutoharohfiqhiabcd-source/dsh-updater → 安装 → 重启 DSH。
桌面版
| 你用的是 | 怎么升 |
|---|---|
| 桌面 EXE | 下载本页的 DeepSeekHarnessUpdater.exe 覆盖旧的 |
| 源码版 / Python 版 | 下载 dsh-updater-src-v0.9.0.zip 解压替换 |
⚠️ 插件运行在 DSH 主进程内、不受工作区沙箱限制;检测 / 回滚 / 下载 / 启动都会
真实读写磁盘。检测与回滚需要本机有 Python 3.10+,没装时界面会明确提示。
⚡ 顺带回顾:检测已经变快了(v0.8.1 起)
| 场景 | 旧版 | 现在 |
|---|---|---|
| 5 分钟内重复检测(命中缓存) | 93.6 秒 | 0.52 秒 |
| 冷启动(真的联网查一次) | 93.6 秒 | 1.7 ~ 6 秒(取决于网络) |
| 只查本机安装(离线模式) | 0.35 秒 | 0.43 秒 |
原理:多源并发赛跑(GitHub 官方源 + jsDelivr 镜像 + npm 官方源 + npmmirror 镜像 +
并发重试)、npm 元数据改走 HTTP 接口(去掉 33 秒的 npm view 子进程)、
必需项到手立即返回、结果本地缓存 5 分钟。详见 v0.8.1 的 Release 说明。
🖼️ 长这样
| 回滚面板(点一次确认、再点一次才执行) | 插件管理页 |
|---|---|
![]() |
![]() |
桌面版的样子见 README。
🔧 本版改了什么
package.json包名:dsh-updater→dsh-updater-plugin(npm 发布用);cordis.patch.yml里 bundle 行引用的模块名同步改成新包名;- 网页客户端产物
lib/client.js的模块注册 id 同步改新包名
(DSH 的模块系统要求注册 id 等于包名,测试里有断言防漏改); - Host 半边插件名同步改新包名;
- README / Release 说明补上 npm 安装方式;
- 新增测试守护:bundle patch 里的模块名必须等于
package.json的包名。
接口路由
/dsh-updater/api/*、会话标题栏的三个按钮、工具名dsh_updater
都没有变,行为与 v0.8.1 完全一致。
⚙️ 工程改进
- 测试 154 → 155 项(新增「包名与 bundle patch 一致性」守护);
- CI 继续在 Ubuntu + Windows、Python 3.10 / 3.12 四组矩阵上跑冒烟测试;
- 打包源码版 zip 时会自动带上新包名与新文档。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。含 v0.8.1 的检测提速 |
dsh-updater-src-v0.9.0.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:从 npm(
dsh-updater-plugin)或本仓库直接安装即可。
⚠️ 已知限制
- 网页插件升级需要「卸载 → 重新安装」并重启 DSH(DSH 的插件页明说不支持自动更新)
- 断网时只显示本地结果,官方版本一栏会提示查询失败
- 回滚窗口最旧的一个备份若读不出
package.json的版本,会显示「回到 备份版本」 - 切换语言后若个别文字仍显示为其它语言,点一次「🔄 重新检测」刷新即可
- 「使用 GPU 加速」目前仅记录偏好:DSH 尚未提供 GPU 加速选项
dsh 自动更新 v0.8.1
v0.8.1 发布说明 —— 检测提速:90 秒 → 半秒
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqhiabcd-source/dsh-updater |
| DSH 插件安装地址(填进 DSH「插件 → 添加插件」) | github:mutoharohfiqhiabcd-source/dsh-updater |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqhiabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
一行安装(装完重启 DSH):
dsh plugin --profile web add github:mutoharohfiqhiabcd-source/dsh-updater⚡ 这一版只干一件事:把「检测更新」从 90 秒压到半秒
之前点一次「检测」,在中国大陆的网络下经常要等 一分半 才有结果;现在:
| 场景 | 旧版 | v0.8.1(实测) |
|---|---|---|
| 5 分钟内重复检测(命中缓存) | 93.6 秒 | 0.52 秒 |
| 冷启动(真的联网查一次) | 93.6 秒 | 1.7 ~ 6 秒(取决于网络;网络好 1.7s,差时 5~9s) |
| 只查本机安装(离线模式) | 0.35 秒 | 0.43 秒 |
测法:真实调用正在运行的 DSH 插件接口
/dsh-updater/api/detect,并直接跑
python updater_core.py --json detect。桌面版与网页插件共用同一套检测代码,
所以两边同时变快。
🔍 为什么原来那么慢(逐项实测,不是猜)
- 旧实现串行发 7 个网络请求,每个超时 20~25 秒;
- 最拖后腿的是
npm view versions子进程 —— 实测 32.8 秒; - GitHub 的接口在国内网络下 TLS 握手会被随机卡住:同一个 URL 一次 2.6 秒成功、
一次 25 秒超时。7 个请求串起来,最坏要等 7 次超时 —— 实测整次 93.6 秒; - 其实本地扫描只要 0.32 秒,根本不是瓶颈。
🔧 怎么改的
- 多源并发赛跑:每类数据同时发多个候选(GitHub 官方源 + jsDelivr 镜像 +
npm 官方源 + npmmirror 镜像 + 并发重试),谁先成功用谁;单个请求 5 秒超时,
整轮最多等 8 秒; - npm 元数据改用 HTTP 接口(
application/vnd.npm.install-v1+json,
一次拿回 dist-tags + 全部版本 + engines),彻底去掉 33 秒的npm view子进程,
也不再要求本机装过 npm; - 必需项到手就收工:只要拿到「GitHub master 版本」和「任一 npm 版本通道」,
就立即返回判断结果,不再为「最近提交 / tags 清单」这类展示细节白等 5 秒; - 本地缓存:
%APPDATA%\dsh-updater\official-cache.json,完整结果缓存 5 分钟;
抓取不完整时只缓存 30 秒(防止一次网络失败把之后 5 分钟都锁死在错误结果上); - 「更新器自身最新版本」检查也缓存 5 分钟;本机 Node 版本只查询一次;
- 网页插件请求 GitHub Release 增加 8 秒超时(原先网络卡住时「版本」面板会一直转圈)。
诚实说明:所有源都失败时,界面会如实显示「官方版本获取失败」,
不会拿旧版本假装「已是最新」;jsDelivr 兜底最坏只会让我们晚一个版本发现更新,
不会误报「可更新」。
🖼️ 长这样
| 回滚面板(点一次确认、再点一次才执行) | 插件管理页 |
|---|---|
![]() |
![]() |
桌面版的样子见 README。
📥 怎么升级
| 你用的是 | 怎么升 |
|---|---|
| 桌面 EXE(旧版不会自动变快) | 下载本页的 DeepSeekHarnessUpdater.exe 覆盖旧的即可 |
| 源码版 / Python 版 | 下载 dsh-updater-src-v0.8.1.zip 解压替换 |
| DSH 网页插件 | DSH 侧边栏 → 插件 → 卸载 → 添加插件填 github:mutoharohfiqhiabcd-source/dsh-updater → 重启 DSH |
⚠️ 网页插件升级必须重启 DSH:磁盘文件换掉后,运行中的 DSH 仍持有旧的 Host 半边。
⚠️ 插件运行在 DSH 主进程内、不受工作区沙箱限制;检测 / 回滚 / 下载 / 启动都会
真实读写磁盘。检测与回滚需要本机有 Python 3.10+,没装时界面会明确提示。
⚙️ 工程改进
- 测试 140 → 154 项,新增的 14 条全部围绕这次的提速逻辑,防它以后悄悄退化:
- 缓存命中必须零网络直接返回(并返回副本,调用方改不坏缓存);
- 不完整结果只缓存 30 秒;完整结果 5 分钟内有效;
- 抓取失败时可以沿用旧的 tags / 版本清单,但 latest 版本绝不能用旧值冒充;
- 多源请求必须真并发(3 个 0.25s 请求总耗时 < 0.6s,串行要 0.75s);
- 必需项到齐必须立即返回,不为可选项干等超时;
- jsDelivr 的 tags 是字典、api.github.com 的 tags 是列表,两种格式都要能解析;
--fresh参数必须能强制绕过缓存(发版验证用)。
- 网页插件仍是手写的闭包工厂产物(
lib/client.js),从 GitHub 直装不会触发
pnpm 的allowBuilds授权询问。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。本版已含检测提速 |
dsh-updater-src-v0.8.1.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:它直接从本仓库安装(见上),不需要下载 EXE。
⚠️ 已知限制
- 网页插件升级需要「卸载 → 重新安装」(DSH 的插件页明说不支持自动更新)
- 断网时只显示本地结果,官方版本一栏会提示查询失败
- 回滚窗口最旧的一个备份若读不出
package.json的版本,会显示「回到 备份版本」 - 切换语言后若个别文字仍显示为其它语言,点一次「🔄 重新检测」刷新即可
- 「使用 GPU 加速」目前仅记录偏好:DSH 尚未提供 GPU 加速选项
dsh 自动更新 v0.8.0
v0.8.0 发布说明 —— 网页版插件格式(不是软件更新)
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。
🔗 相关链接
| 名称 | 链接 |
|---|---|
| 本仓库(桌面版 + DSH 插件本体) | https://github.com/mutoharohfiqhiabcd-source/dsh-updater |
| DSH 插件安装地址(填进 DSH「插件 → 添加插件」) | github:mutoharohfiqhiabcd-source/dsh-updater |
| DSH 官方仓库(插件宿主) | https://github.com/deepseek-ai/deepseek-harness |
| 最新 Release 下载 | https://github.com/mutoharohfiqhiabcd-source/dsh-updater/releases/latest |
| 功能介绍推文 | https://x.com/0ncv2l/status/2106351434749161735 |
一行安装(装完重启 DSH):
dsh plugin --profile web add github:mutoharohfiqhiabcd-source/dsh-updater🖼️ 长这样
| 回滚面板(点一次确认、再点一次才执行) | 插件管理页 |
|---|---|
![]() |
![]() |
桌面版的样子见 README。
❗ 先说清楚:这一版的主角不是软件
v0.8.0 没有对桌面程序做任何功能改动。桌面 EXE / 源码版仍在,只是跟着版本号
重建了一份,功能与 v0.7.7 完全一致。
这一版发布的是 DSH 网页版插件格式:本仓库从 v0.7.7 起同时是一个 DSH 插件包,
v0.8.0 把它补完 —— 装进 DSH 后,会话标题栏会多出「检测 / 回滚 / 版本」三个按钮。
也就是说:
| 用法 | 形态 | 需要下载 EXE 吗 |
|---|---|---|
| 桌面小工具(一直有) | Windows 程序(EXE / Python) | 需要 |
| 在 DSH 网页界面里直接用(本版新增) | DSH 插件(网页版) | 不需要 |
🧩 本版新增:会话标题栏的三个按钮
装好插件后,每个会话的标题栏(「1 个后台任务」那一排)会出现:
| 按钮 | 作用 |
|---|---|
| ↻ 检测 | 先本地秒开(0.45 秒,不发网络请求)列出本机所有 DSH 安装:源码检出 / npm 全局 / 运行时 profile,各自版本与参照版本;官方最新版本随后异步补上,查不到会明说,不会一直转圈 |
| ↩ 回滚 | 列出源码备份、npm 回滚点、profile 回滚点;点一次变「确认回滚?」再点一次才执行;执行前会先把当前目录也存成一份新备份,所以回滚本身可逆 |
| ⓘ 版本 | 更新器自身版本、最新 Release、本机 Python、本地 EXE 与归档、各安装的版本 |
三个按钮不是在网页里重写逻辑,而是调用本仓库的 updater_core.py
(新增 --json 命令行模式),与桌面版共用同一套代码。
📥 怎么装这个网页版插件
图形界面:DSH 侧边栏 → 插件 → 添加插件 → 填
github:mutoharohfiqhiabcd-source/dsh-updater → 安装。
命令行:
dsh plugin --profile web add github:mutoharohfiqhiabcd-source/dsh-updater装完重启一次 DSH 即可在每个会话标题栏看到三个按钮。
⚠️ 升级场景务必重启:磁盘上的文件换掉后,运行中的 DSH 仍持有旧的 Host 半边,
此时刷新页面按钮会出现、但一按就报 404。
⚠️ 插件运行在 DSH 主进程内、不受工作区沙箱限制;检测 / 回滚 / 下载 / 启动都会
真实读写磁盘。检测与回滚需要本机有 Python 3.10+,没装时界面会明确提示,
版本信息不受影响。
❗ 重要修复:之前的「源码版 zip」根本跑不起来
现象:下载 dsh-updater-src-v*.zip(README 里的正式安装方式之一)解压后,
双击 启动更新器.bat 或运行 python updater_gui.pyw,第一行就报错:
ModuleNotFoundError: No module named 'i18n'
原因:打包脚本 pack_source.py 的白名单只列了 7 个文件,漏掉了全部
i18n 语言模块(i18n.py、i18n_data.py、各语言包共 12 个)。而
updater_core.py 第 29 行就是 from i18n import t,所以解压出来必然起不来。
这个坑在 v0.7.7 及更早的版本里一直存在。
修复:语言包改为按 i18n*.py 通配自动打包(以后新增语言也不会再漏),
并新增测试 test_source_zip_is_runnable —— 它会把 zip 解压到临时目录、
真的 import updater_core 跑一次,而不是只看清单。
源码版 zip 现在有 26 个文件,同时带上插件文件,解压后「桌面版」和
「DSH 网页插件」两种用法都能直接用。建议之前下过源码版的用户重新下载。
🔧 顺手修掉的另一个问题
带 BOM 的 package.json 会被误判成「不是有效的 DSH 源码检出」
Windows 上的记事本与部分编辑器会给 UTF-8 文件写 BOM,而 json.loads 遇到 BOM
会直接抛错。结果是:明明是正确的检出目录,检测说它不是,回滚也被安全阀挡下来。
现在读取 JSON 一律用 utf-8-sig(没有 BOM 时行为不变)。
⚙️ 工程改进
- 测试 132 → 140 项,新增的守护都用真实踩过的坑写成:
- 源码版 zip 解压后必须真的能 import(真实执行,不看清单)
files白名单必须覆盖updater_core.py的全部运行时模块
(漏一个 i18n 文件,用户在插件里就会 ImportError,本地开发完全复现不出来)package.json版本必须等于 GUI 的APP_VERSION- 插件声明三件套(
dsh.client/./client导出 / 产物)必须对齐 - 带 BOM 的检出目录仍能被识别
--offline模式一个网络请求都不发
- 网页插件是手写的闭包工厂产物(
lib/client.js),仓库里没有构建脚本 ——
所以从 GitHub 直装不会触发 pnpm 的allowBuilds授权询问。
📦 本版资产
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版桌面工具(无需 Python)。与 v0.7.7 功能一致,仅版本号更新 |
dsh-updater-src-v0.8.0.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter)。本版起才真正可用(此前漏打包语言模块);同时附带 DSH 插件文件 |
SHA256.txt |
EXE 的 SHA256 校验值 |
网页版插件不在这些资产里:它直接从本仓库安装(见上),不需要下载 EXE。
本 Release 附带的 EXE 只是桌面版的例行重建。
⚠️ 已知限制
- 网页插件升级需要「卸载 → 重新安装」(DSH 的插件页明说不支持自动更新)
- 插件里的「检测」在断网时只显示本地结果,官方版本一栏会提示查询失败
- 回滚窗口最旧的一个备份若读不出
package.json的版本,会显示「回到 备份版本」 - 切换语言后若个别文字仍显示为其它语言,点一次「🔄 重新检测」刷新即可
- 「使用 GPU 加速」目前仅记录偏好:DSH 尚未提供 GPU 加速选项
dsh 自动更新 v0.7.7
v0.7.7 更新说明(修订版)
本文件是「最新一版」的更新说明,发布新版本前请改成当版内容。
GitHub Actions 在推送v*tag 时会把这个文件的内容作为 Release 说明(body_path)。注:本版在原 v0.7.7 之后补了一个修复,版本号不变,Release 就地更新。
🔧 重要修复(务必更新)
深色 / 浅色设置没有被真正记住
原 v0.7.7 声称「深色模式会被记住」,实际上只记住了一半:
启动时恢复了 _dark 这个标志,却没有同步重建调色板 CLR。CLR 是模块级
变量,模块导入时固定为浅色,只有点「切换主题」才会更新它。于是出现错位:
- 偏好档里存的是深色 → 程序认为自己是深色(
_dark=True) - 但界面仍然是浅色(
CLR还是浅色) - 下次点「切换主题」还会反过来:标志变成浅色,界面却应用深色
现在启动时会按已保存的主题同步重建 CLR,标志与配色不再错位。
已验证:写入 dark_mode: true 的偏好档 → 全新进程启动 →
_dark=True 且 CLR['bg']=#12161c、CLR['row_bg']['update']=#3a2f16(均为深色)✓
新增回归测试 test_startup_syncs_palette_with_saved_theme 锁住该约束。
✨ 本版其它改动
深色模式会被记住
切换主题后会写入 preferences.json,下次启动直接沿用(本次修复让它真正生效)。
回滚窗口在深色模式下整体纯黑
窗口、列表、滚动条、原生标题栏一律纯黑,与主窗口的深蓝灰区分开。
浅色模式维持原样。实现用本窗口专属样式名(Rb.*),不影响主窗口。
深色模式下的可读性
| 位置 | 原问题 |
|---|---|
| 「语言」下拉框 | _setup_style 从未配置 TCombobox,clam 主题给出白底黑字,深色下是空白白框 |
| 插件 / 技能窗口横幅 | 背景写死浅色,深色下刺眼 |
| 按钮按下态 | 按下色写死浅色 |
| 回滚窗口提示文案 | Hint.TLabel 被使用却未定义,ttk 渲染成一块黑底 |
⚙️ 工程改进
- 新增
test_all_used_ttk_styles_are_defined:比对「源码里使用的 ttk 样式」与
「_setup_style里定义的样式」,漏定义不会再溜过去 - 新增
test_startup_syncs_palette_with_saved_theme:锁住主题标志与配色的同步 - 测试 130 → 132 项
📦 本版资产(两种版本)
| 文件 | 说明 |
|---|---|
DeepSeekHarnessUpdater.exe |
Windows 独立版(无需 Python),双击即用 |
dsh-updater-src-v0.7.7.zip |
Python 源码版:解压后双击 启动更新器.bat,或运行 python updater_gui.pyw(需 Python 3.10+,含 tkinter) |
SHA256.txt |
EXE 的 SHA256 校验值 |
上版本用户若已安装:直接覆盖 exe 即可,数据(CSV 导出)与本地设置不受影响。
⚠️ 已知限制
- 回滚窗口最旧的一个备份若读不出 package.json 的版本,会显示「回到 备份版本」
- 下拉框展开后的列表使用 Tk option 数据库上色,未能在开发机上回读验证
- 切换语言后若个别文字仍显示为其它语言,点一次「🔄 重新检测」刷新即可
- 「使用 GPU 加速」目前仅记录偏好:DSH 尚未提供 GPU 加速选项


