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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye