前言¶
在 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 的路由均有处理);若目录是 linkedgit 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 字符 |
典型用法¶
- 在 desktop profile 下按上文命令安装插件,重启 DSH,刷新或重新打开会话页面。
- 将 Session 工作目录设在 Git 仓库内,观察 composer 上方状态栏是否出现分支与改动摘要。
- 需要换分支时点击分支名,在弹层中搜索并 checkout,或从当前 HEAD 新建分支。
- 需要看具体 diff 时点击改动数量,在 Sidebar 的 工作区改动 中选文件查看。
- 使用
git worktree时点击 worktree 标记,在目标目录 在此新建会话 或复制路径。
适用场景与注意¶
适合经常在 DSH 里针对单一仓库目录对话、又不想为看分支和 diff 反复开终端的开发者。多 worktree 并行时,列表与灰显分支有助于避免误 checkout。
安全与权限:插件以当前 DSH 进程权限在本机执行 git。安装前建议阅读 源码 与许可证(MIT)。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,索引与分发由维护者或第三方托管。
大仓库或改动极多时,changes / diff 接口有文件数与字符上限,响应中可能带 truncated。
结尾¶
dsh-git-bar 把 Session 的 Git 上下文收拢到 composer 上方一行,并把切分支、看改动、管理 worktree 做成少量明确点击,适合在 Harness 内长时间盯着一个仓库干活时使用。