前言¶
DeepSeek Harness (DSH) 的會話在創建時 cwd(當前工作目錄)會被凍結,它是會話身份的一部分,決定了會話存儲位置、沙箱根目錄以及 AGENTS.md 和 skills 的發現根。當工作重心長期移出原目錄時,文件工具需要寫完整絕對路徑,且項目指令和技能發現可能還停留在舊位置。dsh-cd 插件爲此提供了兩種操作粒度。
是什麼¶
dsh-cd 是一個爲 DeepSeek Harness (DSH) 提供的插件,由 johnnren 維護。它爲模型增加了一個 cd 工具,併爲用戶增加了 /cd 命令。核心價值在於解決“只換基準”和“真切搬遷”兩種場景。
安裝¶
安裝插件無需額外配置,安裝命令如下:
dsh plugin --profile web add dsh-cd
安裝後,插件自帶的 cordis.patch.yml 會自動掛載,模型即可使用 cd 工具,輸入框可用 /cd 命令。
核心功能¶
插件提供兩種粒度的切換模式:
- 工作基準覆蓋(輕量)
- 入口:
cd {"path": "..."} - 效果:只改變“相對路徑解析基準”。文件工具(read/write/edit/glob/grep 等)和 bash 工具的默認 workdir 會跟隨新目錄,但會話身份不變(存儲位置、沙箱根等不變)。這是一種可逆的快速切換。
- 入口:
- 真切工作區搬遷(重量)
- 入口:
cd {"path": "...", "workspace": true, "confirmed": true} - 效果:真正改變會話身份。會話的存儲位置、沙箱根、AGENTS.md、skills 發現、側邊欄分組全部跟隨新目錄。這需要會話處於空閒狀態,且用戶明確同意(
confirmed: true)。
- 入口:
典型用法¶
模型調用¶
模型可以使用以下方式調用 cd 工具:
cd {"path": "/tmp/some-dir"}
請求真切搬遷時,需帶上 workspace: true 和 confirmed: true:
cd {"path": "/path/to/other-project", "workspace": true, "confirmed": true}
其他用法:
* 回到上一個目錄:cd {"path": "-"}
* 查看當前目錄與排隊狀態:cd {}
用戶命令¶
用戶在輸入框輸入以下命令(不消耗模型回合):
* /cd <directory>:真正搬遷會話到該目錄。
* /cd:查看當前目錄、所屬工作區、覆蓋狀態與排隊中的真切切換。
技術細節與注意事項¶
- 狀態持久化:覆蓋狀態會寫入
$DSH_HOME/dsh-cd/state.json,實例重啓後該會話的覆蓋設置會自動恢復。 - 子代理繼承:從當前會話派生的子代理會繼承父會話的覆蓋目錄。
- 真切搬遷限制:
- 必須由用戶明確同意(
confirmed: true),模型不得自行補全。 - 會話必須在回合空閒時執行,否則本輪仍按工作基準工作,回合結束後才完成搬遷。
- 搬遷會重寫會話日誌,任何一步失敗都會回滾。
- 必須由用戶明確同意(
- 環境要求:
- 需 Node.js >= 22.5。
- 依賴宿主的
@deepseek-ai/dsh-tools和@deepseek-ai/dsh-home-paths。
- 側邊欄同步:真切搬遷後,會話本身立即可用,但側邊欄分組通常需要刷新頁面(F5)才能更新。
總結¶
dsh-cd 通過插件化的方式解決了 DSH 會話工作目錄凍結的問題,既提供了輕量的路徑基準覆蓋,也提供了重量的工作區搬遷能力。適合需要在同一會話內頻繁切換上下文,或需要將工作重心永久轉移至其他項目的場景。
- 插件目錄: https://www.skillhub.cn/plugins/john-walks-slow/dsh-cd
- GitHub 倉庫: https://github.com/john-walks-slow/dsh-cd