DeepSeek Harness (DSH) 的核心邏輯是“一個會話一個工作區”,即對應文件系統中的一個根目錄。在實際開發中,一個完整的項目往往拆分在多個目錄中(例如前後端分離、文檔獨立存放)。當 Agent 需要操作這些目錄時,手動輸入絕對路徑既繁瑣又容易出錯(特別是在目錄名高度相似時)。
dsh-workspace-plus 插件通過爲工作區內的目錄建立“標籤 → 絕對路徑”的映射,解決了這一問題。它爲每個工作區提供了一套目錄管理入口,並將映射表注入 Agent 的上下文中,使 Agent 能精準定位文件,無需在對話中重複粘貼路徑。
核心功能¶
該插件提供三個主要交互入口:
- 工作區行上的目錄按鈕:在 DSH 側邊欄的工作區列表行中,會插入一個“目錄”按鈕。點擊該按鈕會彈出一個配置窗口,用於爲當前工作區登記多個目錄及其標籤。
- 對話輸入框裏的
@觸發器:在對話輸入框中輸入@,會彈出候選列表,列出當前已啓用工作區的所有標籤。選中標籤後,會插入一個引用芯片,提交給模型的是該標籤對應的絕對路徑。 - 設置頁面的開關:在 DSH 設置的
workspace+區域,可以爲每個工作區單獨開啓或關閉該插件功能。默認情況下,除默認工作區外,其他工作區默認開啓;默認工作區默認關閉。
使用方法¶
1. 啓用功能¶
進入 DSH 設置頁面,找到 workspace+ 區域。爲需要使用該功能的工作區打開對應的開關。開啓後,工作區行上會出現目錄按鈕,該工作區的對話請求會自動注入目錄映射表。
2. 管理目錄¶
點擊工作區行上的“目錄”按鈕,在彈窗中添加目錄。
* 添加方式:點擊“選擇目錄”按鈕打開系統原生對話框,選擇路徑後自動生成標籤。
* 標籤命名:如果選中的目錄沒有輸入標籤,系統會嘗試根據目錄名自動生成(如 D:\proj\my api -> my-api),純中文目錄名不自動生成。
* 狀態文件:配置結果會持久化存儲在 $DSH_HOME/workspaceplus/directories.json。
3. 引用目錄¶
在對話輸入框中輸入 @,即可看到當前會話所在工作區(以及其他已啓用工作區)的標籤列表。
* 場景:輸入 @backend,模型接收到的將是 D:\proj\backend,而非僅僅是 backend。
* 兜底:如果上下文注入因某種原因被壓縮或丟失,模型仍能通過 @ 選中的絕對路徑繼續工作。
4. 工具調用¶
除了上下文注入,插件還提供了 workspace_dirs 工具,支持通過參數 action 進行列表、添加、移除等操作,用於在對話中動態調整目錄映射。
技術實現與配置¶
數據存儲¶
插件維護一份獨立的 JSON 狀態文件,位於 $DSH_HOME/workspaceplus/directories.json(若未設置 DSH_HOME,則位於 ~/.dsh/workspaceplus/)。文件結構如下:
{
"version": 1,
"settings": {
"defaultWorkspaceEnabled": false,
"workspaceEnabled": {
"d:\\projects\\api": true
}
},
"workspaces": {
"d:\\proj": {
"path": "D:\\proj",
"dirs": [
{
"label": "backend",
"path": "D:\\proj\\backend",
"note": "後端 API"
}
]
}
}
}
workspaceEnabled:控制每個工作區是否啓用插件功能。workspaces:存儲具體的目錄映射關係。
上下文注入¶
插件在宿主端註冊了一個 runtime-context 貢獻,優先級(order)爲 130。每次請求該工作區會話時,系統會將目錄映射表注入到 Agent 的上下文中,明確告知 Agent 路徑規則(如“標籤不區分大小寫”、“只在標籤目錄內工作”)。
HTTP 路由¶
插件提供了 POST/GET /workspaceplus/api 路由,用於與頁面交互,遵循殼層的鑑權機制。
沙箱限制與注意¶
根據 DSH 的沙箱策略,每個會話只有一個可寫根目錄。這意味着插件雖然可以管理多個目錄,但 Agent 的實際文件寫入操作仍需落在當前會話的工作區根目錄下,或者通過工具調用進行特定的文件系統操作。
此外,插件以 MIT 許可證開源,源碼位於 GitHub。在安裝前,建議查閱源碼以確認其運行機制符合你的安全要求。