dsh-git-workbench:在 DSH 对话旁做 JetBrains 式 Git 工作台

前言

在 DeepSeek Harness(DSH)里改代码、跑智能体时,版本控制往往仍要切到终端或外部 GUI:看 diff 要另开窗口,暂存粒度粗,提交前很难一眼确认「哪一行进了 index、这次 commit 会落在哪条分支」。DSH 侧栏本就可扩展为类似 IDE 工具窗;若把 Local Changes、提交窗、历史图和 diff 嵌进 Web 会话界面,就不必在对话与 Git 之间来回切换。下面介绍社区插件 @yann9/dsh-git-workbench(GitHub:yann9/dsh-git-workbench),维护者为 yann9,分类为客户端插件,在 DSH 内提供接近 JetBrains 工作流的 Git 能力。

这是什么

dsh-git-workbench 是面向 DSH 的 JetBrains 风格 Git 工作台:Local Changes 树、hunk/行级 staging、并排 diff、提交窗、提交图、annotate、交互式 rebase、shelve、三路冲突视图等,与对话同屏使用。README 写明其目标不是「能 commit 就行」,而是像 IDEA 一样看清哪行变了、哪个 hunk 被 stage、commit 会落在哪条分支。

界面映射关系(资料原文):

JetBrains 插件中 内容
Commit 工具窗 Commit 标签 变更树、changelist、冲突、提交说明、AI / Recent / Checks / Amend
Log 工具窗 History 标签 提交图、提交详情、文件列表(只读)
编辑器 Diff 标签 主区 Diff 视图 并排/统一视图、hunk 与行级 staging、annotate、冲突视图

Diff 在主区以单例标签打开(再开文件会替换内容,不堆叠)。Commit 与 History 各自保留选中、滚动、过滤和草稿;Diff 是否可写由 source 决定(working 可写,commit / turn 只读)。仓库跟随会话 cwd,换会话即换仓库;并接入会话头部分支 chip、新建会话 hero 的分支选择、回合卡片与 Files 上的 Git 按钮、以及 composer 上方的 change bar。

核心功能

以下均来自 GitHub README 与文档索引,未在资料中出现的细节不写。

Staging 与 diff

  • 整文件、hunk(裁剪 patch 后 git apply --cached)或单行 staging;unstage 同样精细;提交始终基于 index。
  • 并排/统一 diff、双行号、词级高亮、只读模式下可忽略空白、上下文折叠、文件 ‹ n/m › 导航与 F7 hunk 导航。

提交与检查

  • Ctrl+Enter 提交、AI 起草说明、↑ 回忆历史说明、amend、changelist;提交前检查可读取仓库 package.json 中的 scripts。

History 与改写历史

  • DAG 图、可排序可调列宽、按分支/作者/日期分组;结构化过滤(author:、message:、hash: 等);多选批量 cherry-pick / revert。
  • 交互式 rebase(pick/squash/fixup/drop)、reword、undo commit、cherry-pick、revert、soft/hard reset,均需明确确认。

分支、远程与冲突

  • 切换/创建/重命名分支、↑N ↓N ahead/behind、upstream、compare、rebase onto、fetch/pull/push、管理 remote。
  • 未合并变更单独分组;三路冲突视图可逐块选择或手写合并结果;merge/cherry-pick/rebase 暂停时状态栏 continue/abort。

其他

  • Stash(命名 + 选文件,部分 stash 用临时 index);Git console 记录真实 argv、退出码、耗时与输出;空目录一键 git init;双语 UI 跟随 DSH 语言偏好。
  • /dsh-git/ 仅提供 JSON API 与 SSE,无独立页面(见 docs/api.md)。
  • 与 JetBrains 的 50+ 项对照见 docs/features.md。

常用快捷键(节选):

操作 快捷键
刷新 F5
提交 Ctrl/Cmd + Enter
聚焦提交说明 Ctrl/Cmd + K
用模型起草说明 Ctrl/Cmd + G
上/下一个文件 Alt + ↑ / Alt + ↓
上/下一个 hunk Shift + F7 / F7

安装与启用

依赖:git 在 PATH 上、Node ^22.19.0 || >=24.0.0、pnpm,以及 DSH 0.2.1-rc.2 或更新。npm 包名 @yann9/dsh-git-workbench(package.json 当前版本 0.1.6),许可证 MIT。

从 npm 安装并启动 Web profile:

# install from npm
dsh plugin --profile web add @yann9/dsh-git-workbench

# the bundle layer is read at startup only
dsh web

执行 dsh web 后打开终端打印的 ?token=... URL。侧栏 + 引导页可添加 Commit、History 标签;会话头部分支 chip 默认可用。

若 link: / file: 安装时 profile 未自动注册 bundle,可手动写入(效果同 plugin add):

"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@yann9/dsh-git-workbench"] } }

本地开发可用 link:(需自行维护 bundle 条目,重启 dsh web 即可生效);file: 会复制代码,改代码需再次 add。

升级与移除(均需重启 dsh web):

dsh plugin --profile web add @yann9/dsh-git-workbench@latest
dsh plugin --profile web remove @yann9/dsh-git-workbench

配置

可在 Settings → Plugins → Git workbench 编辑,或在 profile 的 cordis.patch.yml 中 patch。未写的键使用下列默认值(摘自 README):

- insert:
    - id: git-workbench
      name: '@yann9/dsh-git-workbench'
      config:
        repoPath: ''                   # fallback repo when there is no session cwd
        maxLog: 400
        readOnly: false                # true = every write API returns 403
        branchPattern: 'session/{date}-{time}'
        confirmDirtySwitch: true
        diffFullFile: true
        diffWrap: true
        diffFoldThreshold: 8
        diffSideBySide: true
        listMode: 'last'               # 'tree' | 'flat' | 'last'
        commitLanguage: 'auto'         # 'auto' | 'zh' | 'en'
        llmProvider: ''                # empty: the route DSH has selected
        llmModel: ''                   # empty: that route's selected model

readOnly: true 时工作台变为只读审查:staging、提交、分支、网络与冲突解决均禁用,写 API 返回 403(/config 除外)。

典型用法

  1. 按上文命令安装并 dsh web,在浏览器打开带 token 的地址。
  2. 在侧栏通过 + 打开 Commit、History;在会话对应仓库目录下工作,变更出现在 Local Changes 树中。
  3. 点击文件在主区打开 Diff;按需做 hunk 或行级 stage,填写说明或用 Ctrl/Cmd + G 让模型起草,确认 staged 内容后 Ctrl/Cmd + Enter 提交。
  4. 在 History 查看提交图与详情;冲突时在 Commit 视图的未合并分组进入三路视图处理,sequencer 暂停时用状态栏 continue/abort。
  5. 需要只读审查时,在设置中将 readOnly 设为 true。

中文 README 见仓库 README.zh.md;架构与设计说明见 docs/architecture.md、docs/jetbrains-parity.md。

适用场景与注意

适合谁:习惯 IntelliJ IDEA / JetBrains 系 Git 工具窗、希望在 DSH Web 会话旁完成精细 staging、diff、提交与历史操作的开发者。

生态说明:DSH 采用「一切皆插件」的扩展方式;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不将其描述为官方应用商店。

安全与权限:插件在 当前 DSH 进程权限 下执行真实 git 命令(Git console 会记录 argv 与输出)。安装前请自行查看 GitHub 源码 与 MIT 许可证,仅在可信环境启用写操作;生产或敏感仓库可先用 readOnly: true 做只读浏览。

结尾

@yann9/dsh-git-workbench 把 Commit、History 与主区 Diff 嵌进 DSH Web,用 hunk/行级 staging、并排 diff、提交图与三路冲突视图,减少在对话、终端与外部 Git 客户端之间的切换。安装与配置以 README 为准;目录页:https://www.skillhub.cn/plugins/yann9/dsh-git-workbench,仓库:https://github.com/yann9/dsh-git-workbench。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye