Skip to content

fix(coding-agent): 修复 dsh 补丁 YAML 缩进丢失并让失败原因可见 - #1205

Open
xnqycs wants to merge 1 commit into
Open-Less:betafrom
xnqycs:fix/dsh-patch-yaml-indent
Open

xnqycs wants to merge 1 commit into
Open-Less:betafrom
xnqycs:fix/dsh-patch-yaml-indent

Conversation

@xnqycs

@xnqycs xnqycs commented Oct 15, 2026

Copy link
Copy Markdown

摘要

Fixes #1204。

修复 Less Computer 选择 dsh 后端时必然失败的问题:build_dsh_patch_yaml 生成的 openless.patch.yml 缩进全部丢失,是非法 YAML,dsh 解析时崩溃;同时让这类失败在界面上显示真实原因,而不是只显示 Node.js v24.18.1。

修复 / 新增 / 改进

  • build_dsh_patch_yaml:不再用行尾 \ 续行拼接(Rust 会吃掉下一行开头的空白),改用 concat! 逐行拼接,缩进得以保留。
  • summarize_stderr:对 error: 的匹配改为不区分大小写,使 Node 崩溃输出里的 Error: dsh: failed to parse ... 能被选中,而不是回退到最后一行的 Node 版本号。
  • 新增 3 个单元测试:
    • dsh_patch_yaml_keeps_its_indentation:逐字断言生成的补丁文本(含缩进、Windows 反斜杠路径、换行和引号)。
    • summarize_stderr_picks_the_node_crash_message_not_the_version_footer:用真实的 dsh 崩溃 stderr 断言摘要。
    • summarize_stderr_falls_back_to_the_last_line:无匹配行时仍回退到最后一行,空输入返回 None。

兼容

测试计划

  • 命令:cargo test --locked -p openless-core --lib -- summarize_stderr dsh_patch_yaml
  • 结果:3 个新增测试通过;修复前同样的测试失败(YAML 测试输出的正是无缩进文件,stderr 测试返回 Node.js v24.18.1)。coding_agent 模块 37 个测试全部通过。
  • 命令:fork 上手动触发 ci.yml(workflow_dispatch)
  • 结果:Windows、macOS、macOS MSRV 1.88、Android cargo check、Linux Core/egui/deb/rpm、UI motion 全部通过(该次运行基于 rebase 前的提交,内容与上游新增的发版提交互不相关)。
  • 证据路径:https://github.com/xnqycs/openless/actions/runs/38794452727
  • 端到端手动验证:用 OpenLess 同样的参数、环境变量和 Windows 启动方式(挂起启动 + Job Object + 管道 stdio)调用 DeepSeek Harness Desktop 的 dsh 0.2.0-rc.2,补丁文件缩进正确时正常返回,缩进丢失的版本报 YAMLException 且与 issue 中一致。未编译运行完整桌面应用。

build_dsh_patch_yaml 用行尾 `\` 续行拼接 YAML,Rust 会吃掉续行后的前导空白,
生成的 openless.patch.yml 没有任何缩进,是非法 YAML。dsh 解析补丁失败后崩溃,
Less Computer 选择 dsh 后端时每次都失败。

summarize_stderr 只取以 `dsh:` 开头或含小写 `error:` 的行,而 Node 崩溃输出是
`Error: dsh: failed to parse ...`,匹配不上就回退到最后一行,界面上只剩
`Node.js v24.18.1`,看不到真实原因。

- build_dsh_patch_yaml 改用 concat! 逐行拼接,保留缩进
- summarize_stderr 对 `error:` 的匹配不再区分大小写
- 新增测试:补丁 YAML 逐字输出(含 Windows 反斜杠路径、换行、引号)、
  Node 崩溃 stderr 的摘要、无匹配行时回退到最后一行
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[windows][less-computer][dsh] Windows 上 dsh 后端必然失败:生成的 openless.patch.yml 缩进丢失,界面只显示 Node 版本号

1 participant