前言¶
在 DeepSeek Harness (DSH) 的 Web 客戶端開發工作流中,頻繁在聊天界面內管理 Git 分支是一個常見痛點。開發者通常需要離開對話界面,去終端執行 git checkout 或 git stash,這會打斷心流。dsh-git-status 插件直接在 DSH Web 的 Composer 工具行中集成了實時狀態顯示與切換能力,讓分支管理迴歸對話上下文。
插件介紹¶
這是一個面向 DSH Web 客戶端的插件,由 weiyuou-chowbus 維護。其核心價值在於將 Git 的狀態感知與分支切換操作本地化、安全化,使其成爲開發者與代碼倉庫交互的一個輕量級入口。
核心功能¶
- 實時分支指示器:在 Composer 工具欄右側顯示當前分支的芯片,每 3 秒輪詢一次狀態。芯片上會附帶一個圓點來指示工作區是否乾淨(有未提交更改時顯示髒狀態)。
- 工作區感知:插件跟隨當前會話的工作目錄(
cwd)。當你切換 DSH 會話的工作區時,指示器會自動更新爲對應目錄的當前分支。 - 分支切換:點擊指示器可打開一個過濾列表,列出所有本地分支(按最新提交者排序,並附帶上游追蹤信息)。點擊目標分支後,系統會彈出確認對話框。
- 髒狀態安全:這是該插件的一個重要安全特性。如果工作區有未提交的更改,默認情況下會阻止 checkout 操作。插件提供顯式的“Stash & switch”操作,在切換前自動執行
git stash push --include-untracked,並在切換失敗時恢復 stash,防止代碼丟失。 - 安全設計:插件採用“無 Shell”的調用方式,所有 Git 命令通過
child_process.execFile執行。所有路徑在請求時經過realpath解析,僅接受註冊的工作區路徑或配置的repoPath。分支名僅限本地分支枚舉結果,輸入不經過 shell 轉義。
安裝與啓用¶
安裝此插件需要系統中已配置 DSH Web 配置文件,且 pnpm 已在系統 PATH 中。
dsh plugin --profile web add dsh-git-status
安裝完成後,需要重啓 Web 服務以加載新插件:
npm exec @deepseek-ai/dsh web
配置與用法¶
默認情況下,插件會使用 DSH 進程的當前工作目錄作爲倉庫路徑。如果你希望爲沒有工作區的會話指定一個默認倉庫,可以通過配置文件覆蓋。
編輯 ~/.dsh/profiles/web/cordis.patch.yml,添加或修改以下配置:
- id: git-status
config:
repoPath: /absolute/path/to/your/default/repo
插件通過 HTTP 路由提供接口:
* GET /git-status?cwd=<workspace path>:獲取當前分支、髒狀態及本地分支列表。
* POST /git-checkout:切換分支,僅在 POST 請求下有效,且需要確認。
注意事項¶
- 依賴要求:必須依賴 DSH Web 配置文件以及 PATH 中的
pnpm。 - 路徑要求:配置項
repoPath必須是絕對路徑。 - 交互確認:所有切換操作(checkout)都需要用戶確認,屬於 POST-only 操作。
- 髒狀態處理:髒狀態默認被阻止。只有顯式啓用
stash: true或使用 UI 中的“Stash & switch”按鈕才能在髒狀態下切換分支。 - 安全原則:該插件不使用 Shell 執行命令,所有輸入均經過白名單校驗,適合對安全性要求較高的開發環境。
結語¶
dsh-git-status 通過在 DSH Web 界面中嵌入輕量級的 Git 操作,解決了開發者在對話流中管理代碼狀態的痛點。它既提供了直觀的視覺反饋,又通過嚴格的白名單和髒狀態保護機制,確保了操作的安全性。你可以通過 GitHub 倉庫 查看源碼或提交反饋。