dsh-apply-patch:爲 DSH 模型注入 Codex 風格的 apply_patch 工具

前言

GPT 系列模型在訓練時大量使用 OpenAI Codex 的 apply_patch 工具。當在 DSH 中使用這些模型時,模型會本能地嘗試調用該工具,但 DSH 默認不提供該工具,導致報錯。本插件通過 DSH 強大的插件系統補上這個工具,並且完全走 DSH 自帶的沙盒系統,絕不繞過沙盒直接修改文件。

核心功能

該插件爲 DSH 模型注入了 apply_patch 工具,具備以下特性:

  • 工具定義:與 OpenAI Codex 完全一致的補丁格式(*** Begin Patch / *** Update File: / *** Add File: / *** Delete File: / *** End of File / *** End Patch),並支持 gpt-4.1 風格 heredoc(<<'EOF' ... EOF)的寬鬆解析。
  • 沙盒寫入:所有文件寫入都通過 ctx.fs(DSH 沙盒文件系統)執行,刪除通過沙盒 bash 執行。沙盒拒絕時返回 [sandbox: ...] 錯誤,絕不繞過。
  • 按模型條件注入:設置裏的配置卡片只有一個下拉選擇:關閉、僅 GPT 模型(默認)、所有模型。
  • 設置卡片:設置 → 插件 → 插件配置 → Apply Patch,實時生效。

安裝

通過 dsh plugin 命令安裝到目標 profile(默認 web):

dsh plugin --profile web add @fonlan/dsh-apply-patch

也可以從 GitHub 安裝(支持默認分支或指定 tag):

# 默認分支
dsh plugin --profile web add github:fonlan/dsh-apply-patch

# 指定 release tag
dsh plugin --profile web add github:fonlan/dsh-apply-patch#v0.1.0

從本地源碼安裝(開發用途):

pnpm build
dsh plugin --profile web add .

注意:安裝後需要重啓 dsh web 進程才能生效。

典型用法

模型(尤其是 GPT 系列)會像在 Codex 中一樣直接調用 apply_patch。工具返回 codex 風格的摘要:

*** Begin Patch
*** Update File: hello.py
@@
-print("hello")
+print("hello, world")
*** Add File: new.py
+x = 1
*** Delete File: old.py
*** End Patch

執行後返回:

Success. Updated the following files:
M /path/to/hello.py
A /path/to/new.py
D /path/to/old.py

沙盒說明

所有變更都通過 DSH 內置沙盒執行,具體策略如下:

操作 沙盒路徑 說明
Add / Update / Move 寫入 ctx.fs.writeText 遵守會話 sandbox mode 與 workspace root
Delete / Move 刪除原文件 ctx.shell 遵守同一策略
  • read-only 模式下任何寫入都會被沙盒拒絕,返回 [sandbox: file access denied under read-only mode]。
  • workspace-write 模式下只允許寫入 workspace root(以及沙盒策略允許的 /tmp)。
  • 觀察策略要求先讀後寫,工具內部自動完成 stat/read/observe/write 流程。

配置

在 DSH 界面中進入設置 → 插件 → 插件配置 → Apply Patch,即可配置注入策略:
* 關閉:完全不注入 apply_patch。
* 僅 GPT 模型(默認):只對模型 id 以 gpt- 開頭的模型注入。
* 所有模型:對所有模型注入。

配置更改通過設置卡片實時生效,無需重啓進程。

總結

dsh-apply-patch 插件解決了 GPT 系列模型在 DSH 環境下因工具缺失導致的報錯問題。它不僅提供了與 Codex 一致的補丁格式,還通過 DSH 原生的沙盒機制保證了操作的安全性。適合需要在 DSH 中使用 GPT 模型進行文件操作的智能體開發者。

插件源碼及文檔:https://github.com/fonlan/dsh-apply-patch

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

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

小夜