在 DeepSeek Harness 对话页内嵌入 Git 图谱、分支管理、未提交改动面板与代码 diff,让 AI 编程时无需切走即可查看版本历史并执行读写操作。
- 语言
- HTML
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add github:1841220388zzzcccxxx-star/dsh-git-graph在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 1841220388zzzcccxxx-star/dsh-git-graph:先查看仓库 https://github.com/1841220388zzzcccxxx-star/dsh-git-graph 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
在 DeepSeek Harness 对话页内嵌入 Git 提交图谱、分支管理、文件 diff 与 VSCode 风格的未提交改动面板,让 AI 编程时不用切到外部 Git 客户端就能查看版本历史并执行读写操作。
核心能力
- 浏览提交历史:GitHub 风格的提交列表,分支分组折叠、本地/远程分支各自着色,Ctrl+点击对比两次提交,配 Ctrl+F 搜索、Ctrl+B 折叠全部分支组、↑↓/j/k 导航、Enter 详情、Esc 关闭等快捷键
- 查看未提交改动:常驻图谱顶部,已暂存 / 更改 / 未跟踪三组文件列表(含未跟踪文件原始内容),每行 +/- 行数与语法高亮 diff,可折叠面板与分组
- 管理文件改动:单行暂存 / 取消暂存 / 还原,勾选复选框可批量暂存选中、取消暂存选中、还原选中、忽略选中、提交选中,提交对话框内置「✨ AI 生成提交信息」候选
- 远程与分支操作:顶栏 ⬇ 拉取 / ⬆ 推送,本地分支可 🔄 切换 / 🗑️ 删除(已合并才允许,HEAD 受保护),远程分支组头始终显示并标注「已同步」/「已包含」状态
- 浏览任意仓库:顶栏「📂 打开」或空态「打开文件夹」可逐层进入磁盘目录挑选 Git 仓库,添加过的路径通过 localStorage 持久化,跨刷新可继续切换查看
- 一键自更新:打开图谱静默检查 GitHub 最新版本,发现新版本顶栏显示「🔄 新版本 vX.Y」,确认后自动下载并替换(备份旧版、失败回滚),重启 dsh web 生效;自带 8 种风格方案(🌸 樱花 / 🌊 海洋 / 🌲 森林 / 🌙 夜空 / 🍬 糖果 / 💼 商务 / ✨ 星河 / 🤖 科技)
技术实现
- 语言: JavaScript(Node
type: module,纯 ESM) - 关键依赖: 仅使用 Node 内置模块
node:child_process、node:fs、node:path、node:os、node:url、node:net,加上宿主提供的 React 与 slots 服务 - 架构模式: Host 半 / Client 半双端插件——服务端
index.js通过inject: ['webServer']注册/git-graph前缀路由提供 git API(graph / branches / workstatus / workfile / gitop / show / diff / filelog / remoteinfo / checkupdate / autoupdate / listdir / addrepo / repos 等),客户端client.js通过inject: ['slots']在会话页注册conversation.view插槽下的「Git 图谱」标签(label 为Git 图谱,order=20),标签页内嵌 iframe 加载web/index.html - 入口文件: 服务端
index.js,客户端client.js,界面web/index.html(3414 行内联脚本,零外部构建产物)
适用场景
想在 DSH 对话里一边让 AI 改代码,一边不离开当前页面查看提交历史、切换分支、暂存/还原改动或推送到远程的开发者。当 Agent 帮你生成了一波改动,你需要在合并到主干前肉眼 review 每一个文件的 diff、查看上一次谁改过同一行、确认有没有遗留的未跟踪文件时,这个面板就比反复切到 SourceTree / GitHub Desktop 高效得多。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness | >=0.0.1(dsh.plugin.json engines.dsh) | 仅声明了最低版本;插件使用了 webServer 服务(index.js:20 inject: ['webServer'])与 slots 服务(client.js:44),宿主需具备这两个注入点 |
| Node.js | 未声明 | 源码未在 package.json 写明 engines.node;语法使用 ESM 与顶层 await,运行时需 Node ≥ 14+(建议 ≥ 18) |
| 系统 Git | 任意版本 | index.js:26 通过 execFile('git', ...) 直接调用 git CLI,必须在系统 PATH 中可找到 |
| 平台 | macOS / Windows / Linux | reveal 操作按平台分支调用 explorer / open / xdg-open(index.js:673-675),其余逻辑跨平台一致 |
| 原生模块 | 无 | 全部使用 Node 内置模块,未引入 node-gyp / prebuilt 二进制 |
安装方式
dsh plugin --profile web add github:1841220388zzzcccxxx-star/dsh-git-graph
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
repo | 字符串(路径) | 可选初始白名单:允许图谱访问的单个仓库绝对路径。如配置且为有效 Git 仓库,会出现在仓库下拉中 | 不配置 |
repos | 字符串数组(路径) | 可选初始白名单:与 repo 同义但支持多个;配置后会出现在仓库下拉中 | 不配置 |
这两项都是可选的,不配置也能用——通过顶栏「📂 打开」或空态「打开文件夹」按钮随时浏览并添加任意路径的 Git 仓库,添加过的路径在浏览器 localStorage 中持久化(键
gg2-repos,每次加载通过repos?add=重新注册到服务端)。
常见问题
Q: 装好之后在对话页哪里能看到?
A: 打开任意一个对话页,标签栏里在「轨迹」旁边会多出一个「Git 图谱」标签,点进去就是本插件的可视化界面。
Q: 不写 config.repo/config.repos 也能用吗?
A: 可以。这两个字段是可选白名单,写与不写都不影响基本功能;不写时图谱默认跟随当前对话的 Git 工作区,要看其他仓库就用顶栏「📂 打开」或空态「打开文件夹」手动添加。
Q: 系统必须装 Git 吗?
A: 必须。服务端通过 execFile('git', ...) 直接调用 git CLI(index.js:26),没装 git 任何 API 都会失败并返回 git 的错误信息。
Q: 大仓库会卡吗?怎么加载更多?
A: 默认每页 200 条提交,上万提交也不会卡。页面底部会有「加载更多」按钮,点击按需拉取下一页;总数通过 git rev-list --all --count 实时显示在状态栏。
Q: 推送 / 拉取需要怎么配凭证?
A: 走你全局的 git 配置(SSH key、git credential helper、HTTPS token 等)。插件不会管理凭证,认证失败时把 git 的 stderr 原样回传。
Q: 自更新会不会把当前版本覆盖坏?
A: 不会。更新前会在插件目录同级创建一份 .bak-<ts> 备份再开始替换,任何步骤失败都会从备份回滚;成功后自动清理历史备份,只保留最新一份。
Q: 怎么卸载?
A: dsh plugin --profile web remove github:1841220388zzzcccxxx-star/dsh-git-graph,然后重启 dsh web。配置过的白名单只是初始可访问集合,未持久化到插件目录,卸载即清空。
Q: 写操作(如还原、推送、删分支)会误触吗?
A: 不会直接执行。所有破坏性动作客户端都会先弹确认框,破坏性写操作还要勾选「确认」按钮才走服务端;服务端再校验路径必须落在仓库内,校验失败返回 path-outside-repo。
上手难度
入门 — 安装即用,顶栏按钮和右键菜单都是常见 Git 客户端的翻译;只有路径白名单、自更新触发逻辑等少量概念需要看一眼 README 或 AGENTS.md。
已知问题与限制
- 必须系统装 git:所有数据来自
execFile('git', ...),没有 git 就完全不可用 - 更新必须手动重启 dsh web:自更新只替换磁盘文件,运行中的进程仍持有旧代码;AGENTS.md / README / autoupdate 注释里都明确要求重启
- 大文件 diff 会被截断:服务端
MAX_DIFF_CHARS = 240000(index.js:17),单文件 diff / 提交 patch 超过该长度会被截断并返回truncated: true标记 - Windows 上 schema 假阳:写操作路径校验依赖正反斜杠归一化(
replace(/\\/g, '/')),如果仓库本身不在标准盘符路径上,可能需要重启后再访问 - 远程操作可能凭证失败:push / pull / fetch 不带任何凭证处理,完全依赖用户的 git 全局配置;非 fast-forward 或认证错误会原样回传 git 报错
- 写操作依赖客户端确认:服务端不会拦截「丢弃全部改动」「强推」等危险操作的安全门,确认 UI 全在客户端;自定义客户端/逆向调用需自行处理确认流
🌏 中文 · English
🧭 一句话定位:DSH 生态里开箱即用的 Git 可视化工具。 在 DeepSeek Harness 对话界面内直接嵌入 GitHub 风格的提交历史图、分支管理、代码 Diff 与 VSCode 风格未提交改动面板——AI 开发时不用再切到别的 Git 客户端。
DeepSeek Harness(DSH)Web GUI 的嵌入式 Git 仓库图谱可视化插件。
在对话界面里直接查看、浏览、管理 git 仓库:提交历史图、分支过滤、提交详情、文件 diff、工作区状态、右键 git 操作,全部内嵌在 harness 界面中,无需离开当前对话。提交图一目了然,未提交改动像 VSCode 一样分组展示,一眼看清"改了什么、谁改的、要不要提交"。
适合谁:用 DeepSeek Harness / DSH 做 AI 编程、Agent 开发的开发者;想在同一个界面里同时看清提交历史、分支、工作区改动的 Git 用户;需要比命令行更直观的 Git 可视化工具的开发者与团队。
🔍 搜索关键词:DSH 插件 · DeepSeek Harness 插件 · Git 可视化 · Git 图谱 · 提交历史图 · 分支管理 · 代码 Diff · VSCode 风格改动面板 · Git 效率工具 · AI 编程助手
🛠 本项目由 AI 辅助开发(AI-assisted development)。
📸 效果预览
✨ 功能
- 提交历史图:GitHub 风格提交列表,分支分组折叠、分支着色(本地与远程分支各有独立分组)
- 跟随当前对话:打开哪个对话就显示哪个对话工作区的 git 仓库,切换对话自动跟随;非 git 仓库的对话显示空态提示
- 📂 打开文件夹(v0.11):不局限于当前对话工作区——点击顶栏「打开」或在空态中点「打开文件夹」,可浏览磁盘(驱动器 → 目录逐层进入,带 git 标记),选择任意文件夹(如另一个工作区的仓库 B)查看其版本管理;添加过的仓库持久保存,顶部下拉随时切换,刷新后仍可继续查看
- 分支过滤:勾选 = 显示该分支 · 不勾 = 完全隐藏(全部不勾选则列表为空)
- 提交详情:提交信息、文件变更列表、单文件 diff、两次提交对比(Ctrl+点击)、📜 文件历史(查看单个文件的所有历史提交)
- 未提交改动(VSCode 风格,常驻图谱顶部):已暂存 / 更改 / 未跟踪三组文件列表、状态徽标(A/M/D/R/U/?)、每文件 +/− 行数、点击行展开单文件 diff(语法高亮)、重命名
旧 → 新、未跟踪文件直接显示内容;☑ 分组开关可单独隐藏某组,面板与分组均可点击折叠;每行可 暂存/取消暂存/还原,顶栏 全部暂存/提交,勾选复选框可批量 暂存选中/取消暂存选中/还原选中/忽略选中/提交选中(破坏性操作执行前弹确认框);提交对话框内可 ✨ AI 生成提交信息(依据 diff 自动生成候选,可编辑) - 右键菜单:复制哈希/消息、查看详情、🏷️ 打标签(可改名/删除)、🌿 从提交新建分支、🌐 打开 GitHub 提交页、复制仓库路径、在文件管理器中打开
- 远程/分支操作:顶栏
⬇ 拉取(git fetch)与⬆ 推送(git push 当前分支,确认后执行);分支组头右键——本地分支可 🔄 切换 / ⬆ 推送 / 🗑️ 删除(已合并才可删,HEAD 受保护),远程分支可 ⬇ 拉取 / 复制远程分支名 - 远程分支可见:远程分支组头始终显示(即使与本地完全同步),并标注「已同步」/「已包含」状态
- 自动更新:打开图谱时静默检查 GitHub 最新版本,发现新版本顶栏显示「🔄 新版本 vX.Y」,一键点击自动下载并替换插件文件(自动备份旧版,失败自动回滚),重启后生效
- 状态记忆:分支过滤、☑ 分组开关、面板/分组折叠状态、主题自动保存,刷新后保留(v0.8 起键统一为
gg2-*,首次打开分支默认全部展开) - 多仓库切换:图谱页头部下拉快速切换多个仓库
- 大仓库优化:提交列表分页加载(200 条/页 + 加载更多),上万提交也不卡
- 键盘快捷键:
Ctrl+F搜索、Ctrl+/快捷键面板、Ctrl+B折叠/展开全部分支组、↑↓/j/k导航、Enter详情、Esc关闭 - 自动刷新:页面可见时每 5 秒监听工作区改动与新增提交,自动更新统计与列表
- 主题系统:自动跟随 / 深色 / 浅色,外加 8 种风格方案(与拾光记同款)——🌸 樱花(飘落花瓣)、🌊 海洋(波浪/气泡/鱼群)、🌲 森林(树木/落叶/萤火虫/蝴蝶)、🌙 夜空(星星/月亮/流星)、🍬 糖果(彩虹/彩带/棒棒糖)、💼 商务(几何/玻璃浮块)、✨ 星河(繁星/月亮/流星/地球)、🤖 科技(电路/齿轮/芯片),每种风格自带专属动态背景(海洋/科技/商务/糖果元素密度更高)
- 挂载位置:会话页内「Git 图谱」标签(位于「轨迹」标签旁)
📦 安装
1. 把插件加入 profile
编辑你的 DSH web profile 的 package.json,添加依赖:
{
"dependencies": {
"dsh-git-graph": "file:./plugins/git-graph"
}
}
(plugins/git-graph 为本插件源码所在目录,按实际路径调整。)
2. 挂载 bundle
在 profile 的 cordis.patch.yml 中加入:
- insert:
- id: git-graph
name: dsh-git-graph
config:
repo: "C:/path/to/your/repo"
config.repo/config.repos是可选的初始可访问仓库白名单;不配置也能用——图谱页顶栏「📂 打开」可随时浏览并添加任意文件夹的 Git 仓库(v0.11),添加过的仓库会记住。运行中被会话工作区发现的仓库也会自动加入可访问集合。
3. 安装并重启
pnpm install
# 然后重启 dsh web(或直接使用一键重启脚本)
打开 http://127.0.0.1:3080 ,在任意会话页内点「Git 图谱」标签(位于「轨迹」标签旁)即可查看。
🖱️ 使用
| 操作 | 说明 |
|---|---|
| 会话页「Git 图谱」标签 | 在该对话内查看图谱(跟随当前对话工作区) |
| 📂 打开 / 空态「打开文件夹」 | 浏览磁盘选择任意 Git 仓库(如其他工作区的文件夹 B),添加后显示其版本管理(v0.11) |
| 顶部仓库下拉 | 切换仓库;旁边小字显示当前仓库完整路径 |
| 分支组标题 | 点击折叠 / 展开该分支 |
| ☑ 分支过滤 | 勾选 = 显示该分支,不勾 = 完全隐藏 |
| 图谱顶部「未提交改动」区块 | 已暂存/更改/未跟踪一览(含未跟踪文件),点击行展开 diff;☑ 分组可隐藏某组;点击顶栏或组标题折叠;行内「暂存/取消暂存/还原」,顶栏「全部暂存/提交」,勾选复选框批量 暂存/取消暂存/还原/忽略/提交 |
| 提交行 | 点击查看详情,Ctrl+点击与另一提交对比 |
| 提交行右键 | 复制 / 查看详情 / 打标签 / 从提交新建分支 / 打开 GitHub 提交页 / 复制仓库路径 / 打开文件夹 |
| 提交详情里的 📜 | 查看该文件的历史提交 |
| 底部状态栏「未提交改动」 | 点击滚动到顶部改动区块 |
| ↻ 刷新 | 重新加载仓库数据 |
🛠️ 开发
git-graph/
├── index.js # 服务端:git API(graph/branches/workstatus/workfile/diff/...)
├── client.js # 客户端插件:会话页「Git 图谱」标签
├── web/index.html # 图谱界面(iframe 内独立页面)
├── package.json # 插件清单(dsh.client.inject + bundle patch)
└── cordis.patch.yml # profile 挂载点
修改后同步到 DSH 部署目录(node_modules/dsh-git-graph/):
.\sync-deploy.ps1
服务端(index.js)改动需重启 dsh web;页面(web/index.html)改动刷新即生效。
📄 开源协议
🙏 致谢
- DeepSeek Harness —— 插件运行平台
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/1841220388zzzcccxxx-star/dsh-git-graph)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。