dsh-git-chain:DSH 的 Git 提交链路图与分支切换插件

前言

DeepSeek Harness (DSH) 的核心设计理念是“一切皆插件”。在智能体开发与调试过程中,频繁查看 Git 提交历史、定位具体变更以及安全切换分支是常见操作。dsh-git-chain 插件旨在解决这些问题,它将仓库历史以 SVG 泳道图的形式呈现,并提供在侧边栏工作流中直接查看详情、Diff 和受保护的分支切换能力。

插件定位

dsh-git-chain 是一款面向 DSH 的客户端插件,由 ShinonomeAya 维护。它不直接操作 Git 底层,而是作为 DSH Web GUI 和 DSH Host 之间的桥梁:前端负责渲染 SVG 可视化与交互,后端通过 ctx.subprocess 调用 Git CLI 来执行具体的图生成、Diff 和分支操作。

核心功能

历史视图与过滤

插件提供 SVG 泳道拓扑图,展示提交节点、Merge 汇入线和分支出线。
- First-parent 主线视图:专注于当前 HEAD 的第一父链,同时保留 Merge 元数据。
- 范围过滤:支持查看全部 refs、当前分支、指定本地分支。
- 即时过滤:在已加载的历史窗口内,可按主题、作者、引用或 Commit OID 进行筛选。
- 布局策略:采用最小泳道策略,配合固定行高和虚拟滚动,适合较长的提交列表。

提交详情与 Diff

  • 点击提交节点可查看作者、提交者、时间、父提交及变更文件。
  • 提供文件状态徽标和增删行数统计。
  • 懒加载 unified Diff,单次输出上限为 1 MB,防止大变更占满界面。

分支切换与保护

  • 受保护切换:切换分支前,系统会自动检查冲突、进行中的 Git 操作、其他 worktree 以及可能被覆盖的文件。
  • 安全机制:使用 git switch --no-guess 避免隐式创建或猜测远端分支;分支名和 commit OID 在命令执行前经过白名单校验,使用 argv 而非拼接 shell 字符串。
  • Fallback 机制:优先显示在 dsh-better-sidebar 中;若无该基座,则回退为输入栏芯片和浮动面板。

安装与启用

安装前请确保环境满足以下要求:
- DSH 版本 >= 0.1.1-rc.1
- Node.js 版本 >= 22.19.0
- Git 已加入系统 PATH

  1. 克隆仓库:
   git clone https://github.com/ShinonomeAya/dsh-git-chain.git
   cd dsh-git-chain
  1. 安装依赖并构建:
   pnpm install
   pnpm run build
  1. 添加插件到 DSH Desktop profile:
   dsh plugin --profile desktop add link:/absolute/path/to/dsh-git-chain
  1. 重新启动 DSH,在侧边栏中找到 Git 链路图 标签页。

如需卸载:

dsh plugin --profile desktop remove dsh-git-chain

典型用法

  • 查看提交详情:点击提交节点,侧边栏会展开显示作者信息、父提交记录以及变更文件列表。
  • 浏览主线:在视图选择中启用 first-parent,聚焦当前分支的主线历史,便于梳理逻辑流。
  • 安全切换:点击分支列表中的分支名,系统会进行安全检查(如是否有未提交的更改或冲突),确认无误后切换。
  • 筛选历史:在已加载的历史窗口内,输入关键词即可快速过滤出特定作者或主题的提交。

适用场景与注意事项

该插件适合需要频繁在 DSH 中进行代码审查、历史回溯或分支管理的开发者。

需要注意以下已知限制:
- 过滤范围:文本过滤目前仅作用于已加载窗口;全历史的 subject、author 或文件级服务端搜索仍在路线图中。
- 布局限制:图布局采用最小泳道策略,少数复杂的菱形 merge 节点可能轻微重叠。
- 视觉截断:虚拟滚动窗口上下缘会对泳道进行截断,但通过 overscan 减少视觉跳变。
- Diff 大小:单次完整 Diff 输出上限为 1 MB。

此外,插件运行于 DSH 进程权限下,Git 路由只接受已注册的 workspace,默认只接受 loopback 请求,安全性由 Host 层把控。

结语

dsh-git-chain 通过可视化的方式重构了 Git 历史的查看体验,同时将分支切换的安全检查纳入工作流。对于使用 DSH 进行智能体开发或代码管理的用户,它是一个能够直接提升调试效率的工具。

GitHub 仓库

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

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

小夜