dsh-patch-edit-plus:DeepSeek Harness 的统一补丁编辑工具

前言

DeepSeek Harness (DSH) 采用插件化架构。在文件编辑场景中,针对单行修改,原生 edit 工具更为高效;但在需要处理大文件、跨文件批量变更或新增/删除文件时,逐行编辑不仅效率低下,还难以保证操作的原子性。dsh-patch-edit-plus 插件通过封装统一的 apply_patch 工具,为模型提供了处理 Git unified diff 和 Codex apply_patch 语法的能力,确保所有变更“全有或全无”地执行。

插件介绍

该插件为 DSH 提供了一个单一的模型接口——apply_patch 工具。

  • 核心能力:支持 git/unified diff(默认启用)和 Codex apply_patch 语法(可选)。
  • 执行模式:采用原子性应用,任何步骤失败都会导致整个补丁回滚,零字节写入。
  • 兼容性:支持 DSH 0.2.0-rc.1 及以上版本。
  • 设计原则:插件注册后完全由 DSH 调度,自身不干预核心流程,卸载时自动清理资源。

安装与配置

使用官方安装命令添加插件,随后验证配置并重启 DSH。

dsh plugin --profile web add <path-to-dsh-patch-edit-plus>
dsh web --dump-config   # 验证插件行是否出现
# 重启 DSH

在 DSH 设置面板中,可以调整以下关键配置项:

配置项 默认值 说明
allowCodexPatch false 是否接受 Codex apply_patch 语法
conflictPolicy rename 工具名冲突时的处理策略 (rename / skip / fail)
deleteBackend shell 删除/移动操作的后端实现 (shell / none)
shellDialect auto Shell 脚本方言 (auto / posix / pwsh)
maxFiles 50 单个补丁允许的最大文件数
maxPatchBytes 524288 补丁文本的最大字节数

典型用法

模型根据场景选择使用 Unified Diff 或 Codex 语法。

1. Unified Diff 语法(默认)

适用于标准的 Git 补丁格式。

--- a/src/app.ts
+++ b/src/app.ts
@@ -10,4 +10,4 @@ export function main() {
  init()
- start(oldPort)
+ start(newPort)
  await shutdown()
}

2. Codex apply_patch 语法(可选)

通过设置 allowCodexPatch: true 启用。此语法允许在一个补丁块中混合执行多种操作。

*** Begin Patch
*** Update File: src/app.ts
@@
  init()
- start(oldPort)
+ start(newPort)
*** Add File: docs/notes.md
*** Delete File: tmp/junk.txt
*** End Patch

适用场景与注意

适用场景

  • 大文件内的微小修改:无需回显整个文件内容。
  • 跨多个文件的批量变更:一次调用完成多个文件的修改。
  • 新增文件 / 删除 / 重命名:这些操作由 apply_patch 统一处理。

关键限制

  • 沙箱依赖:删除和移动操作通过 ctx.shell 执行,沙箱强度取决于加载的 shell 执行器(例如 bash-sandbox fences;bash-local 不受此限制)。
  • 权限策略:每次写入和删除操作都会检查会话级策略 (ctx.sandboxPolicy.resolve({ session })),确保在 workspace-write 模式下的安全性。
  • 目录创建:添加文件时不会自动创建父目录,需确保目录已存在。
  • 精确匹配:不支持模糊匹配或偏移量匹配,hunk 位置必须精确。
  • 二进制文件:拒绝二进制补丁。
  • 换行符保真:CRLF 文件会被写回为 CRLF。

结语

dsh-patch-edit-plus 插件通过统一的 apply_patch 接口,解决了 DSH 中批量文件编辑的原子性问题,同时保持了与原生工具的兼容性。通过合理的配置,可以平衡安全性与开发效率。

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

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

小夜