前言¶
在 DeepSeek Harness 里改完代码,常见做法是再开一轮对话,让模型写 commit message、跑 git commit,对话里会多出 command 节点和工具调用;模型传输一旦失败,还可能把「半成品的提交意图」留在会话里。若工作区改动跨多个目录、类型混杂,手工拆成若干次 Angular 风格提交也费时。
下面介绍社区插件 DSH Git Commit(@eternalheart/dsh-git-commit,维护者 wh131462,GitHub:wh131462/dsh-git-commit)。它在 Composer 工具栏提供 提交 / Commit 按钮:读取 Git 或 SVN 工作区、按 Angular 的 type/scope 分组、用当前会话模型为每组生成 message,经确认后由插件自身走宿主 JSON 通道执行提交,不追加聊天消息、不占用 agent 回合、不插入 command 节点。
这是什么¶
DSH Git Commit 是 DeepSeek Harness 的工作流类插件(社区目录分类:工作流)。npm 包名 @eternalheart/dsh-git-commit,当前资料中版本 2.0.1,许可证 MIT,运行时要求 Node >= 20。
交互流程(README 原文):
click → dialog opens immediately → git/svn status → type/scope buckets
→ one model call (progress inside the dialog) → edit → commit
Git 仓库与 SVN 工作副本均支持;配置项 vcs: auto 自动选择(git-svn 检出时优先 Git),也可用 vcs: git / vcs: svn 固定。
核心功能¶
对话框内可见进度¶
点击后对话框立即打开,依次出现「Reading the working tree」、「Naming N groups with \<model>」、「Committing」。关闭对话框会中止仍在进行的模型调用。
Git 与 SVN¶
Git 提交对每组只 stage 明确路径;SVN 对新文件先 svn add 再按路径提交,每组一次 revision。未解析的 SVN 冲突会在分析阶段拦截,插件不会代你执行 svn update。
Angular 规范与校验¶
分组命名由模型完成;header 不符合 Angular 规则时会规范化,并最多进行 README 所述的一轮 targeted repair;仍失败则该组留空并阻止提交,不会静默退回通用文案。宿主侧强制执行 @commitlint/config-angular:每组一个 type、header ≤ 72、subject ≤ 50、显式路径,禁止 --amend / --force / --no-verify。
不经过对话与 command 节点¶
按钮调用插件在宿主上的 JSON 通道,不追加 command/run 节点、不写聊天消息、不跑 agent 工具。
确认前可编辑、提交前全量校验¶
每组 message 可在 textarea 中修改;路径、文件数、跳过的敏感文件与模型说明均可见。在第一组写入 VCS 之前校验所有 message,避免第 3 组 header 非法时前两组已经提交。
Git 安全 staging¶
不会把提交前已存在的 index 与本次分组混用;若检测到 staged 文件,对话框会列出路径并提示 release 后继续。某组失败时会把该组从 index 撤出,便于重试。
分组过期检测¶
确认提交前会重新读工作区;若分组与编辑期间不一致,会要求重新分析,避免用旧 message 提交新文件集合。
敏感路径跳过¶
.env*、*.pem、*.key、*.p12、*.pfx、*.keystore、*.jks、id_rsa* 等会被排除并报告;.env.example / .sample / .template 仍允许。
其他¶
中英文 UI、主题 token、焦点与 Escape、无障碍 dialog 属性;宿主侧零运行时 npm 依赖(Node 内置模块),客户端 React 来自 Harness 模块表。
安装与启用¶
DeepSeek Harness 下安装(命令来自 README):
# from npm
plugin_manager install_bundle target: "@eternalheart/dsh-git-commit"
# from GitHub
plugin_manager install_bundle target: "github:wh131462/dsh-git-commit"
# from a local tarball
plugin_manager install_bundle target: "/absolute/path/eternalheart-dsh-git-commit-<version>.tgz"
也可在 Web 侧栏 Plugins → Add plugin 粘贴相同 spec。插件装入当前 profile,对该 profile 下所有会话生效。
依赖与前提(README Requirements):
- Harness 标准宿主服务:
webServer、connection、sessions、workingDirectory、llm、agentDefaultModel及客户端插槽。 git和/或svn在PATH上;插件还会探测/usr/bin/git、/opt/homebrew/bin/git、/usr/local/bin/git及对应 svn 路径,便于 Finder 启动的应用找到二进制。- 生成语义化 message 需要可用模型路由;若
useModel: false,则跳过模型,全部手写 message。
典型用法¶
- 在 Composer 工具行点击 提交 / Commit,对话框立即显示「Reading the working tree…」。
- 宿主执行
git status或svn status --xml并分组;对话框列出各组的同时,会话当前模型为每组命名(慢模型时进度条与按钮保持 busy)。 - 审阅并编辑每组 message(下方可见模型建议、路径与文件数)。
- 点击 确认提交 / Commit:宿主重新分析、确认分组未变、校验全部 message 后按组提交。
- 结果展示在对话框内;失败时可 重新分析 / Analyze again。提交过程中关闭对话框会中止;非 committing 状态下
Escape、遮罩或关闭按钮可 dismiss。
阶段与失败行为见 README 表格:analyzing(干净树或非仓库会关对话框并提示)、naming、edit、committing(含 stale / staged-index 冲突需重分析)、done。
配置¶
在 profile 的 cordis.patch.yml 中覆盖插件行(节选):
- id: smart-commit
name: '@eternalheart/dsh-git-commit'
config:
vcs: auto # auto | git | svn
gitPath: ''
svnPath: ''
timeoutMs: 20000
maxGroups: 6
useModel: true
modelTimeoutMs: 60000
maxInputChars: 24000
maxTokens: 2000
repairRounds: 1
| 字段 | 默认 | 含义 |
|---|---|---|
vcs |
auto |
优先 Git,否则 SVN;git / svn 固定适配器 |
gitPath / svnPath |
空则自动探测 | 可指定二进制路径 |
timeoutMs |
20000 |
单次 git/svn 调用超时 |
maxGroups |
6 |
超过时分组策略见 README(资料截断处说明 whole type) |
useModel |
true |
false 时全部手写 message |
modelTimeoutMs |
60000 |
模型调用超时 |
maxInputChars |
24000 |
输入字符上限 |
maxTokens |
2000 |
生成长度上限 |
repairRounds |
1 |
header 修复轮数 |
适用场景与注意¶
适合在 Harness 内日常开发、希望把「分组 + 规范 message + 实际 commit」收成 Composer 一键流程的开发者,尤其是 monorepo 或多 scope 改动需要拆成多条 Angular 风格提交时。
安装前建议自行阅读 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程权限执行 git/svn,与你在终端里同一用户身份操作仓库等价。社区目录 skillhub.cn 插件页 与 DeepSeek / 幻方无官方从属关系,仅为社区收录站点。
结尾¶
DSH Git Commit 把 Angular 分组、模型命名与 VCS 执行收进 Composer 对话框,减少为提交多开 agent 回合。进一步了解可访问社区目录页与 GitHub README(含 README_CN.md)。