dsh-plugin-git-status:在 DSH 會話裏直接看 Git 狀態並切換分支

前言

在 DeepSeek Harness(DSH)裏用 Agent 寫代碼時,工作目錄往往就是某個 Git 倉庫。模型和工具會改文件、切分支,但界面本身不一定告訴你「現在在哪個分支、有沒有未提交改動、和遠程差多少」。若每次都要切到終端跑 git status,會話上下文容易被打斷。

社區插件 dsh-plugin-git-status(維護者 zmy15,分類爲客戶端)在 DSH 界面里加一條剋制的 Git 狀態提示:讀當前會話綁定的工作目錄,展示分支、最近提交、改動統計與同步狀態,並支持在本地分支間切換,同時對未提交改動和衝突做保護。下面介紹它做什麼、怎麼裝、怎麼用,以及使用時要注意的限制。

這是什麼

dsh-plugin-git-status 給 DSH 增加一條可直接操作的 Git 狀態條:新會話時顯示在工作區名稱與 Agent 模式同一行的最右側;對話開始後顯示在會話標題欄右側工具區。點擊分支名可切換分支,點擊狀態區域可查看改動、與上游的領先/落後情況以及最近提交。

宿主側只根據瀏覽器提交的 session id 解析 ctx.sessions.get(sessionId).header.cwd,再在該目錄執行 Git 命令;瀏覽器不能指定路徑,避免被篡改後讀寫任意目錄。插件以當前 DSH 進程權限運行,安裝前建議自行查看 GitHub 倉庫 源碼與 MIT 許可證。社區目錄頁見 SkillHub(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。

核心功能

狀態條針對當前會話工作目錄展示(資料中已覈實的能力如下):

  • 當前分支:普通分支、未出生分支、游離 HEAD(顯示爲 HEAD @ 1a2b3c4)均有明確展示。
  • 最近提交:短哈希、提交標題、作者與相對時間。
  • 未提交改動:統計已暫存、未暫存、未跟蹤與衝突文件;展開後列出改動路徑(最多 8 行,其餘摺疊爲「還有 N 個」)。工作區乾淨時只顯示綠色對勾。
  • 同步狀態:上游分支及 ahead / behind 提交數。
  • 本地分支:菜單中列出本地分支,可搜索、切換,或在底部輸入名稱創建並檢出;當前分支的最近提交信息也會出現在菜單裏。
  • 改動保護:有未提交改動時先展示文件並要求確認,不會靜默丟棄;若目標分支會覆蓋本地文件,Git 拒絕切換,原分支保持不變。
  • 自動刷新:頁面可見時每 10 秒刷新;窗口重新聚焦或標籤頁恢復可見時立即刷新。宿主側還有約 1.5 秒緩存與併發合併。
  • 非 Git 目錄 / Git 不可用:靜默隱藏;打開彈層若刷新失敗,在彈層內展示原因。

插件不提供暫存、提交、拉取、推送等寫操作;只對 live session 生效。

安裝與啓用

環境要求(來自 README):

  • Node.js >=22.19.0
  • DSH >=0.2.1-rc.1
  • 系統 PATH 中可用的 Git

package.json 中版本爲 1.2.2;安裝方式以 README 原文爲準,不要憑插件名拼接 dsh plugin add github:owner/repo。

Web profile

先將倉庫克隆到本地,再把當前 profile 鏈接到克隆目錄:

git clone https://github.com/zmy15/dsh-plugin-git-status.git
dsh plugin --profile web add link:<本倉庫絕對路徑>

然後把 dsh-plugin-git-status 加入該 profile 的 package.json 裏 dsh.profile.bundles,重啓 DSH。

桌面端(Electron)

桌面 profile 由 Electron 獨佔,dsh plugin 會拒絕直接修改。可以:

  1. 用 DSH 的 Plugin Manager 安裝;或
  2. 手工建符號鏈接並把包名加入 profile:
<profile>/node_modules/dsh-plugin-git-status -> <本倉庫絕對路徑>
"dsh": { "profile": { "bundles": [ ..., "dsh-plugin-git-status" ] } }

桌面端宿主半邊在啓動期加載 bundle,裝完後必須重啓 DSH;只刷新頁面不夠。

典型用法

安裝並重啓後,在已綁定 Git 倉庫工作目錄的會話中,狀態條會自動出現。

  1. 看狀態:點擊右側改動數、乾淨對勾或 ahead/behind 數字,打開狀態面板,查看文件列表與最近提交詳情。
  2. 換分支:點擊分支名,在本地分支菜單中搜索並選擇目標分支;若需新分支,在底部輸入名稱後回車創建並檢出。
  3. 有髒工作區時:切換分支前會先列出改動並要求確認;確認後由 Git 判斷是否可安全攜帶改動,不能則保持原分支並提示衝突說明。
  4. 關閉面板:點擊外部或按 Esc 關閉分支菜單與狀態面板。

界面顏色、圓角等走 --dsw-* 主題 token,適配亮/暗色皮膚。

適用場景與注意

適合:在 DSH 里長時間做倉庫內 Agent 開發、需要頻繁確認分支與工作區是否乾淨、又不想爲看一眼狀態離開會話界面的開發者。

注意:

  • 插件以 DSH 宿主進程權限執行 git;大倉庫下 git status 可能較慢,8 秒超時後彈層顯示錯誤,狀態 chip 保留上一次成功結果。
  • 每 10 秒輪詢是刻意設計,未引入 SSE,以減少桌面 IPC 與遠程 web 兩種傳輸上的生命週期複雜度。
  • 分支切換分兩步確認;插件不會自動暫存、丟棄或覆蓋改動。

結尾

dsh-plugin-git-status 把「當前分支、改動、同步、最近提交」收進會話標題欄一側,並在切換分支時守住工作區安全,適合作爲 DSH 客戶端側的 Git 只讀與本地切換補充。

  • 目錄頁:https://www.skillhub.cn/plugins/zmy15/dsh-plugin-git-status
  • 源碼與完整說明:https://github.com/zmy15/dsh-plugin-git-status
羽毛球分组比赛记分
小程序二维码

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

小夜