前言¶
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 或幻方无关,是独立的社区资源。在使用第三方插件时,建议在安装前检查源码与许可证。