dsh-git-commit-panel
中文 · English
一个 DSH Web GUI 插件:当前对话所在目录的 git 仓库有未提交改动时,页面浮出一枚小胶囊(显示当前分支、待提交数量和增删行数,如 ⑂ main 6 个更改 +61 -5),点开就是提交卡片——提交信息可以手写,也可以让 AI 起草,然后提交,或者提交后立即推送。
行为对齐 ZCode 的 git 工具:触发条件、提交信息规则(首行是 Conventional Commit,type 与 scope 用英文,主题不超过 72 字符)和两个动作都一致。

它做什么
- 只在需要时出现。 工作区干净时完全不占界面,也不用先打开某个标签页或面板。
- 只认当前对话的工作区。 胶囊始终属于主视图里那条对话所在的目录:换一条对话就跟着换,别的对话、别的已注册工作区有改动也不会顶上来。该目录干净、不是 git 仓库、或不是已注册工作区时,胶囊不出现。
- 提交信息可以手写,也可以让 AI 起草。 点「AI 生成」由部署的默认模型(不跟随当前会话所选的模型)根据分支、变更文件摘要和 diff 片段起草;也可以补一句说明,告诉它 diff 里看不出来的意图。
- 留空点提交不算错。 什么都不填直接点「提交」或「提交并推送」,会先起草信息再提交。
- 提交,或提交并推送。 「提交前暂存全部更改」决定是整体暂存(含未跟踪文件)还是只提交索引里已有的内容;缺少上游时会给出可操作的报错。
- 只在本机、只对已注册工作区生效。 浏览器不能指定任意目录跑 git,路由也仅限本机访问。
- 中英双语,跟随 GUI 语言;浅色、深色都跟随界面主题。
安装
要求 DeepSeek Harness 0.2.0-rc.1 及以上,Host 的 PATH 中有 git。
本插件不发布 npm 包,只从 GitHub 分发。首选预编译的 Release 包——它已经带构建好的产物,你机器上一个构建脚本都不用跑:
dsh plugin --profile web add https://github.com/135ty/dsh-git-commit-panel/releases/latest/download/dsh-git-commit-panel.tgz
这条 URL 永远指向最新版本,发新版不用改 README。
也可以从 GitHub 源装(会下载整个仓库并在本地构建,需要 Node.js 24+):
# 不钉版本:始终取默认分支
dsh plugin --profile web add github:135ty/dsh-git-commit-panel
# 钉到某个 tag 或 commit(建议装源码时用它)
dsh plugin --profile web add github:135ty/dsh-git-commit-panel#v0.1.0
# 本地目录(开发用;link 依赖,重新构建后刷新页面即生效)
dsh plugin --profile web add E:/path/to/dsh-git-commit-panel
然后重启 dsh web。
只在
dsh web/ CLI 上安装。 DSH Desktop 客户端的安装边界只接受已发布到 npm 的name@x.y.z,GitHub 源的插件在那边装不上——这是客户端的限制,不是插件的问题。
从 GitHub 源安装需要一次构建授权
上面三种 GitHub 源装法装的是源码,pnpm 出于安全不会自动跑依赖的 prepare 脚本,所以第一次 add 会失败并打印需要授权的包名。把那两个名字写进该 profile 的 pnpm-workspace.yaml 再重跑 add 即可:
allowBuilds:
dsh-git-commit-panel: true # 本插件的 prepare:tsc + esbuild
esbuild: true # prepare 用到的 esbuild 需要装平台二进制
这就是预编译包推荐的原因:tarball 里已经带构建好的 lib/,用户机器上一个构建脚本都不跑,也就不需要这条授权。要钉源码版本就用 #v0.1.0 或 #<sha>,否则一次 push 就可能让已经装好的插件在没有提示的情况下换了内容。
开发与验证
npm install # 依赖里含类型检查所需的 @deepseek-ai/dsh-* 声明
npm run verify # typecheck + 构建 + 产物契约检查
npm run build # 只构建:client(esbuild)→ lib/client.js,host(tsc 声明 + esbuild)→ lib/index.js
npm run pack:release # 打出 Release 用的预编译 tgz,并打印上传命令与资产地址
lib/ 是构建产物且已提交:从 GitHub 源安装时,即使仓库里的构建脚本没跑,插件也能正常加载。
两个半边都把 @deepseek-ai/* 的 import 打包掉了——host 半边只依赖 node:fs/node:path,浏览器半边只 require react(由 harness 提供)——所以安装时没有东西需要解析。
浏览器验证脚本都驱动真实 Chromium(playwright-core 已在 devDependencies),需要一个带 token 的运行中 GUI;产物写在 artifacts/:
node scripts/verify-panel.mjs <base-url-with-token> [期望的未提交文件数]
node scripts/verify-workspace.mjs <base-url-with-token> <对话所在工作区>
node scripts/verify-theme.mjs <base-url-with-token> <工作区路径>
node scripts/verify-generate.mjs <base-url-with-token> # 需要部署有可用的默认模型
node scripts/verify-failure.mjs [base-url] # 自带凭据无效的临时 DSH_HOME
只有 verify-generate.mjs 会真正调用模型;verify-failure.mjs 用的是故意写坏的假 key(sk-invalid-key-for-failure-path-test),仓库里没有任何真实凭据。
verify-pack.mjs 不需要 GUI,它只测 pack:release 读 npm 报告的那段逻辑:
npm run verify:pack
许可
MIT。
No comments yet. Be the first to write one.