前言¶
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 模型進行文件操作的智能體開發者。