
xbzbing/dsh-git-panel
dsh-git-panel
an IDE-style Git panel for the Web GUI — branches & history, commit/amend for local changes, AI-generated commit messages, a file browser, code & image before/after diffs, an input-bar branch marker, optimized for mobile
Install
npx @deepseek-ai/dsh plugin --profile web add @xbzbing/dsh-git-panel@latestRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-git-panel)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from xbzbing/dsh-git-panel, cleaned of badges and images.
dsh-git-panel
English | 简体中文
dsh-git-panel 是一个 DSH Web GUI 插件,在对话工作区里提供 IDE 风格的 Git 面板。它把分支列表、提交历史图、未提交变更的提交与 amend、语法高亮的差异对照集中到一个常驻标签页,并在输入框左侧放一个 zsh 风格的分支标记,让你在对话过程中随手查看仓库状态、提交改动,不必切到终端或另开 IDE。
面板只读取当前会话工作目录所在的 Git 仓库,所有 git 命令都以 argv 数组经宿主的 subprocess 服务执行,不拼接 shell 字符串,工作目录锁定在仓库根,并带超时与输出上限。插件不改动 git 配置,写操作(提交、amend、暂存、丢弃)都有明确入口。
安装
# 正式版(npm)
dsh plugin --profile web add @xbzbing/dsh-git-panel@latest
# 预发布(GitHub Release 附件,不发 npm)
dsh plugin --profile web add https://github.com/xbzbing/dsh-git-panel/releases/download/v1.8.0-rc.1/xbzbing-dsh-git-panel-1.8.0-rc.1.tgz
预发布版本号带 -(如 1.8.0-rc.1),只出现在 GitHub Release,不会推送 npm,也不会触发面板里的「有新版本」提示;正式版发布时 npm 与稳定 Release 同时上线。lib/ 不随仓库提交,请不要用 dsh plugin add github:… 安装——改用上面的 npm 或 Release 附件 URL。
安装或更新后,工作区标签栏(「对话」「轨迹」之后)就会出现 Git 面板,无需重启服务、也无需刷新页面:dsh 的 hmr 监听 profile 的 package.json 与 patch 文件,插件装好即热挂载;client 半产物(lib/client.js)被替换后也会被秒级轮询拾取,经 /plugins/events 推给浏览器原地热替换(拆掉旧 fiber 重挂新代码),已打开的页面不刷新即可拿到更新。仅 host 半模块(lib/host/*.js,进程内已加载的旧代码会一直跑到重启为止)与 hmr 不可用时的 profile 变更仍需重启服务。面板内的配置项(详情页的输入框标记开关、差异默认视图)走配置热写,改动即时生效。
兼容性:已在
[email protected]上实测,安装、Git 面板、输入框标记与 host RPC 均可正常使用。
功能
- Git 总览:三栏——分支 / 标签列表、可搜索(提交信息、commit 哈希、作者、日期)的提交历史图、选中提交的变更文件树与提交信息;点文件在 modal 里查看该文件在此提交中的差异。
- 变更记录:逐文件暂存 / 取消暂存 / 丢弃;批量暂存选中文件、批量放弃选中改动(二次确认);手动提交与 Amend;贮藏(创建 / 应用 / 弹出 / 丢弃);以及文件数与增删行统计。
- 常用 Git 操作:分支切换(远程引用落为同名跟踪分支,不留游离 HEAD;有未提交改动可先贮藏再切换)、标签创建与删除、提交还原 / 重置(硬重置会列出将丢弃的改动并要求额外勾选)。都只改写本地仓库,不自动推送。
- AI 生成提交信息:按当前未提交变更与仓库既有提交风格生成提交信息,语言默认跟随仓库历史自动推断(也可固定中文 / English);模型可在详情页从 DSH 模型列表中固定选择(提供方 → 模型 → 推理强度三级级联,默认跟随当前会话),并可关闭生成或调整输入预算、输出上限与超时。生成会把 diff 内容发送给你所选模型的供应商。
- 输入框 Git 标记:zsh 风格的
<仓库名> (<分支>),已同步为绿色、有未提交变更为橙色;悬停显示仓库路径,点击跳转面板。可在插件详情页关闭,改为在「Git」标签旁显示状态圆点。 - 文件浏览:面板内直接浏览工作区目录树(按需加载、
.gitignore项半透明、不显示.git)并预览代码 / Markdown / HTML / 图片(Markdown 渲染视图内嵌的本地图片可直接显示,如 README 配图;```mermaid 代码块渲染为图表,解析失败回退为代码块);源码预览默认自动换行,可切换为横向滚动查看长行;非 Git 目录也能用,以当前工作目录为根。 - 差异与源码查看:统一 / 对照 / 变更前 / 变更后四种视图,语法高亮、词级改动强调、块间隐藏上下文按需展开,<kbd>Ctrl</kbd>/<kbd>⌘</kbd>+<kbd>F</kbd> 就地查找;图片以光标为锚点缩放(10%–800%)、可拖拽平移与全屏。
- 窄面板 / 移动端:宽度 ≤620px 时自动切为单栏「钻取」布局(分支筛选改为底部弹层、提交行改两行式),变宽后自动恢复三栏。
- 共享工作区护栏:与 dsh 的 AI 共用同一仓库,写操作弹窗统一提示「可直接让 AI 执行 Git 操作」;撞上
.git/index.lock会自动重试一次并提示「Git 正忙」。 - UI 跟随 DSH 系统语言设置,支持简体中文和英文。
权限与数据边界
面板以 DSH 进程的权限运行,安装前值得知道这些边界:
- Git 命令:所有 git 命令都经宿主的
subprocess服务执行——argv 数组、不拼接 shell 字符串、工作目录锁定在仓库根,每条命令带超时与输出上限;不使用--force,也不改动 git 配置。 - 文件访问:只读工作区内的文件(差异、文件浏览、AI 生成的输入),路径经校验并做 realpath 包含检查——软链指向仓库外一律拒绝,
.git不可浏览。唯一的写盘动作是「放弃未跟踪条目」:按你的确认直接删除工作区文件,条目本身是 Git 仓库时整批拒绝。 - 网络:插件自身只发起一个请求——
GET https://api.github.com/repos/<owner>/<repo>/releases/latest,用于版本条上的「有新版本」提示(5 秒超时,结果带进程内缓存)。fetch/pull/push/publish只在你点击后经 git 命令联网,凭据始终由 git 处理;插件不读取、不存储、不返回任何令牌或凭据。 - 外部服务:只有「AI 生成提交信息」会把 diff 内容发送给你在 DSH 中配置的模型供应商;模型调用由宿主完成,插件不持有凭据。
- 系统依赖:需要
gitCLI;未安装 git 或目录不是 Git 仓库时只显示文件浏览,以当前工作目录为根。
客户端 bundle(lib/client.js)不发起网络请求,只与宿主走同源 RPC;插件不采集遥测。面板字号、分栏宽度这类界面偏好只存在浏览器 localStorage,不含仓库内容。除 git 命令与被确认的删除外,插件代码不在工作区之外读写文件;详情页的配置项由宿主写进 profile 配置。
界面
| Git 总览 | 文件差异 modal |
|---|---|
| 变更记录 | 文件浏览 |
| 窄面板 / 移动端 | 插件配置 |
架构
插件分 host / client 两半,通过 typert Remote 网关通信。
…

