dsh-git:在 DeepSeek Harness 里完成暂存、提交与 diff

前言

在 DeepSeek Harness(DSH)里和模型对话时,工作区往往已经绑定了某个 Git 仓库。改完代码若还要切到终端做 git status、看 diff、写提交说明,上下文会被打断。DSH 社区里也有其它做法,例如在侧边栏单独挂工具页;dsh-git(维护者 Weidows,npm 包名 @weidows/dsh-git)把仓库名、分支、变更列表、提交历史和 patch 收进 Composer 芯片、会话顶栏按钮和右侧分栏面板,尽量在同一界面里走完常见 Git 操作。

这是什么

dsh-git 是面向 web profile 的 DSH 客户端插件:在 Composer 尾部展示「仓库 / 分支」芯片,在已打开会话的顶栏提供 Git 入口,并在右侧边栏提供分屏 Git 面板(变更与暂存、历史、diff)。Host 侧通过 POST /plugins/dsh-git/api/<method> 调用本机 git(execFile,不走 shell),并受 Harness 连接与 working directory 约束。当前资料中的版本为 0.7.0,许可证 MIT,要求 dsh >= 0.2.0。

核心功能

Composer 分支芯片

芯片位于 Composer 右侧控件簇中(模型选择与会话统计左侧),示意形态如下:

main-repo / feature/login   ↑2

显示仓库名、当前分支、ahead/behind 标记,以及工作区脏状态圆点;点击可打开 Git 面板。

会话顶栏 Git 按钮

在已打开会话右上角工具行提供与芯片相同的打开面板动作。

右侧分屏 Git 面板

布局大致为:

+----------------------+----------------------+
| changes + staging    | history              |
|  staged / unstaged   |  branch + filter     |
|  [ AI ] [ ] [commit] |  expandable commits  |
+----------------------+----------------------+
| diff                                       |
+--------------------------------------------+
  • 左上:已暂存与未暂存文件,按仓库目录树折叠展示(非扁平列表)。可对单文件或全部 stage/unstage;对已跟踪文件的 discard 需内联确认;可填写提交说明,或用 AI 生成(使用 Harness 默认模型,未配置模型时会给出明确错误)。Ctrl/Cmd+Enter 提交。
  • 右上:提交历史,含分支切换、文本过滤、左侧连续分支轨线、可展开查看单次提交涉及文件;右键菜单支持复制 hash、reset --soft/mixed/hard、revert。行内 ref 芯片区分 HEAD、本地分支、远程跟踪、标签等;下方显示 short hash · author · age。
  • 底部:展示当前选中项的 unified diff——工作区文件、暂存文件,或某次提交中的单个文件 patch(仅该文件,非整次提交)。

视口宽度低于 720px 时,两列网格会堆叠为「变更 → 历史 → diff」单列,各 pane 独立滚动,并针对触控调整布局与可点区域。

与 dsh-better-sidebar 的配合

若已安装 dsh-better-sidebar(peer 依赖 >=0.28.0,可选),插件优先通过 ctx.betterSidebar.registerTab 注册面板(order 25,单实例),并跳过原生右侧标签,避免出现两个 Git 标签。未安装 better-sidebar 时回退为普通右侧边栏标签。

其它插件也可打开同一面板,例如:

ctx.betterSidebar.openTab({ type: "dsh-git-by-weidows", title: "Git by@Weidows", meta: { cwd } }, { sessionId })

Host API 概览

请求体为 JSON,成功返回 { ok: true, data },失败返回 { ok: false, error: { message } };非 Harness 连接会收到 403。常用 method 包括:state、diff、log、commit、commit-files、commit-file、stage / unstage、discard、commit-create、branches、checkout、reset、revert、suggest(基于 staged/working diff 生成提交说明)。单次 git 输出上限 24 MB。

安装与启用

客户端插件在 Harness 启动时加载,安装后需重启。

# from npm (scoped: the unscoped name dsh-git belongs to another author)
dsh plugin --profile web add @weidows/dsh-git

# from source
dsh plugin --profile web add github:Weidows/dsh-git

说明:未 scoped 的 dsh-git npm 名属于另一位作者,安装时应使用 @weidows/dsh-git。

典型用法

  1. 安装并重启 DSH 后,打开绑定 Git 工作区的会话。
  2. 在 Composer 右侧查看分支芯片上的仓库名、分支与 dirty 状态;需要完整操作时点击芯片,或使用会话顶栏 Git 按钮。
  3. 在面板左上按目录树 stage 文件、填写或 AI 生成 commit message,Ctrl/Cmd+Enter 提交。
  4. 在右上浏览历史、切换分支、过滤提交;对某次提交展开文件列表,在底部查看 diff;必要时通过右键菜单 copy hash 或执行 reset/revert(均为面板内显式点击,见下文安全说明)。
  5. 若同时使用 dsh-better-sidebar,Git 会出现在 better-sidebar 的标签体系中,而不是重复的原生 Git 标签。

适用场景与注意

适合:在 DSH web 界面内频繁查看 diff、暂存、提交、翻历史的开发者;希望 Composer 上始终可见分支与工作区状态的用户。

安全与权限:

  • 插件以 当前 DSH 进程权限 在会话 working directory 内执行 git;安装前建议阅读 GitHub 源码 与 MIT 许可证,确认行为符合预期。
  • reset --hard、revert、discard 为破坏性操作,仅能通过面板内明确点击触发;revert 若冲突会用 git revert --abort 回滚,避免工作区停在合并中间态。
  • 不会 discard 未跟踪文件,面板也不会对未跟踪文件显示 discard。
  • 不启 shell、不交互式要凭证(GIT_TERMINAL_PROMPT=0),不读取会话 working directory 之外的路径。

DSH 生态强调「一切皆插件」;社区目录(如 dsh-plugin.org 与 skillhub.cn 插件页)为独立收录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-git 把分支状态、暂存区、提交历史与 diff 嵌进 Harness 的 Composer 与侧边栏,减少在终端与 Web UI 之间来回切换。进一步了解可访问插件目录页与仓库:

  • 目录页:https://www.skillhub.cn/plugins/Weidows/dsh-git
  • GitHub:https://github.com/Weidows/dsh-git
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜