dsh-git-bar:在输入框上方显示 Git 仓库、分支与改动

前言

在 DeepSeek Harness(DSH)里写代码或驱动智能体时,会话往往绑定一个工作目录。分支叫什么、工作区有没有未提交改动、相对远端领先或落后多少,这些信息通常要切到终端跑 git status,或靠 IDE 侧边栏。输入框(composer)上方本来就有工作区、模式等选择器,若能在同一行看到当前 Session 的 Git 上下文,并在需要时切分支、看 diff,可以减少上下文切换。

下面介绍社区插件 dsh-git-bar(维护者 mjnhmd),它在 composer 上方增加一行 ambient 状态栏,只读展示仓库信息;少数交互会调用本机 git 可执行文件。插件归类为客户端,在 SkillHub 目录 可查到条目;源码与说明见 GitHub 仓库。

这是什么

dsh-git-bar 是一个 DSH bundle:Host 半部在启动时加载,通过只读 JSON 路由调用 git;Client 半部在页面加载时注入,在 conversation.input.dock 插入一行 git-bar。该行展示当前 Session 所在目录的 Git 状态,并支持分支切换、工作区改动侧栏、worktree 列表等操作。

官方简介:在 composer 上方显示 repo、branch、changes 与 SHA,支持切分支和 diff 面板。

状态栏展示什么

状态栏示例(README 原文):

⎇ main · dsh-git-bar · 3 处改动 · ↑2 ↓1 · a1b2c3d

各行标签均为纯文本,可选中复制。内容包括:

  • 仓库名称与根目录相关信息
  • 当前分支;若 HEAD 不在分支上,显示 游离 HEAD / detached HEAD
  • 工作区改动总数(tooltip 中区分 staged / unstaged / untracked)
  • 相对上游分支的 ahead / behind 计数
  • 短 commit id:可点击,在 origin 对应托管平台上打开提交页(GitHub、GitLab、Bitbucket 的路由均有处理);若目录是 linked git worktree 会显示 链接工作树 / linked worktree,若仓库有多个 worktree 会显示 N 个工作树

刷新策略:每 8 秒、窗口获得焦点时、以及 Session 变化时刷新。仅阅读状态栏不会触碰仓库;下列交互会 deliberate 调用 git。

核心交互

点击分支名

弹出可搜索的分支列表:列出每个本地分支及其 upstream、ahead/behind、dirty 状态,并标记当前分支。可 checkout 已有分支,或从当前 HEAD 创建新分支。若某分支已在其他 worktree 检出,在列表中会灰显并标明所在 worktree,避免点击后再遇到 git 的 already checked out 错误。

点击改动数量

在右侧 Sidebar 打开 工作区改动 标签页:列出变更文件;选中文件后显示 unified diff,未跟踪文件也会列出(相对 /dev/null diff)。

点击 worktree 标记

列出该仓库所有 worktree 及其分支与改动数。支持 在此新建会话(在该 worktree 目录打开新 Session;worktree 是目录,Session 不会在目录间移动)和 复制路径。已在其他 worktree 检出的分支,在分支弹层中同样会灰显。

交互细节:拖拽选中文字时不会误触打开弹层。

安装与启用

插件要求 DSH >=0.2.1-rc.2(见 package.json 的 engines.dsh)。Host 半部在启动时加载,首次安装后需重启应用;Client 半部在下次页面加载时生效。

从 Git 安装(README 给出固定 commit,非仓库根路径时需加 &path:):

dsh plugin --profile desktop add "git+https://github.com/mjnhmd/dsh-git-bar.git#2d3e0408376127196a4c18e8b1e1c79389a166f5"

从 npm 或本地开发目录安装:

dsh plugin --profile desktop add dsh-git-bar@0.1.0
dsh plugin --profile desktop add link:/absolute/path/to/plugins/dsh-git-bar

若通过自建市场发现插件,可在 DSH 中 插件 → 发现 → 添加索引源,填入 README 提供的索引地址:

https://mjnhmd.github.io/dsh-git-bar/market/index.json

DSH 本身不内置插件市场;市场索引为自托管的 JSON(format 1),仓库内 docs/PUBLISH.zh.md 说明发布流程。

Host API 概要

供集成或排查时参考;请求经 harness browser session 准入,无 GUI 凭证时不可达。所有 git 调用使用参数数组(不经 shell),超时 4 秒,输出缓冲上限 256 KiB;不 watch、不缓存。

方法 路径 作用
GET /dsh-git-bar/info?sessionId=<id>[&dir=<absolute path>] 目录、分支、sha、dirty、upstream、ahead/behind、worktree 等
GET /dsh-git-bar/branches?sessionId=<id> 本地分支列表及 checkedOutIn
GET /dsh-git-bar/worktrees?sessionId=<id> 各 worktree 状态(每个 worktree 一次 status)
POST /dsh-git-bar/branches/checkout body: { sessionId, branch }
POST /dsh-git-bar/branches/create body: { sessionId, name, from? }
GET /dsh-git-bar/changes?sessionId=<id> 变更文件列表,最多 500 个文件
GET /dsh-git-bar/diff?sessionId=<id>&path=<repo-relative>&staged=0\|1 单文件 diff,最多 200 000 字符

典型用法

  1. 在 desktop profile 下按上文命令安装插件,重启 DSH,刷新或重新打开会话页面。
  2. 将 Session 工作目录设在 Git 仓库内,观察 composer 上方状态栏是否出现分支与改动摘要。
  3. 需要换分支时点击分支名,在弹层中搜索并 checkout,或从当前 HEAD 新建分支。
  4. 需要看具体 diff 时点击改动数量,在 Sidebar 的 工作区改动 中选文件查看。
  5. 使用 git worktree 时点击 worktree 标记,在目标目录 在此新建会话 或复制路径。

适用场景与注意

适合经常在 DSH 里针对单一仓库目录对话、又不想为看分支和 diff 反复开终端的开发者。多 worktree 并行时,列表与灰显分支有助于避免误 checkout。

安全与权限:插件以当前 DSH 进程权限在本机执行 git。安装前建议阅读 源码 与许可证(MIT)。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,索引与分发由维护者或第三方托管。

大仓库或改动极多时,changes / diff 接口有文件数与字符上限,响应中可能带 truncated。

结尾

dsh-git-bar 把 Session 的 Git 上下文收拢到 composer 上方一行,并把切分支、看改动、管理 worktree 做成少量明确点击,适合在 Harness 内长时间盯着一个仓库干活时使用。

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

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

小夜