dsh-fs-retry:在 Windows 上对 ReplaceFileW 失败进行重试的 DSH 插件

前言

在 Windows 上使用 DeepSeek Harness(DSH)进行文件写入时,经常遇到 ReplaceFileW 调用失败,返回 Win32 错误 1175。此时整个工具调用会直接中断,即使重试一次就能成功。该插件的目标是在 DSH 服务边界拦截这类失败,通过退避重试将成功率提升至接近 100%。

这是什么

dsh-fs-retry 是一个运行在 DSH profile 中的插件,用于对 ctx.fs.writeText 调用进行包装。当底层文件系统在 Windows 上通过 ReplaceFileW 执行替换写入时,如果目标文件被短暂占用而返回错误 1175,插件会自动重试最多 8 次。插件由 ShioUmiusi(维护者:塩漬けウミウシ)维护,许可证为 MIT。

核心功能

  • 仅包装 writeText 操作,对 read、edit、diff 不做改动。
  • 仅拦截错误消息匹配 Win32 1175 或 ReplaceFileW 的异常。
  • 重试策略为 8 次尝试,每次间隔 12 ms × attempt,最坏情况约 340 ms 后抛出原始错误。
  • 参数与返回值保持原样,最终失败时抛出原始异常类型。

安装与启用

插件不包含在 app.asar 中,需要手动部署到 DSH profile。安装步骤如下:

  1. 将插件包放置在稳定目录,例如 D:\tools\dsh-fs-retry。
  2. 在 DSH profile 中创建一个目录级 junction 或 symlink,使 profile 能解析该路径:
   mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-fs-retry" "D:\tools\dsh-fs-retry"
  1. 在 profile 的 cordis.patch.yml 中注册插件行:
   - id: fs-retry
     name: dsh-fs-retry
  1. 重启 DSH 使插件生效。

典型用法

启动 DSH 后,日志应显示:

[fs-retry] 已装载(原型 ok / 实例 ok,重试 8 次)

然后在受影响的卷上反复执行文件写入操作,确认不再出现 Win32 1175 错误。每次重试会在日志中输出 第 N 次遇到 1175,退避后重试。

要验证插件行为,可以在插件目录下运行自测脚本:

node selftest.mjs

该脚本会覆盖三种情况:重试后成功、非 1175 不重试、8 次尝试后放弃。

适用场景与注意

  • 适合在 Windows 环境下使用 dsh-fs-local 进行文件写入的 DSH 插件开发者。
  • 插件以当前 DSH 进程的权限运行,请确保安装来源可信并阅读源码。
  • 插件仅解决 1175/ReplaceFileW 相关错误,其他文件系统错误不会触发重试。

短结尾

dsh-fs-retry 通过在服务边界对 writeText 进行重试,显著降低了 Windows 上因短暂文件占用导致的写入失败。安装后即可在日志中看到重试行为,适合需要在 Windows 上稳定写入文件的 DSH 插件。项目主页与目录页见下方链接。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜