dsh-smarter-edit: DSH 更可靠的文件编辑方案

前言

DeepSeek Harness(DSH)原生的 edit 工具要求模型重构精确的源代码字符串,并将旧的和新的一起通过结构化的 JSON 参数发送。这往往导致编辑失败——因为模型选中的代码变更是正确的,但 old_string 在空白符或字符上与文件不匹配。此外,这种机制需要模型重复输出大部分源代码,造成不必要的 token 消耗。

dsh-smarter-edit 插件通过用 Codex 兼容的 apply_patch 替换原生的 edit,解决了上述问题。它允许模型直接以补丁的形式表达代码变更,而不是重构整个字符串。这让模型可以将 token 花在改变代码上,而不是满足编辑协议的格式要求。

功能特性

该插件提供了以下核心能力:

  • Codex 兼容的补丁机制:用 apply_patch 替换原生 edit,支持自由格式的补丁描述。
  • 多补丁块支持:支持在一个调用中处理多个有序的 hunks。
  • 完整操作类型:支持 Add(添加文件)、Update(更新文件)、Move(移动文件)和 Delete(删除文件)操作。
  • 上下文匹配:采用 Codex 兼容的上下文匹配方式,降低匹配失败率。
  • 原子性保障:支持 failure-atomic 的预检和回滚机制,在处理失败时保护文件状态。
  • 原生渲染:使用 DSH 原生的 diff 渲染来展示变更结果。

安装与启用

在桌面端 Profile 上安装该插件:

dsh plugin --profile desktop add @anionex/dsh-smarter-edit

对于 Web 或 Headless Profile,请将 --profile desktop 替换为 --profile web 或 --profile headless。安装后需要重启对应的 Profile 并创建一个新的 Session。

安装完成后,可以通过以下命令验证插件是否已挂载:

dsh --profile desktop --dump-config | grep tool-apply-patch

典型用法

模型发送的内容需要包含在 *** Begin Patch 和 *** End Patch 之间。支持以下操作语法:

*** Begin Patch
*** Add File: relative/path.ts
*** Update File: relative/current.ts
*** Move to: relative/renamed.ts
*** End of File

使用标准的 diff 语法描述变更:- 表示删除的行,+ 表示添加的行。相对路径解析自 Session 的工作目录。Move to 操作是可选的,End of File 用于将 hunk 锚定到文件末尾。纯增量的更新 hunk 会直接追加到文件中。

兼容性与限制

  • DSH 版本:>=0.1.1-rc.1 <0.2.0。
  • Node.js 版本:^22.19.0 || >=24.0.0。
  • 支持 Profile:desktop、web 和 headless。
  • 权限要求:需要活动 DSH sandbox 的写入权限。workspace-write 保留配置的边界,danger-full-access 允许绝对路径和父级相对路径。
  • 回滚机制:插件在处理失败时会回滚已发布的变更。如果一个大补丁中的一个 hunk 失败,整个补丁会被拒绝,模型必须重新提交完整的补丁。

生态背景

DeepSeek Harness 的理念是「一切皆插件」。社区目录(如 SkillHub)提供了插件的索引与分发,这些目录与 DeepSeek 或幻方无关,是独立的社区资源。在使用第三方插件时,建议在安装前检查源码与许可证。

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

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

小夜