🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

分组提交 wh131462/dsh-git-commit

DeepSeek Harness
wh1314622 天前有提交已提供中文文档扫描:含敏感能力

按 Angular 规范分组并生成提交信息,一键完成提交

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wh131462/dsh-git-commit
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 读取本地文件
    index.js:133
    if (candidate === 'git' || existsSync(candidate)) return candidate;
  • 执行外部命令来自配置/变量
    index.js:161
    child = spawn(bin, ['-C', cwd, ...args], {
  • 读取本地文件
    index.js:625
    const text = await readFile(path, 'utf8');
  • 写入本地文件
    index.js:952
    await writeFile(file, message, 'utf8');
  • 删除本地文件递归
    index.js:965
    if (directory !== undefined) await rm(directory, { recursive: true, force: true }).catch(() => {});
  • 发起网络请求
    client.js:202
    response = await fetch(endpointUrl(endpoint), {
  • 读取本地文件
    svn.js:43
    if (candidate === 'svn' || existsSync(candidate)) return candidate;
  • 执行外部命令来自配置/变量
    svn.js:70
    child = spawn(bin, ['--non-interactive', ...args], {
  • 读取本地文件
    svn.js:278
    const info = await lstat(join(root, path));
  • 读取本地文件
    svn.js:300
    children = await readdir(join(root, current), { withFileTypes: true });
  • 写入本地文件
    svn.js:461
    await writeFile(file, message, 'utf8');
  • 删除本地文件递归
    svn.js:476
    if (directory !== undefined) await rm(directory, { recursive: true, force: true }).catch(() => {});
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 一键分组提交插件:Angular 规范分组、当前模型生成 message、插件直接执行 git 提交

README

由 DeepSeek 最新模型翻译生成
DSH Git Commit · English DSH Git Commit 是 DeepSeek Harness 插件,把输入框变成一键提交,提交信息由模型命名。它会识别 Git 或 SVN,按 Angular 类型和 scope 给工作区分组,用会话当前模型给每组命名,你确认后由它自己执行 VCS 命令——不发聊天消息,不跑智能体回合,不调用工具。 界面 click → dialog opens immediately → git/svn status → type/scope buckets → one model call (progress inside the dialog) → edit → commit 同一套流程在 Git 仓库和 SVN 工作副本里都能用;vcs: auto 自动选一个,vcs: git / vcs: svn 则固定用哪个。 ┌ Confirm commit ─────────────────────────────────────────── × ┐ │ 5 groups / 79 files · main · GIT │ │ ⟳ Naming 5 groups with deepseek-official/deepseek-flash…
展开完整文档(README 剩余 1 节)
DSH Git Commit

· English

DSH Git Commit 是 DeepSeek Harness 插件,把输入框变成一键提交,提交信息由模型命名。它会识别 Git 或 SVN,按 Angular 类型和 scope 给工作区分组,用会话当前模型给每组命名,你确认后由它自己执行 VCS 命令——不发聊天消息,不跑智能体回合,不调用工具。

界面

click → dialog opens immediately → git/svn status → type/scope buckets
→ one model call (progress inside the dialog) → edit → commit

同一套流程在 Git 仓库和 SVN 工作副本里都能用;vcs: auto 自动选一个,vcs: git / vcs: svn 则固定用哪个。

┌ Confirm commit ─────────────────────────────────────────── × ┐
│ 5 groups / 79 files · main · GIT │ │ ⟳ Naming 5 groups with deepseek-official/deepseek-flash… │ │ 1 build(backend-coal-mind-agent): 更新镜像权限 │ │ backend/coal-mind-agent/Dockerfile 1 file │ │ 2 docs: 重写智能分组提交说明 │ │ AGENTS.md, README.md 11 files │ │ 3 refactor: 调整工作流调用 │ │ apps/web/..., backend/... 53 files │ │ ⚠ 1 staged file: release exactly those paths to continue │
│ [Cancel] [Commit] │
└───────────────────────────────────────────────────────────────┘

功能

- 进度看得见,就在对话框里。 点一下对话框立刻打开:先显示「Reading the working tree」,再显示「Naming N groups with <model>」,最后显示「Committing」。关掉对话框就中止模型调用。
- Git 和 SVN。 两者都存在时(git-svn 检出),auto 优先选 Git,否则用 SVN 工作副本。Git 提交时按明确路径暂存;SVN 提交时先用 svn add 登记新文件,再按明确路径提交,每组一个 revision。
- 提交信息始终有语义。 每组都由模型命名。标题不符合 Angular 规则会先规范化,再走一轮针对性修复重试;仍然不合格,该组就留空并阻止提交,绝不悄悄退回通用文案。
- 不跑智能体回合,也不发命令。 按钮直接调用插件在宿主上的 JSON 通道,所以不会追加 command/run 节点,不会新增聊天消息,不会运行工具,模型传输失败也不会让提交卡在对话里。
- 规则写在代码里。 由宿主强制执行 @commitlint/config-angular:每次提交只能有一个 type,header ≤ 72,subject ≤ 50,路径必须显式指定,禁用 --amend / --force / --no-verify。
- 确认对话框可编辑。 写入任何内容之前,你都能检查并改写每条消息;路径、文件数、跳过的敏感文件、模型备注全都可见。所有消息都会在第一个分组提交前完成校验,因此第 3 组的 header 有问题时,不会让第 1–2 组已经提交出去。
- 安全暂存(Git)。 已存在的索引绝不会混进来——对话框会列出这些具体路径,你可以把它们移出索引,同时保留工作区内容。失败的分组会从索引中移回,让下一次尝试从干净状态开始。
- 过期计划会被拒绝。 提交时会重新读取工作树;如果你编辑期间文件分组变了,插件会要求你重新分析,而不是拿旧消息去提交另一批文件。
- 冲突感知(SVN)。 有未解决的冲突时,分析会在写入任何内容之前停下,插件也绝不运行 svn update:是否合并由你决定。SVN 提交失败时,只撤销本次运行执行的 svn add,磁盘上的文件全部保留。
- 跳过敏感文件。 .env、.pem、.key、.p12、.pfx、.keystore、.jks、id_rsa 会被排除并报告(.env.example / .sample / .template 仍然允许)。
- 双语且可访问。 中英文 UI 文案,主题 token 样式,焦点与 Escape 处理,role="dialog" + aria-modal。
- 零运行时依赖。 宿主侧只用 Node 内置模块;客户端侧从 Harness 模块表拿 React。

安装

DeepSeek Harness

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。插件会安装到当前配置档,并对该配置档里的每个会话生效。

环境要求

- DeepSeek Harness,带标准宿主服务(webServer、connection、sessions、workingDirectory、llm、agentDefaultModel)和客户端插槽。
- PATH 里有 git 和/或 svn;插件还会探测 /usr/bin/git、/opt/homebrew/bin/git、/usr/local/bin/git、/usr/bin/svn、/opt/homebrew/bin/svn、/usr/local/bin/svn,所以从 Finder 启动的应用也能用。
- 一条可用的模型路由,用来生成语义化消息。设 useModel: false 可跳过模型,每条消息都手写。

用法

1. 在输入框工具行点击 提交 / Commit。对话框立刻打开,显示「Reading the working tree…」。
2. 宿主读取 git status / svn status --xml,按路径分组;随后对话框显示这些分组,由会话的模型为它们命名。模型较慢时,进度横幅会一直显示,按钮保持忙碌状态。
3. 检查每条消息——每条都是可编辑的 textarea,下方带路径、文件数和模型建议。
4. 按 确认提交 / Commit。宿主重新分析工作区,检查分组是否变化,校验每条消息,然后才逐组提交。
5. 结果显示在对话框里,失败后会出现 重新分析 / Analyze again。关闭对话框会中止仍在运行的模型调用。

Escape、背景和关闭按钮可在未提交时关闭对话框。

阶段与失败

| 阶段 | 你看到什么 | 失败时 |
| analyzing | 骨架屏加「Reading the working tree…」 | 对话框关闭,通知说明原因(工作区干净、不是仓库) |
| naming | 已列出分组,加「Naming with <model>…」 | 编辑界面打开并显示原因;可重试命名或手写 |
| edit | 每条消息都可编辑 | 对应 textarea 下方显示该组的校验原因 |
| committing | 全部锁定,加「Committing…」 | 显示每组结果;stale / 暂存区索引冲突会要求重新分析 |
| done | 结果文本 | 运行失败时还会提供「Analyze again」 |

配置

在配置档的 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 | auto 优先用 Git,回退到 SVN;git / svn 固定适配器 |
| gitPath | auto | 显式指定 git 二进制;留空则探测 /usr/bin/git、Homebrew、/usr/local/bin/git |
| svnPath | auto | 显式指定 svn 二进制;留空则探测 /usr/bin/svn、Homebrew、/usr/local/bin/svn |
| timeoutMs | 20000 | 每次 git / svn 调用的超时时间 |
| maxGroups | 6 | 超过此值就合并整个类型;类型从不混在一起,也不丢弃任何路径 |
| useModel | true | false 跳过模型;每条消息都必须手写 |
| modelTimeoutMs | 60000 | 单次摘要调用的超时时间 |
| maxInputChars | 24000 | 发给模型的 diff 字符数 |
| maxTokens | 2000 | 摘要的输出上限 |
| repairRounds | 1 | 对校验失败的标题做定向修复的轮数(0–3) |

调高 maxGroups(例如调到 20),就能按模块提交,而不是按类型提交。

工作原理

1. 通道

按钮直接调用 POST /dsh-git-commit/<endpoint>;请求和响应都是 JSON。路由注册在 Harness 的 webServer 上,并复用 connection.admit():同源、Host/Origin 校验、浏览器会话凭据、仅限 owner Peer。宿主不保存「待执行计划」,所以 analyze / name / commit 都是无状态的,也没有会过期的 TTL。

2. 探测

Git:git status --porcelain -z --untracked-files=all,外加分支、HEAD、已暂存路径和新文件样本。SVN:svn info --xml 取工作副本根目录,svn status --xml 取变更,未版本控制的目录展开为其下的文件。两种情况下都会丢弃敏感路径。

3. 分组

每个路径先得到一个类型(ci / docs / test / build / feat / refactor)和一个范围(首个路径段;apps/、packages/、backend/、services/、libs/、modules/、crates/、src/ 取前两段),再按 type + scope 分桶。超过 maxGroups 时,合并整个类型——绝不合并不同类型。

4. 命名

在会话当前路由上调用一次 ctx.llm.stream(),返回 {"messages":[...]}。大小写、空格和末尾标点都会归一化;无效的 header 会用失败的分组、具体错误和它们的 diff 做一轮针对性修复。命名在对话框已经显示之后才运行,关闭对话框会通过请求信号中止模型流。

5. 提交

commit 重新分析工作树,逐组比对类型、范围和文件集合;有任何差异就返回 stale,不写入。每条消息都在第一组提交前校验。Git:检查索引为空、git add -- <paths>、git commit -F,失败时回滚该组自己的暂存。SVN:对该组未版本控制的文件执行 svn add --parents --depth empty,然后对显式路径(包括新添加的父目录)执行 svn commit -F;失败时只取消本次运行添加的调度。结果会报告哪些已提交、哪些仍是脏的。

安全规则

- 每次提交只允许一个 Angular type;chore 和未知类型会被拒绝。
- Header ≤ 72 字符,type/scope 小写,subject ≤ 50 字符,末尾无标点,首字母不大写,没有 BREAKING CHANGE: footer 时不得出现 !。
- 每个路径都显式传给 git add --;从不使用 -A、.、-a、--amend、--force 和 --no-verify。
- 索引非空会中止运行;对话框可以精确释放列出的路径(内容仍留在工作树中)。
- 敏感文件会被跳过并报告;确认与提交之间分组发生变化会被拒绝。
- 失败的 Git 组会移出索引,让下一次尝试从干净状态开始。
- SVN 冲突会在写入任何内容前中止;缺失的文件会被跳过并报告。插件从不运行 svn update、svn resolve、--force、--amend 或 --no-verify。
- SVN 提交失败只回滚它自己调度的路径;文件内容始终留在磁盘上。
- HTTP 通道只接受同源、已认证、owner-Peer 的 JSON 请求;不新增未认证端口,也不把 token 放进 URL。

SVN 说明

- 没有暂存区。「release staged paths」控件只适用于 Git;SVN 提交始终使用显式路径。
- 一个文件只属于一个分组。文件不能拆分到多个分组——这与插件的 Git 路径限制相同,Git 路径从不暂存 hunk。
- 新目录会展开为其中的文件(上限 2000);更大的目录会被跳过并给出警告,而不是被整体纳入。新父目录以 --depth empty 调度,因此像 .env 这样的同级文件不会被一并带入。
- 过期提交会被服务器拒绝并报告;准备好合并时,请自行运行 svn update。
- 凭据从不触碰:每条命令都运行 --non-interactive,因此如果服务器提示输入,请事先运行 svn auth。

从 2.x 升级

3.0 移除了 /smart-commit 命令及其 <base64> 参数:按钮不再经过命令管道,因此会话中不会出现 smart-commit 节点。配置不变;升级后重启 DSH,让宿主注册新的 HTTP 通道。

开发指南

git clone git@github.com:wh131462/dsh-git-commit.git
cd dsh-git-commit
npm test # node --test, no third-party dependencies

index.js host half: JSON channel, probe dispatch, grouping, model call, validation, commit
svn.js SVN adapter: info/status probes, add, commit, revert, diff
client.js client half: button, phased confirmation dialog, progress and errors
cordis.patch.yml the loader row this bundle inserts
locale/ plugin metadata (en, zh)
test/ host and route tests with real temporary git / svn repositories

这个 bundle 没有运行时依赖:宿主部分使用 Node 内置模块,客户端部分从 Harness 模块表获取 React。测试会创建真实的临时仓库并驱动一个 stub LLM,覆盖分组、不丢路径的合并、校验、修复轮次、被阻止的分组、索引释放、提交失败回滚、过期计划拒绝,以及通道的认证、方法和 JSON 检查;安装 svn/svnadmin 后,还会运行真实的 SVN 检出、修订、敏感文件跳过和 add 回滚。

贡献

欢迎提交 Issues 和 Pull Requests,帮助改进这个项目。

许可证

MIT © 2026 EternalHeart

致谢

感谢 DeepSeek Harness 提供插件运行时、slot 系统,以及本插件所扩展的客户端 UI。
预览分享卡片长什么样 ↓wh131462/dsh-git-commit
分享 · DeepSeek Harness Hub
wh131462/dsh-git-commit

按 Angular 规范分组并生成提交信息,一键完成提交

回到顶部