dsh-git-statusline:在 DSH Web 側邊欄查看緊湊 Git 狀態

前言

用 DSH 做智能體開發時,當前會話往往綁定一個工作目錄。分支名、暫存/未暫存改動、與 upstream 的領先/落後,這些信息分散在終端或 IDE 裏,切回 Web 界面時不一定一眼能看到。下面介紹社區插件 dsh-git-statusline(維護者 pinzza,分類:客戶端):在 DSH Web 裏用一行緊湊文本展示 Git 工作區與 upstream 狀態,顯示位置可在設置裏切換。設計參考了 ccstatusline-zh 的 Git widgets,適合希望在瀏覽器裏常駐 Git 摘要的 DSH 0.2.x 用戶。

這是什麼

dsh-git-statusline 是面向 DSH Web 的純 JavaScript 客戶端插件,通過 DSH 插槽把 Git 狀態渲染到側邊欄底部、會話標題旁或對話框上下方。非 Git 倉庫的會話會按設計隱藏;無 upstream 時不會給出錯誤的「已推送」結論,懸停提示會說明無法判斷。

  • 目錄頁:https://www.skillhub.cn/plugins/pinzza/dsh-git-statusline
  • 源碼與文檔:https://github.com/pinzza/dsh-git-statusline
  • 當前資料中的版本:0.2.1(MIT 許可證)

顯示內容與格式

典型一行形如:

main (+16,-2) ↑2 ↓1

含義(與 README 一致):

  • (+16,-2):已暫存與未暫存文本改動的新增/刪除行數。
  • ↑2:當前分支相對 upstream 待推送的提交數。
  • ↓1:當前分支相對 upstream 待拉取的提交數。
  • ✓:工作區乾淨,且相對 upstream 沒有領先或落後。

插件每 5 秒輪詢一次,窗口重新獲得焦點時立即刷新;同一時刻最多一個進行中的請求(客戶端併發去重)。Git 命令均爲只讀,並設置 GIT_OPTIONAL_LOCKS=0。服務端先用 .git/HEAD 與 .git/index 的 mtime 預檢,工作區未變則命中緩存、不拉起 git 進程;在 Windows 掛載路徑(如 WSL 的 /mnt/*)上另有超時與結果緩存策略,詳見倉庫 README。

顯示位置

在 DSH 中打開:設置 → Git 狀態欄 → 顯示位置。選項保存在瀏覽器 localStorage(鍵 dsh-git-statusline:config),改完立即生效,無需重啓 DSH。

位置 說明
側邊欄底部(默認) 側邊欄一行;收起成 56px 軌道時退化爲 ↑ / ↓ / ± / ✓ 單字符
會話頂部標題後方 標題欄內的小 chip
對話框上方 輸入框上方的 chip,獨佔一行
對話框下方 輸入框下方狀態行內的純文本(與用量統計等同處一行,帶寬緊,故爲無邊框純文本)
不顯示 不註冊插槽,也不發請求

若在意對話框下方那一行的排版,README 建議優先選「會話頂部標題後方」。

與 DSH 版本的兼容性

要求 DSH >=0.2.0-rc.1 <0.3.0(插件 0.2.1 起)。DSH 啓動時會校驗插件 package.json 裏 @deepseek-ai/dsh* peer 是否覆蓋當前運行時;不覆蓋會打印 skipping profile bundle 並靜默跳過整個插件,界面上無報錯。

DSH 版本線 可用插件版本
>=0.2.0-rc.1 <0.3.0 0.2.1 起
0.1.x 0.2.0(在 0.2.x 上會被跳過)

安裝與啓用

插件預構建代碼在倉庫 lib/ 中,不需要構建步驟。以下命令在 README 中標註爲在 DSH 0.2.0-rc.1 + pnpm 11.21.0 上實測通過。

從 GitHub 直接安裝(推薦):

dsh plugin --profile web add github:pinzza/dsh-git-statusline

從 Release 預構建 tarball 安裝(與上一方式等價,可離線):

curl -L -o dsh-git-statusline.tgz \
  https://github.com/pinzza/dsh-git-statusline/releases/latest/download/dsh-git-statusline.tgz
dsh plugin --profile web add ./dsh-git-statusline.tgz

固定版本可將 URL 改爲釘住 tag 的形式,例如 .../releases/download/v0.2.1/dsh-git-statusline.tgz。

安裝後重啓 dsh web;若 Web 由其他進程管理,重啓該進程並刷新 http://127.0.0.1:3080。

驗證插件層是否加載:

dsh --profile web --dump-config | grep -A2 dsh-git-statusline

應能看到 # == dsh-git-statusline。若同時出現 dsh: skipping profile bundle "dsh-git-statusline",說明 peer 與當前 DSH 不匹配,需按兼容性表升級插件或調整 DSH 版本。

卸載:

dsh plugin --profile web remove dsh-git-statusline

不顯示時的排查

README 給出的順序:

  1. 插件層是否被跳過:執行上面的 dump-config | grep,看不到 # == dsh-git-statusline 或出現 skipping profile bundle → peer 不兼容(升級 DSH 後常見)。
  2. 當前會話工作目錄不是 git 倉庫(isRepo=false,插件隱藏)。
  3. 顯示位置選了「不顯示」。

若瀏覽器 Network 裏沒有 POST /git-statusline/status,多爲 ① 或 ③;有請求卻無渲染則多爲 ②。

適用場景與注意

  • 適合:在 DSH 0.2.x Web 端開發、希望少切終端即可看到分支與 upstream 摘要的用戶。
  • 權限與安全:插件隨當前 dsh 進程運行,會通過服務端執行只讀 Git 查詢;安裝前請自行查看源碼與 MIT 許可證,確認符合你的環境策略。DSH 社區目錄(如 SkillHub)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係。
  • 0.1.x DSH:應使用插件 v0.2.0 或更早 tag,勿在 0.2.x 上誤用舊 peer 包。

倉庫內可用 node --test 跑 8 個測試(4 個 Git 解析 + 4 個兼容性迴歸)。

結尾

dsh-git-statusline 把 Git 分支、行級改動摘要和 upstream 領先/落後壓成 Web 裏可配置位置的一行狀態,並針對輪詢與慢速文件系統做了緩存與預檢。需要安裝命令與性能細節時以 GitHub README 爲準。

  • 插件目錄:https://www.skillhub.cn/plugins/pinzza/dsh-git-statusline
  • 倉庫:https://github.com/pinzza/dsh-git-statusline
羽毛球分组比赛记分
小程序二维码

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

小夜