前言¶
DeepSeek Harness(DSH)採用插件化架構,通過擴展點擴展能力。在智能體開發流程中,直接在 DSH 內完成 Git 操作是常見需求。此前有插件試圖通過直接修改宿主佈局(如 grid-template-columns)來實現類似 VS Code 的面板,但在 DSH 0.1.6-alpha.2 中,由於外殼對網格的持續重寫,這些做法會導致插件列寬失效或隱藏。
dsh-source-control 避免了與宿主佈局的衝突。它僅使用官方擴展點 ctx.sidebarRightTabs 和 ctx.slots.register,將一個 VS Code 風格的源代碼管理面板掛載到 DSH 原生右側欄的標籤系統中。
核心能力¶
該插件在 DSH 右側欄提供完整的 Git 交互能力:
- 改動與提交:展示已暫存/更改/未跟蹤/衝突四組狀態,支持批量操作、單文件 diff 展開和二次確認的提交。
- 分支管理:列出本地與遠程跟蹤分支,支持按關鍵字搜索(匹配名稱或提交信息)、切換、合併、刪除及新建。
- 遠程同步:提供抓取、拉取(默認
--ff-only)、推送及“拉取(合併)”操作。新建分支時若無上游,按鈕會自動變爲“發佈分支”。 - Git Worktree:支持列出、新建、刪除及清理失效記錄。新建的 worktree 會自動註冊爲 DSH 工作區,可在“新建會話”中直接選中。
- 歷史記錄:展示最近提交的 Hash、標題、作者與日期。
安裝¶
通過官方 CLI 安裝插件:
dsh plugin --profile web add github:jackchen13755/dsh-source-control
安裝完成後,在 DSH 會話中點擊右側欄的“+”號,選擇“源代碼管理”即可加載。
配置¶
插件通過 cordis.patch.yml 注入配置,默認值如下:
- insert:
- id: source-control
name: 'dsh-source-control'
config:
recentCommits: 20 # 歷史記錄條數
pollMs: 5000 # 面板自動刷新間隔,0 爲關閉
defaultRemote: origin # 同步操作的默認遠程源,空則使用分支 upstream
worktreeHome: '' # Worktree 託管目錄,空則使用 $DSH_HOME/source-control/worktrees
使用說明¶
- 分支切換:支持從遠程分支直接檢出(建立跟蹤並切換),新建分支時可指定基點或遠程分支。
- Worktree 註冊:新建 worktree 後,插件會將其註冊到 DSH 工作區列表中,實現任務隔離。
- 安全確認:執行破壞性操作(如 push、刪除分支、刪除 worktree)時,瀏覽器會彈出
window.confirm確認框。
安全模型¶
插件通過以下機制確保操作安全:
- 網絡邊界:只監聽本機請求,非 loopback 請求一律返回 403。
- 路徑圍欄:調用方僅提供
sessionId,宿主解析出工作目錄後,所有倉庫路徑必須落在該目錄、已註冊工作區或工作樹託管目錄之內。 - 無 Shell 拼接:所有 git 調用通過
execFile傳遞參數,不拼接 shell 字符串,防止命令注入。 - 請求限制:僅接收 JSON POST 請求,限制 512KB 請求體。
已知限制¶
- 衝突處理:衝突清單僅列出衝突文件,不提供三方合併編輯器,需手動編輯文件後暫存。
- 功能取捨:不提供 rebase、cherry-pick、stash、tag、submodule 等操作,也不支持強制推送。
- Pull 策略:默認使用
--ff-only,分叉時需明確選擇“拉取(合併)”。 - 兼容性:依賴 DSH 版本
>= 0.1.5-rc.1。
結語¶
dsh-source-control 通過官方擴展點,爲 DSH 原生環境補齊了源代碼管理能力。它不干擾外殼佈局,專注於 Git 流程(暫存、提交、分支、worktree),並提供了嚴格的安全圍欄,適合需要在 DSH 內直接進行代碼協作的開發者。