Skip to content

Releases: ZelotsNullzwei/dsh-ofm-updater

v1.2.0 — 改走 release 资产 + 断点续传

Choose a tag to compare

@ZelotsNullzwei ZelotsNullzwei released this 20 Oct 16:28

装不上/更新不动的问题修了两轮,这一版应该能正常跑完了。

之前为什么卡住

上一版只放宽了 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 秒下完(中间有两轮没进展,续传接上了)。

用法

没变:

  1. 完全退出 DSH(含托盘图标)
  2. 双击 Update-OurFreeModel.bat
  3. 重启 DSH

参数照旧:-DryRun -Rollback -TargetSha -TargetBranch -English

还是慢的话

那就只能开代理了。脚本会沿用系统代理设置,但不会替你配。

v1.1.0 — 默认只装发布版 + 记录热重载缺陷(已过时)

Choose a tag to compare

@ZelotsNullzwei ZelotsNullzwei released this 18 Oct 03:46

已被 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

用法

  1. 完全退出 DSH Desktop(含托盘图标)
  2. 双击 Update-OurFreeModel.bat
  3. 重新启动 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 一键更新

Choose a tag to compare

@ZelotsNullzwei ZelotsNullzwei released this 14 Oct 12:03

首次发布

给 DSH Desktop 的 Our Free Model 插件做一键更新。

用法

  1. 完全退出 DSH Desktop(含托盘图标)
  2. 解压后双击 Update-OurFreeModel.bat
  3. 重新启动 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(见下方附件说明)。脚本为纯文本,可直接打开审阅。