dsh-git-worktree:讓 Agent 在獨立 Git Worktree 中先預覽、再確認保存

前言

在 DSH 中跑編碼任務時,一個常見問題是 Agent 直接修改 Local checkout:任務增量容易和已有 staged、unstaged、untracked 內容混在一起;多個任務也可能爭用同一個 checkout。

dsh-git-worktree 針對這個點,把“施工”和“交付”拆開:Agent 在隔離 Worktree 中修改和測試,用戶先查看可撤回的 Local Preview,確認後再由 Host 保存本輪任務增量。

這是什麼

wloops/dsh-git-worktree 是 DeepSeek Harness 的實驗性 Session Target 插件,由 wloops 維護,使用 MIT 許可證。

它的一句話定位是:讓 Agent 在真實 Git Worktree 中執行任務,先預覽修改,再由用戶明確確認是否保存。

它是獨立維護的社區插件,不是 DeepSeek 官方項目,也不代表官方背書、合作或授權。當前定位是項目級 Worktree Session 交付插件,不是跨項目全局 Worktree Manager。

核心功能

  • 每個任務擁有獨立 Git Worktree、Workspace 和唯一 owner Session。
  • Agent 只在隔離 Worktree 中修改和測試。
  • 用戶先查看可撤回的 Local Preview。
  • Host 只保存本輪任務增量,不吞入無關 Local 修改。
  • 無法證明安全時停止寫入並保留恢復證據。
  • Managed owner 以 Branch Icon 和狀態 Badge 直接歸入原 Local 項目;普通 Local Session 保持官方行爲。
  • Ready 後由用戶選擇“預覽修改”“確認並保存”或其他操作。
  • 預覽寫入 Local 但不立即創建 Commit,可安全撤回。
  • 最終只爲本輪累計增量創建一個 Commit。
  • Checkpoint 只存在於 managed Worktree,最終仍合併爲一次交付。
  • 處理 Local 漂移、衝突、preview_detached、重啓和 cleanup 中斷。
  • 多個 Worktree 可並行工作,同一 Local 項目一次只接受一個 Preview。
  • 交付並 cleanup 後,可在原 Session 和對話中開始下一輪。

安裝與啓用

環境要求

  • Node.js ^22.19.0 || >=24.0.0
  • DeepSeek Harness 0.1.1-rc.2 包線
  • Harness Web Client
  • Git Workspace

安裝

下面命令用於在 web profile 下安裝插件:

dsh plugin --profile web add dsh-git-worktree

如果需要使用指定版本:

dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.7.1

啓用

安裝後打開 Git Workspace,在新建 Session 時啓用 Worktree

已有 Local Session 也可以讓模型調用 worktree_create 創建隔離 Session。

第一次使用建議先完成一次完整流程:

創建 → 預覽修改 → 確認並保存 → cleanup

典型用法

驗收時怎麼選

根據目標選擇操作:

目標 操作
先在 Local 查看效果 預覽修改
Preview 沒問題 確認並保存
任務很長,先固定進度 保存階段並繼續
還要讓 Agent 改代碼 繼續修改或撤回本次預覽
不需要 Preview 跳過預覽並保存

幾個關鍵行爲如下:

  • “預覽修改”會寫入 Local,但不立即創建 Commit,可安全撤回。
  • “確認並保存”最終只爲本輪累計增量創建一個 Commit。
  • “保存階段並繼續”會在 managed Worktree 中保存 Checkpoint,最終仍合併爲一次交付。

本地開發

如果你要參與該插件開發,按下面命令安裝依賴並跑檢查:

pnpm install
pnpm run typecheck
pnpm test
pnpm run build
pnpm run check:publish

端到端啓動:

pnpm run dev:dsh

安全邊界與當前限制

  • 所有 Local 寫入都由 Host 在執行前重新檢查,瀏覽器緩存和模型輸出不構成寫入授權。
  • 插件會驗證 Session、checkout、revision、Git 身份、Preview receipt 和 Local 狀態;遇到分支切換、重疊衝突、未知殘餘或恢復證據不足時會 fail closed。
  • owner 缺失、額外 Session 或歸屬衝突時保留原 Workspace,避免靜默隱藏數據。
  • Worktree-aware Fork 尚未實現,本版不顯示普通 Fork 入口。
  • 子 Agent 繼承父 Session cwd,插件不額外創建 per-child Worktree。
  • Checkpoint 不提供歷史編輯、刪除、重排或任意回退。
  • Domi 的全局 Manager、Local Maintenance、依賴快照和完整 collaborator 生命週期不在本插件範圍內。

適用場景與注意

適合這類使用場景:

  • 想讓 Agent 先改、先測,不直接污染 Local checkout。
  • 想在 Local 中看到可撤回預覽後再決定是否保存。
  • 需要把本輪任務增量保存成一次交付,而不是混入其他本地修改。
  • 希望多個 Worktree 可以並行工作,但同一 Local 項目一次只接受一個 Preview。

使用前注意:

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • 它是獨立社區插件,不是 DeepSeek 官方項目,也不代表官方背書、合作或授權。
  • 社區目錄頁提供插件信息,但不等同於官方應用商店。

結尾

dsh-git-worktree 的核心價值,是把 Agent 的本地修改從“直接落盤”變成“隔離施工、人工預覽、確認交付”。如果你希望在 DSH 中控制 Agent 修改 Local 的邊界,它提供了一個可用的工作流方案。

目錄頁:

https://www.skillhub.cn/plugins/wloops/dsh-git-worktree

GitHub:

https://github.com/wloops/dsh-git-worktree

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜