DeepSeek Harness 插件

dsh-git-ui

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.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
Julyves/dsh-git-ui
最近更新
2026年8月22日
分类
界面增强
GitHub stars
1
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/Julyves/dsh-git-ui
插件名:dsh-git-ui
作者:Julyves

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
README 语言

dsh-git-ui

![npm version](https://www.npmjs.com/package/dsh-git-ui) ![npm license](https://www.npmjs.com/package/dsh-git-ui) ![npm downloads](https://www.npmjs.com/package/dsh-git-ui)

DeepSeek Harness(dsh)Web UI 插件:在会话界面中可视化展示 Git 状态——会话头部的 Pill 一眼呈现当前分支(或游离 HEAD)与脏状态计数(已暂存/已修改/未跟踪)及领先/落后。点击查看最近提交与变更文件,或打开 Git 中心进行完整管理。无需切换终端。

> English version: README.md

  • 📦 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(右侧、每会话独立):状态点(干净为绿、脏为橙)+ 分支名 + 脏/领先落后徽标——点击展开详情面板:

<img src="docs/screenshots/01-pill面板内容展示.png" alt="会话头部分支 Pill 与展开的详情面板" width="720">

状态Pill 显示
------
干净● main
脏状态● main · +2 −1 ?3
领先/落后● main · ↑1 ↓2
游离 HEAD● (游离 HEAD) · a1b2c3d
unborn(无提交)● main · 无提交
非 git 仓库弱化显示 无 Git 仓库
git 不可用/出错弱化显示 Git 不可用(tooltip 显示原因)

+N −N ?N = 已暂存/已修改/未跟踪;↑N ↓N = 领先/落后。脏且领先落后时徽标合并(如 ● main · +2 −1 ?3 · ↑1 ↓2)。

  • 详情面板(点击 pill 展开):仓库根目录、状态计数(已暂存/已修改/未跟踪)+ 脏与领先落后徽标、最近提交(哈希·主题·作者·相对时间)、变更文件列表(状态 chip + 行内暂存/取消/丢弃操作)、分支内联切换、手动刷新按钮、上次检查时间:

<img src="docs/screenshots/02-面板选择切换分支.png" alt="详情面板内的分支内联切换" width="720">

  • Git 中心(从面板进入的管理面板):双标签——变更历史

- *变更*:IDE 式三段分组(已暂存/更改/未跟踪),单文件与全部暂存/取消暂存/丢弃(两步确认)、提交框(勾选文件或全部已暂存),以及选中文件的并排差异对照(前后导航)。 - *历史*:分页提交列表 + 分支图渲染,每条提交详情(主题·正文·变更文件树),按分支/标签/作者/日期/文本或哈希过滤,以及拉取远程按钮。

每次操作即时刷新状态:

<img src="docs/screenshots/03-Git中心统一阅览文件变更.png" alt="Git 中心——变更标签(分组文件变更)" width="720">

<img src="docs/screenshots/04-Git中心查看分支历史.png" alt="Git 中心——历史标签(提交列表与分支图)" width="720">

<img src="docs/screenshots/04-Git中心查看提交详情.png" alt="Git 中心——提交详情与变更文件树" width="720">

  • 数据自动保鲜,零操作:进入会话自动加载状态快照、静默轮询(间隔由主机下发,默认 30s,不重叠请求)、agent 完成一个回合后立即刷新(尽力而为——此时工作区最可能已变化)、断线重连 resync、面板内手动刷新。
  • 确定性降级:非 git 目录、无 cwd、git 缺失、超时、巨型仓库等边界显示稳定降级态——不崩溃、不刷屏。
  • 零 agent 影响:不给模型新增工具、不写会话事件,从不改变 agent 行为。Git 中心的写操作(暂存/提交/分支/拉取)均由用户从 UI 主动发起,绝非 agent 驱动。

安装

需要已安装 DeepSeek Harness(dsh)且使用 web profile。

# 从 npm registry 安装。
dsh plugin --profile web add dsh-git-ui

安装后重启 dsh web。在 git 仓库目录打开会话,头部即出现分支 Pill。

验证安装:

cat ~/.dsh/profiles/web/package.json   # dsh.profile.bundles 中应包含 dsh-git-ui

卸载:

dsh plugin --profile web remove dsh-git-ui

> 本地开发安装(把本仓库链接进 profile):dsh plugin --profile web add ./。 > 本地 tgz / 目录 / GitHub 直装(file:...tgzgithub:...)会把包以 symlink > 方式装进 profile,Node 沿真实路径解析时无法触达宿主提供的 @deepseek-ai/* > peer 依赖。本地安装时请保持本仓库 node_modules/@deepseek-ai/* 的 peer 链接 > 存在(步骤见 [开发](#开发))。

使用方式

1. 打开一个工作目录位于 git 仓库内的会话。 2. 随时扫一眼头部 Pill——无需任何操作。 3. 点击 Pill 查看仓库根目录、计数、最近提交与变更文件;点 刷新 立即重新检查,或打开 Git 中心进行完整变更管理与历史浏览。

每个会话显示自己工作目录的 Git 状态;非仓库会话显示弱化占位而非 Pill。

配置(可选)

默认零配置开箱即用。高级用户可在 profile 的 cordis.patch.yml 中覆盖插件配置(后层覆盖,整行替换 config):

- id: git-ui
  config:
    defaultRefreshIntervalMs: 60000   # 轮询间隔(毫秒);0 = 关闭轮询
    maxChanges: 200                   # 快照中变更文件条数上限
    timeoutMs: 3000                   # 单条 git 命令超时(毫秒)
    maxStatusBytes: 8388608           # status 输出上限,超出截断

环境要求

  • Node.js ^22.19.0 || >=24.0.0
  • dsh >= 0.1.0-rc(开发者预览版)
  • 主机可执行 git(插件通过子进程调用 git 命令)

已知限制

  • 仅展示会话工作目录的 Git 状态。历史页的过滤树列出远程分支、领先/落后与手动拉取,但不暴露 push / pull / merge。
  • 轮询式刷新(默认 30s);基于文件监听的事件推送为规划中的扩展。
  • 变更文件列表有上限(maxChanges);未跟踪目录内部文件逐个枚举。status 输出超过内存上限(默认 4 MiB)时会从私有 spill 文件恢复完整输出,计数保持精确——仅当 spill 上限(64 MiB)也被突破时才回退为近似(truncated: true)。
  • 浏览器只传 sessionId,不传路径;主机解析权威 cwd 并执行 git 命令(写操作用 -- 路径分隔、拒绝绝对路径与 .. 逃逸)。

开发

pnpm install
# 把宿主提供的 peer 依赖链接进仓库,本地 `dsh plugin --profile web add ./` 才能解析:
# pnpm 以 symlink 把包装进 profile,Node 沿真实路径回到本仓库,
# 因此 node_modules/@deepseek-ai/* 需要指向宿主的 fallback 目录。
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        # host(esbuild ESM,禁止压缩)+ client(ModuleLoader factory 闭包)
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 import)。
  • src/host/src/client/ 基于这些接口实现业务逻辑。
  • src/adapters/dsh/唯一 import @deepseek-ai/* 的地方;

dsh 升级只需修改此处。

许可证

[MIT](LICENSE)