dsh-git-ui
v0.2.1
Published
DeepSeek Harness (dsh) plugin: visualize Git status in the Web UI — current branch, HEAD, staged/modified/untracked counts, ahead/behind, recent commits and changed files.
Maintainers
Readme
dsh-git-ui
DeepSeek Harness(dsh)Web UI 的 Git 状态可视化插件——会话头部的 Pill 胶囊、详情弹窗与完整的 Git 中心,无需切换终端。
Read this in English
- 📦 npm: https://www.npmjs.com/package/dsh-git-ui
- 🐙 GitHub: https://github.com/Julyves/dsh-git-ui
- 🐛 Issues: https://github.com/Julyves/dsh-git-ui/issues
一览
- Pill 胶囊 — 分支 · 脏计数(
+N −N ?N)· 领先/落后 - 详情弹窗 — 最近提交、变更文件、分支操作,点击胶囊即达
- Git 中心 — 四个标签:历史(默认落地页)、变更、记录、设置
会话头部 Pill 与详情弹窗
每个会话头部一个状态胶囊;点击展开详情弹窗——仓库根、状态计数、最近提交、带行内暂存/取消/丢弃的变更文件,以及分支操作:
| 状态 | Pill |
|---|---|
| 干净 | ● main |
| 有变更 | ● main · +2 −1 ?3 |
| 领先 / 落后 | ● main · ↑1 ↓2 |
| 游离 HEAD | ● (detached HEAD) · a1b2c3d |
| 非 Git 仓库 | 弱化 无 Git 仓库 |
- 最近提交 — 点击即跳转历史标签,自动定位并选中该提交
- 变更文件 — 点击在变更页打开该文件对照;行内暂存/取消/丢弃
- 分支切换与新建 — 弹窗内直接切换或创建并切换
- 齿轮入口 — 直达设置;弹窗内区块的排列顺序可在设置中自定义
Git 中心
从弹窗打开——四个标签保持挂载,选中、过滤与滚动位置在切换间不丢失。历史为默认首项。
历史
分页提交列表 + SVG 分支图渲染——窗口化渲染保证数千行流畅;选中行以发光轨道点亮(赛博风格,自动适配减弱动效):
- 过滤树 — 分支/标签/作者/日期/文本或哈希;前缀分组(
feat/*、fix/*、远程 origin 组)默认收起更规整;拉取按钮同步远程引用 - 日期过滤 —
今天= 本地当日零点起(非 24 小时);24 小时内与近 7/30/90 天为独立档位 - 搜索 — 文本或哈希前缀,一键清除
选中提交后展示主题·正文·变更文件树(目录可折叠、按状态着色)。点击文件树中的文件跳转变更页,以该提交为基线展示此文件的变更,并以提交哈希徽标标识所属提交:
变更
IDE 式三段分组(已暂存/更改/未跟踪)、单文件与批量暂存/取消/丢弃(两步确认)、提交框:
差异查看器:
- 视图三态 —
对照(前后并排,默认)/变更前/变更后;并排分隔条可拖拽调占比(20%–80%) - Markdown 渲染 —
.md文件提供渲染档:标题/列表/表格/围栏代码高亮;mermaid图原生渲染(含渲染/源码切换与解析失败提示) - 新增/删除文件 — 纯新增与纯删除差异单栏全宽展示完整文件内容,带
新增/已删除徽标 - 语法高亮与上下文折叠 — 整块 tokenize 一次、长冗余上下文可折叠
记录
Turn 工作记录回答「这一轮动了什么、谁动的」:
- Pill 徽章 — 未读
new N+ 三方计数:本本会话 agent ·会其他会话 AI ·外人工(IDE/终端) - 工作时段时间线 — 连续 turn 合并为时段卡片:任务叙事、时间窗、三方文件分组(仍变更/已提交/已还原/已消失);无产出时段同样可展开(
无变更产出标注) - 行动闭环 — 一键批量暂存「AI 变更」或全部;已提交条目深链历史页精确定位
- 置信度与纠错 — 权威条目实心徽标、启发式虚线
≈;悬停按⇄可改判归属(仓库级持久化) - 新输出标记 — 每轮边界指纹将本轮新条目标为
新
设置
显示预设(极简/标准/完整,纯派生——手动调整重新匹配预设时自动吸附回位)、Pill 与弹窗逐项开关、弹窗区块排序与差异查看器选项:
- Pill 与弹窗独立 — 逐项开关,包括工作记录徽章(Pill)与工作记录区块(弹窗)分开控制
- 弹窗区块排序 — 上下箭头重排;隐藏区块保留在序列中,开启后按序出现
- 差异查看器 — 代码字号、语法高亮、上下文折叠;
最近提交条数(0 = 隐藏)
安装
需要已运行 DeepSeek Harness 且使用 web profile:
dsh plugin --profile web add dsh-git-ui重启 dsh web。在 git 仓库的会话中打开即可见头部 Pill。卸载:dsh plugin --profile web remove dsh-git-ui。
本地开发安装:
dsh plugin --profile web add ./会以 link 方式接入本仓库; 需保持node_modules/@deepseek-ai/*的开发 peer 符号链接(见开发)。
使用方式
- 打开一个工作目录在 git 仓库内的会话。
- 随时阅读 Pill 即可——无需任何操作。
- 点击 Pill 查看计数、最近提交与变更文件;或打开 Git 中心进行完整管理。
每个会话展示其自身工作目录的状态;非仓库会话显示弱化占位符。
配置(可选)
默认开箱即用。高级用户可在 profile 的 cordis.patch.yml 中覆盖插件配置:
- id: git-ui
config:
defaultRefreshIntervalMs: 60000 # 轮询间隔(毫秒);0 关闭轮询
maxChanges: 200 # 快照中变更文件条目上限
timeoutMs: 3000 # 每条 git 命令超时(毫秒)
maxStatusBytes: 8388608 # status 输出截断上限
dshHome: /path/to/harness-home # 可选:Harness 家目录(默认 $DSH_HOME → ~/.dsh)环境要求
- Node.js
^22.19.0 || >=24.0.0 - dsh
>= 0.1.0-rc(开发者预览版) - 宿主已安装
git
已知限制
- 仅展示会话工作目录的状态;push / pull / merge 未开放。
- 刷新基于轮询(默认 30 秒);文件监视事件推送为计划项。
- 变更文件列表有上限(
maxChanges);超大 status 输出经 spill 文件兜底恢复计数。 - 浏览器只发送
sessionId——宿主解析 cwd 并以路径守卫运行 git 命令。 - Turn 记录对动态构造的 bash 目标(
$(...)、glob、eval)为启发式——回落外并带可见≈标记;冷会话跳过;观测时间线有上限。 - 语法高亮为预算裁剪的语言子集;mermaid 支持 flowchart/graph 与 sequenceDiagram 子集。
开发
pnpm install
# 链接宿主提供的 peer 依赖,使本地 profile 安装可解析:
mkdir -p node_modules/@deepseek-ai
for p in "$HOME"/.dsh/profiles/node_modules/@deepseek-ai/*; do
ln -sfn "$p" "node_modules/@deepseek-ai/$(basename "$p")"
done
pnpm run typecheck && pnpm test && pnpm run build
dsh plugin --profile web add ./ # 本地安装;重启 dsh web 验证架构
插件分层以隔离 dsh 平台,业务逻辑在 dsh API 演进时保持不变:
flowchart TB
subgraph Biz["业务层——零 dsh import"]
HostBiz["src/host/ · core / actions / queries / parser"]
ClientBiz["src/client/ · controller / GitPill / GitCenter"]
end
subgraph Contracts["契约层——稳定接口"]
C["src/contracts/ · host-endpoints / client-platform / ui-primitives"]
end
subgraph Adapters["适配层——唯一感知 dsh 的代码"]
A["src/adapters/dsh/ · client-adapter / ui-primitives / types"]
end
HostBiz --> C
ClientBiz --> C
C --> A
A --> DSH["dsh 平台 · cordis / typert / ui-primitives"]src/contracts/— 插件自有的稳定接口,无 dsh importsrc/host//src/client/— 基于这些接口的业务实现src/adapters/dsh/— 唯一导入@deepseek-ai/*的地方;dsh 升级只改这里
