Repository navigation
Releases: ZelotsNullzwei/dsh-ofm-updater
Release list
v1.2.0 — 改走 release 资产 + 断点续传
装不上/更新不动的问题修了两轮,这一版应该能正常跑完了。
之前为什么卡住
上一版只放宽了 pnpm 超时(60s → 600s),方向错了。实测下来:
| 路径 | 大小 | 速度 | 断点续传 | 结果 |
|---|---|---|---|---|
| codeload tar.gz | 12 MB | 35 KB/s | 不支持 | 479 秒后 EOF 断开 |
| release 里的 .tgz | 1.3 MB | — | 支持 | 195 秒下完 |
curl: (33) HTTP server does not seem to support byte ranges. —— codeload 压根不允许续传,12 MB 在 2035 KB/s 下要 57 分钟,中间断一次就前功尽弃。超时设多长都没用。
改了什么
下载改走 release 资产。 GitHub release 的 asset 走 objects.githubusercontent.com,体积只有 1.3 MB(只含 package/,不含 .git、测试、截图),而且支持 Range 请求。
流程变成:先 curl 断点续传到本地,再 pnpm add <本地文件>。每轮最多 45 秒,断了立刻重来,最多 40 轮。
pnpm 超时配置真的写进去了。 之前脚本文档里写着「本脚本会写入放宽的超时配置」,但代码里从来没有这段 —— 坑 2 描述的现象一直没被解决。现在写进 profile 的 .npmrc:
fetch-timeout=600000
fetch-retries=5
fetch-retry-mintimeout=10000
fetch-retry-maxtimeout=120000
network-concurrency=4保留你已有的其它项,写入失败只警告不中断。
下载缓存。 放在 backups/_downloads/,大小对得上就跳过,重复跑不用重下。
失败提示更具体。 现在会说剩余多少字节,而不是只甩一句 timeout。
实测
1.33 MB 用 4 轮、195.8 秒下完(中间有两轮没进展,续传接上了)。
用法
没变:
- 完全退出 DSH(含托盘图标)
- 双击
Update-OurFreeModel.bat - 重启 DSH
参数照旧:-DryRun -Rollback -TargetSha -TargetBranch -English
还是慢的话
那就只能开代理了。脚本会沿用系统代理设置,但不会替你配。
v1.1.0 — 默认只装发布版 + 记录热重载缺陷(已过时)
已被 v1.2.0 取代,建议换新版。
这个版本的下载走 codeload(12 MB 且不支持断点续传),在慢网络下大概率卡在
The operation was aborted due to timeout。v1.2.0 改成了 release 资产
- curl 断点续传,1.3 MB、可续传。
这个版本修了什么
1. 默认只装 release tag,不再跟 main
这是最重要的一条。 之前的版本会拉 main 分支的最新 commit 来装,但 main 上经常有未发布的中间提交 —— 实测 2026-10-18:
| commit | |
|---|---|
release v2.5.3 |
e465d73 |
main 最新 |
f0b979f(多一个 docs 提交,未发布) |
装 main 的后果:feed/manifest.json 里钉死了 pack.js 的 sha256 与大小,装未发布提交会让摘要对不上,OFM 随后报:
the committed digests do not describe the files on disk:
vendor/channel-pack/pack.js: size 2882871 in the manifest, 2883308 on disk
现在默认从 releases/latest 解析官方发布版,装的一定是签名过的那个。
要试 main 请显式传 -TargetBranch main(仅供调试)。
2. 成功提示明确要求重启
装完会打印醒目警告:
╔══════════════════════════════════════════════════════════╗
║ 必须完全退出 DSH Desktop 再重新打开 ║
╚══════════════════════════════════════════════════════════╝
因为文件装好≠生效 —— 运行中的进程还是旧代码。
3. 文档补充「OFM 内置升级为什么总是失败」
新增一整节解释你很可能遇到过的这个报错:
升级失败:upgrade failed, previous files restored
(re-import failed, old code still running
(activation version mismatch: expected 2.5.3, got 2.5.1))
这不是网络问题,也不是你操作错了。 OFM 用热重载做升级:写文件 → 清 Node 的 ESM/require.cache → 重新 import() → 校验版本号。而 Node 的模块缓存不可能被彻底清干净 —— 已求值过的 ESM 模块即使从 cache 删掉,别处可能还持有引用,于是 re-import 拿到的仍是旧版本,版本号必然对不上,升级回滚。
结论:跨版本升级必须重启进程。 OFM 那个「文件变化自动热重载」开关只适合同版本内的开发迭代。
变更
README.md +102 / -4
Update-OurFreeModel.ps1 +98 / -14
用法
- 完全退出 DSH Desktop(含托盘图标)
- 双击
Update-OurFreeModel.bat - 重新启动 DSH Desktop(关键 —— 不重启跑的还是旧代码)
先看看会做什么、不改任何东西:
Update-OurFreeModel.bat -DryRun回滚:
Update-OurFreeModel.bat -Rollback校验
文件: dsh-ofm-updater-v1.1.0.zip
大小: 16.8 KB (17,203 字节)
文件数: 4(LICENSE / README.md / Update-OurFreeModel.bat / Update-OurFreeModel.ps1)
Update-OurFreeModel.ps1 保持 UTF-8 with BOM(Windows PowerShell 5.1 需要,否则中文会按 GB2312 解析成乱码并报语法错误)。
关于 v1.0.0
v1.0.0 已有 54 次下载,那个版本会跟 main 并且不提示重启。建议换到 v1.1.0。
v1.0.0 — Our Free Model 一键更新
首次发布
给 DSH Desktop 的 Our Free Model 插件做一键更新。
用法
- 完全退出 DSH Desktop(含托盘图标)
- 解压后双击
Update-OurFreeModel.bat - 重新启动 DSH Desktop
这个版本解决什么
OFM 自带的应用内升级在国内长期不可用(清单源被墙、签名清单与实际文件不符、
升级检查响应超限),用户实际上只能手动更新。本工具把那套手动流程固化下来:
- 修复 PATH:
dsh与pnpm不在系统 PATH 里(DSH 只注入给它派生的进程),
双击打开的干净 cmd 调用dsh plugin会报 pnpm 找不到。脚本主动定位并修复。 - 放宽超时:GitHub codeload 实测 30-40 KB/s,9 MB 的包要 4-5 分钟;
pnpm 默认超时失败且日志不说明原因。脚本写入fetchTimeout: 900000。 - 固定 sha 下载:
archive/refs/heads/main.tar.gz内容可变,会导致
ERR_PNPM_MISSING_TARBALL_INTEGRITY,必须用 codeload + 固定 commit。
其他
- 更新前自动备份插件目录与用户数据,支持
-Rollback - 中英双语输出(
-English) - 管道 / CI 环境下不会挂起(暂停逻辑做了智能判断)
系统要求
- Windows
- DSH Desktop(用其自带的
dsh,无需单独安装 Node)
校验
下载后可比对 SHA256(见下方附件说明)。脚本为纯文本,可直接打开审阅。