前言¶
在 DeepSeek Harness(DSH)里用智能体改代码,工作区状态往往会在对话区和终端之间来回切换:要看改了哪些文件、要不要 stage、commit 写什么、本地分支相对 upstream 是 ahead 还是 behind,通常得另开终端或 IDE。模态弹层盖住对话时,上下文也会被打断。
下面介绍社区插件 tu1918/dsh-git-plugin(npm 包名 @tutu1918/dsh-git-panel)。它在 DSH Web GUI 右侧边栏占一个常驻标签页,直接针对当前 session 工作区做变更浏览、暂存、提交与同步,无需离开 DSH,也不用全屏遮罩盖住会话。
这是什么¶
- 定位:DSH Web GUI 的 Git 面板(resident right-sidebar tab),用于 review、stage、commit、sync session workspace。
- 维护者:tu1918(package.json 作者字段为 tujunwenjie)。
- 分类:客户端插件(
dsh.client.platform为web,注入右侧边栏、会话等客户端模块)。 - 版本与许可:资料中 package.json 为 1.0.1;GitHub README 写明以 v1.0.0 作为功能基线发布;许可证 MIT。运行环境要求 Node.js >= 22。
- 社区目录:SkillHub 插件页(独立社区站点,与 DeepSeek / 幻方无官方从属关系;页面标注可安装客户端、v1.0.1)。
- 源码:github.com/tu1918/dsh-git-plugin(README 中 GitHub 星标为 0)。
DSH 生态强调「一切皆插件」;本插件通过 Cordis bundle(cordis.patch.yml)挂入 Web 客户端,后端通过 /git-panel/* 提供实时的 git status、分支与 log。
核心功能¶
以下均来自项目 README「What works today」及版本说明,按使用路径归纳。
变更与提交¶
- 变更列表:按 git 分组展示 staged / changes / untracked / conflicts;每行有文件类型 glyph,右侧状态字母(如 untracked 为
U,冲突带 VS Code 风格!)及 tooltip。 - 视图模式:同一列表可切换文件树(目录折叠、单子目录链压缩为一行、目录显示子树文件数)或扁平列表;偏好按用户记忆。
- 暂存:单文件或整组 stage / unstage。
- 提交区:提交范围明确——仅 index,或全部已跟踪变更(按钮文案会说明范围与数量);上方有常驻 staged 抽屉,与提交框内容一致。
- 提交信息:支持 AI 撰写 commit message(依赖
@deepseek-ai/dsh-llm等 peer)。 - 同步:Pull ↓、Push ↑n、Sync ⇅;首次 push 可设置 upstream;非 fast-forward 拒绝时会引导使用 Sync。
- Fetch:在 Pull 旁单独 fetch 所有 remote(不改动工作区、index 或当前分支),用于更新 remote-tracking 与 ahead/behind 计数;无 remote 时会明确提示而非静默成功。
分支与历史¶
- 分支栏:分支名,detached / unborn / upstream 丢失等状态,以及 ↑ahead ↓behind。
- 分支选择器:含 remote-tracking 分支只读区块(显示如
origin/feature及 tip subject);检出 remote 分支涉及 rebase/冲突,有意不在此一键 checkout。 - 最近提交:lookahead 分页;已 push / 未 push 标记;仅在对应标签可见时只读加载。
- 历史行装饰:本地分支、remote-tracking(如
upstream/main)、标签(如v0.2.9)以 badge 展示,最多三个再加+N。 - 历史操作(README 版本说明):revert、cherry-pick、reset、squash、drop 等;commit graph、单文件 drill-down、copy entries;discard / undo / stash(M5)均已交付。
- Diff:diff 视图;两段 hunk 之间被 git 省略的行可逐次展开(A-12)。
刷新、多仓库与凭据¶
- 自动刷新:对工作树与
.git目录做递归 watch,经 SSE 推送refs/index/worktree变化;智能体直接写文件也可反映到面板。不支持 watch 时用 state-file 轮询,再不行则stat同一批文件。 - 多仓库工作区(FR-8):session 目录为容器而非单一 repo 时,向下一层扫描 git 仓库(跳过点目录、
node_modules、dist、build);仅当存在多个 repo 时出现选择器,默认选最近有 git 活动的 repo,选择按容器记忆。 - HTTPS 凭据:需要认证且无凭据时返回
auth-required并可填用户名/密码,「保存并重试」经 harness 的ctx.credentials存储后通过GIT_ASKPASS重试;GIT_TERMINAL_PROMPT=0避免终端挂起。 - 超时与特殊挂起:git 操作有端到端 deadline;GPG 签名等待 pinentry、SSH 等待口令或 host key 会分别识别为
gpg-prompt/ssh-prompt等,而非笼统超时。 - 界面语言:中文与英文。
操作边界¶
任一 git 变更若超出 deadline,结果会标为 unknown(git 可能仍在跑),面板会重新读取仓库状态而不是误报成功。mutation 与浏览器、host 均携带各自的 deadline。
安装与启用¶
已抓取资料中的 package.json 与 SkillHub 目录页给出包名与版本,未包含可直接复制的 dsh plugin … 安装命令;请勿自行拼接 github:tu1918/dsh-git-plugin 等形式。
- 打开 SkillHub:tu1918/dsh-git-plugin,按页面「可安装 / 客户端」指引完成安装(包名为
@tutu1918/dsh-git-panel)。 - 安装前确认 DSH Web 版本满足插件 peer 依赖(如
@deepseek-ai/cordis、@deepseek-ai/dsh-credentials、@deepseek-ai/dsh-llm等,见 package.json)。 - 启用后重启或刷新 DSH Web(若你的环境要求),在绑定 git 仓库的 session 中打开右侧边栏,选择 Git 相关标签页(README 截图说明为右侧边栏中的一个 tab)。
插件以当前 dsh 进程权限运行;安装前请自行审阅源码与 MIT 许可证,并理解其对工作区与 remote 的读写能力。
典型用法¶
README 未给出逐步教程,结合面板设计,可复现的日常流程如下:
- 在 DSH 中打开指向 git 仓库(或含多个 repo 的容器目录)的 session。
- 打开右侧 Git 面板:查看 Changes / Untracked(同一滚动列表,分区 header 吸顶)与 Staged 抽屉。
- 对需要纳入本次提交的文件执行 stage;在提交框确认范围(仅 index 或全部已跟踪变更),填写或生成 commit message,提交。
- 用分支栏查看与 upstream 的 ↑↓;需要时 Fetch 更新 remote-tracking,再 Pull / Push / Sync。
- 点击某文件或历史行进入 diff 或 commit 详情;需要时在历史行上执行 revert、cherry-pick 等(注意冲突会进入 conflicts 分组)。
- 多 repo 容器下,在分支栏旁的 repo 选择器切换目标仓库(仅能选 host 扫描到的根目录)。
远程使用 HTTPS 且缺凭据时,按面板提示保存凭据后重试同一操作;GPG/SSH 相关挂起需按返回码说明配置 gpg-agent、ssh-agent 或在终端预先信任 host。
适用场景与注意¶
适合:主要在 DSH Web 里驱动智能体改代码、又希望不离开会话完成「看 diff → stage → commit → push/pull」的开发者;需要一眼看到分支与 upstream 关系、近期 commit 与 graph 的场景;monorepo 式容器目录下管理多个 git 根。
注意:
- 插件分类为客户端,能力绑定 Web GUI 与 session 工作区,不是独立 CLI。
- 所有 git 与凭据操作继承 dsh 进程权限;仅安装你信任的来源,并阅读 Issues 与
docs/TODO.md、docs/plan.md了解未交付项与里程碑偏差。 - Remote 分支检出、合并冲突等复杂流程设计在冲突视图与专用流程中处理,而非分支选择器一键完成。
- SkillHub 为社区目录,安装步骤以该页当时展示为准;版本以你安装的 package 与目录页标注为准(资料中为 1.0.1)。
结尾¶
tu1918/dsh-git-plugin 把 Git 工作流收进 DSH Web 右侧常驻面板:变更分组、暂存提交、diff、分支与 upstream、fetch/sync,以及多仓库与凭据 seam,目标是减少在对话、终端和外部 Git UI 之间来回切换。