前言¶
用 DeepSeek Harness 做 AI 编程时,对话、轨迹、工作区改动往往挤在同一个 Web 界面里。Git 历史却常常还在别处:终端里敲 git log --graph,或者再开一个 VS Code、GitHub Desktop。来回切换并不复杂,但上下文会断——刚才模型改了哪几个文件、当前 HEAD 在哪条分支、工作区是干净还是脏的,都要重新确认一遍。
DeepSeek Harness(dsh)的设计是「一切皆插件」:模型、工具、会话、沙箱和 UI 都可以挂载替换。社区因此出现了一批只改界面、不改核心的增强插件。dsh-git-graph 就是其中面向 Web GUI 的 Git 可视化插件:把提交历史图、分支过滤、文件 diff 和 VS Code 风格的未提交改动,嵌进会话页的「Git 图谱」标签。
本文按插件目录页、GitHub 仓库 README / package.json,以及 DeepSeek Harness 官方仓库 交叉核对后整理。社区插件目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,下文不当成官方应用商店来写。
这是什么¶
dsh-git-graph 是 DeepSeek Harness Web GUI 的嵌入式 Git 仓库图谱插件,由 GitHub 用户 1841220388zzzcccxxx-star 维护,仓库地址为 1841220388zzzcccxxx-star/dsh-git-graph。目录页将它归在「界面增强」。许可证为 MIT。仓库 package.json 与 dsh.plugin.json 中的版本号均为 0.10.0,并声明客户端平台为 web。
它要解决的问题很具体:在当前对话的工作区里,直接看清提交拓扑、分支关系和未提交改动,而不必离开 Harness 界面。README 的定位是:在对话界面内嵌入 GitHub 风格的提交历史图、分支管理、代码 Diff,以及 VS Code 风格的未提交改动面板。
需要分清的是:GitHub 上还有其他同名或相近的 DSH Git 插件(例如只读图谱、状态浮窗)。本文只写目录页收录、维护者为 1841220388zzzcccxxx-star 的这一份。核对当日 GitHub API 显示该仓库 12 星;目录页当时仍显示 7 星,星标以仓库页面为准。仓库 README 写明本项目由 AI 辅助开发。
核心功能¶
仓库 README 列出的能力可以分成「看历史」和「管工作区」两块。下面只写已在 README 与源码结构里核对过的部分。
提交历史图与分支¶
图谱按 GitHub 风格列出提交,本地分支和远程分支各自成组,可以折叠,并按分支着色。打开哪个会话,就显示哪个会话工作区的 Git 仓库;切换会话会自动跟随。工作区不是 Git 仓库时,只显示空态,不画图谱。
分支过滤用勾选控制:勾选则显示该分支,不勾则完全隐藏;全部不勾选时列表为空。提交列表分页加载,README 写明每页 200 条,并提供「加载更多」。图谱页头部有下拉框,用于在多个仓库之间切换。
提交详情与 Diff¶
点击提交行打开详情:提交信息、变更文件列表、单文件 diff。Ctrl+点击 可以选两次提交做对比。详情里的文件历史入口(README 用「📜」标注)用来查看单个文件相关的历史提交。
未提交改动¶
未提交改动区块常驻图谱顶部,分组方式接近 VS Code:已暂存、更改、未跟踪。每行有状态徽标(A / M / D / R / U / ?)和 +/- 行数,点击行展开带语法高亮的单文件 diff。重命名显示为 旧 → 新;未跟踪文件直接显示内容。分组开关可以单独隐藏某一组,面板和分组都可以折叠。
行内可以暂存、取消暂存、还原;顶栏可以全部暂存、提交。勾选复选框后可批量暂存、取消暂存、还原、忽略或提交选中文件。README 写明破坏性操作执行前会弹确认框。提交对话框内可以依据 diff 生成候选提交信息,生成结果可编辑;英文 README 将其描述为基于 diff 的启发式候选,而不是单独的模型调用说明。
右键与远程操作¶
提交行右键菜单包括:复制哈希或消息、查看详情、打标签(可改名/删除)、从该提交新建分支、打开 GitHub 提交页、复制仓库路径、在文件管理器中打开。
顶栏提供 ⬇ 拉取(git fetch)和 ⬆ 推送(git push 当前分支,确认后执行)。分支组头也可右键:本地分支可切换、推送、删除(README 写明已合并才可删,HEAD 受保护);远程分支可拉取、复制远程分支名。远程分支组头即使与本地完全同步也会显示,并标注「已同步」或「已包含」。
刷新、快捷键与主题¶
页面可见时,每 5 秒监听工作区改动与新增提交,并更新统计和列表。快捷键包括:Ctrl+F 搜索、Ctrl+/ 打开快捷键面板、Ctrl+B 折叠或展开全部分支组、↑↓ / j / k 导航、Enter 打开详情、Esc 关闭。
主题可自动跟随系统,也可固定深色或浅色;另外提供 8 种风格方案(樱花、海洋、森林、夜空、糖果、商务、星河、科技)。分支过滤、分组开关、折叠状态和主题会保存,刷新后保留。README 写明自 v0.8 起存储键统一为 gg2-*,首次打开时分支默认全部展开。
图谱打开时会静默检查 GitHub 上的最新版本;发现新版本后,顶栏显示「🔄 新版本 vX.Y」,点击后下载并替换插件文件(先备份旧版,失败则回滚),重启后生效。这是写权限操作,安装前应当和源码一起审查。
挂载位置在会话页内「Git 图谱」标签,位于「轨迹」标签旁。package.json 里客户端注入槽为 slots,并通过 cordis.patch.yml 声明 bundle patch。
安装与启用¶
目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行:
dsh plugin add github:1841220388zzzcccxxx-star/dsh-git-graph
目录页同时说明:如需可复现安装,可固定 commit 哈希:
dsh plugin add github:1841220388zzzcccxxx-star/dsh-git-graph#commit
把 #commit 换成实际的 40 位提交哈希,不要原样复制占位符。DeepSeek Harness 官方 CLI 文档里,插件管理的完整形式是 dsh plugin --profile <profile> add ...。这个插件声明平台为 web,装到 Web 界面时应对准 web profile,例如:
dsh plugin --profile web add github:1841220388zzzcccxxx-star/dsh-git-graph
Git 源安装拉取的是源码而不是构建产物。官方开发文档指出,pnpm ≥10 默认拦截 git 依赖的 prepare 脚本,第一次 add 可能失败,需要按提示把包名写入该 profile 的 pnpm-workspace.yaml 的 allowBuilds 后再执行一次。本仓库 package.json 未声明 prepare;若安装报错,以终端提示为准,不要假设必须允许构建。
目录页的安全提示需要原样理解:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
仓库 README 还提供了一套从本地源码挂载的写法,适合已经把插件拷到 profile 目录的情况。
- 在 web profile 的
package.json中加入依赖(路径按实际调整):
{
"dependencies": {
"dsh-git-graph": "file:./plugins/git-graph"
}
}
- 在 profile 的
cordis.patch.yml中挂载。仓库里的示例是:
- insert:
- id: git-graph
name: dsh-git-graph
config:
repo: "C:/path/to/your/repo"
config.repo / config.repos 是图谱面板初始可访问的仓库白名单。README 写明:运行中被会话工作区发现的仓库也会自动加入可访问集合。示例路径是 Windows 风格,换成自己的仓库路径。
- 安装并重启:
pnpm install
然后重启 dsh web。官方默认 Web UI 地址是 http://127.0.0.1:3080。打开任意会话页,点「轨迹」旁的「Git 图谱」标签即可。
典型用法¶
README 中的操作可以按这个顺序试一遍(工作区必须已经是 Git 仓库,否则只会看到空态)。
- 打开会话页的「Git 图谱」标签,确认显示的是当前对话工作区的仓库。
- 用分支组标题折叠或展开某条分支;用勾选框过滤要看的分支。
- 看图谱顶部的「未提交改动」:已暂存 / 更改 / 未跟踪。点击某一行展开 diff。
- 需要暂存或还原时,用行内按钮;需要提交时用顶栏「提交」。破坏性操作会先弹出确认框。
- 点击某次提交查看详情;按住
Ctrl再点另一次提交,对比两次提交。 - 在提交行上右键:复制哈希、打标签、从该提交拉新分支,或打开 GitHub 提交页。
- 远程同步用顶栏拉取 / 推送;切换或删除本地分支用分支组头右键。
- 底部状态栏的「未提交改动」可以滚回顶部改动区块;
↻ 刷新会重新加载仓库数据。
仓库结构在 README 里写得很清楚,方便对照源码:
git-graph/
├── index.js # 服务端 git API
├── client.js # 会话页「Git 图谱」标签
├── web/index.html # iframe 内的图谱页面
├── package.json # 插件清单
└── cordis.patch.yml # profile 挂载点
源码文件头注释写明:服务端在 /git-graph 下提供 API,命令通过 execFile 执行(不走 shell),参数列表是固定的。也就是说,本机需要能调用 git。服务端(index.js)或客户端(client.js)改动后要重启 dsh web;只改 web/index.html 时刷新页面即可。
适用场景与注意事项¶
比较适合这几类用法:
- 已经在用
dsh web做 AI 编程,希望在同一个会话页里看提交图和工作区改动 - 需要比
git log --graph更直观的分支过滤、文件 diff、两次提交对比 - 偶尔要在界面里做暂存、提交、拉取、推送,但不想为此再开一个 Git 客户端
不适合、或需要额外小心的地方:
- 它只声明了 Web 客户端,不是 TUI / headless 插件。
- 工作区不是 Git 仓库时没有图谱,只有空态。
- 插件会执行
git fetch、git push、切换分支、删除已合并分支、还原文件等写操作。虽然 README 写了确认框和 HEAD 保护,权限仍等于当前dsh进程。 - 自动更新会下载并替换插件文件。如果环境不允许插件自行改磁盘上的安装目录,应关闭或不要使用该入口,改为固定 commit 再手动升级。
config.repo是白名单,但会话工作区发现的仓库会在运行时加入可访问集合。不要把dsh指到你不希望被 Git 面板触及的目录。- 社区目录和 GitHub 上存在多个 Git 可视化插件,安装命令必须对准
github:1841220388zzzcccxxx-star/dsh-git-graph,不要按名字随便拼。
再次强调:插件以当前 dsh 进程权限运行,安装时可能执行代码。安装前检查源代码与 MIT 许可证;生产或共享环境建议固定 commit 哈希。DeepSeek Harness 仍处于 developer preview,官方 README 写明会有破坏性变更,插件接口也可能跟着变。
小结¶
dsh-git-graph 把提交历史、分支过滤、文件 diff 和 VS Code 风格的未提交视图嵌进 DeepSeek Harness 的会话页,减少「一边跟模型改代码、一边切到别的 Git 客户端」的往返。它是社区 MIT 项目,不是官方内置功能。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-git-graph/
GitHub:https://github.com/1841220388zzzcccxxx-star/dsh-git-graph