@mojiexuan/dsh-git:给 DeepSeek Harness web UI 加一块类 VS Code 的 Git 面板

前言

把项目交给 DSH(DeepSeek Harness)跑任务时,浏览器里的 web UI 是主要工作界面。但一碰到 git——暂存、提交、切分支、推送——就得切回终端或另开编辑器,思路容易被打断。DSH 的理念是「一切皆插件」,客户端的界面能力同样可以由插件补齐。下面介绍的 @mojiexuan/dsh-git 就是这样一个插件:它在 web UI 侧边栏挂载一块源代码管理面板,把仓库的日常 git 操作搬进浏览器。

这是什么

@mojiexuan/dsh-git 是为 DeepSeek Harness web UI 打造的类 VS Code Git 源代码管理面板插件,作者是陈佳宝(GitHub:mojiexuan),MIT 许可证,当前版本 0.2.1。

它覆盖的内容包括:仓库初始化、按文件暂存、提交 / 推送 / 发布分支 / 拉取、分支与远程管理,另外还提供 AI 生成提交信息和提交历史拓扑图。

实现上分两半:host 半边跑在 Node 侧,封装 git/* RPC 端点;client 半边跑在浏览器,负责面板 UI 与渲染。

核心功能

面板入口与仓库初始化

侧边栏底部(Settings 上方)有面板开关。打开面板后,如果当前工作区还不是 git 仓库,会显示一键「Initialize Git repository」,背后执行的是 git init -b main

暂存与提交

面板里有可折叠的 Staged changes / Changes 两个列表,每个文件可以单独暂存(+)或取消暂存(),也支持全部暂存 / 全部取消。

主操作按钮按 git 语义变化:

  • 有未提交更改时显示 Commit;如果没有已暂存内容,会自动先暂存
  • 分支跟踪远程且领先时显示 Push
  • 分支没有上游但存在本地提交时显示 Publish branch

Pull、分支与远程管理

Pull 按钮只在配置了远程后显示,点击执行 git fetch --all --prune,一次性拉取所有远程与分支。

分支管理支持列表、切换、创建、删除(删除带确认)。远程管理支持查看、添加、删除 origin remote(同样带确认)。

AI 提交信息

基于暂存区 / 工作区的 diff,经 harness LLM 流式生成提交信息,遵循 Conventional Commits 格式,默认输出中文。

提交历史图

提交历史渲染成 SVG 泳道拓扑图,覆盖所有分支与远程,泳道拓扑在客户端计算,默认在面板底部展开,占面板一半高度。加载方式是懒分页加虚拟滚动,滚到底自动加载下一页。单击某个提交可以内联展开它的变更文件;hover 弹窗显示 message / author / date / hash,完整 hash 可复制。

自动刷新与自更新

面板每 2.5 秒轮询一次 git status,所以在面板外做的修改、提交、推送也会同步显示出来。

第一次打开面板时会静默检查 npm registry 上有没有新版本;有更新时,侧边栏入口出现徽标,面板头部给出一键更新链接,更新完成后提示重启。

界面与平台

界面支持英文与中文。跨 Windows / macOS / Linux 平台;git 以未受限方式运行,因此各平台原生的 TLS 与凭据助手都能正常使用。

安装与启用

先安装插件:

dsh plugin --profile web add @mojiexuan/dsh-git

然后启动 dsh web,侧边栏底部即可看到面板入口。

卸载与更新:

# 卸载(已发布的包和本地链接通用)
dsh plugin --profile web remove @mojiexuan/dsh-git

# 更新到最新发布版本
dsh plugin --profile web update @mojiexuan/dsh-git

如果是本地链接开发(dsh plugin --profile web add .),没有单独的更新步骤:先做 npm run build,再完全重启 dsh web(host bundle)并刷新浏览器(client bundle)。

从源码构建:

npm install
npm run build       # 产出 lib/index.js(host)与 lib/client.js(client)
npm run typecheck

配置项

可选配置写在 profile 的 cordis.patch.yml 里:

- id: git
  config:
    maxDiffChars: 4000     # 送给模型的 diff 文本上限(默认 4000)
    maxLogEntries: 2000    # 历史图每页最大提交数(默认 2000,滚动加载更多)
    provider: deepseek     # 可选,固定 provider(默认使用部署时的模型)
    model: deepseek-chat   # 可选,固定模型
    reasoningEffort: off   # off(默认)关闭思考;high / max / default 原样透传
    registryUrl: https://registry.npmjs.org  # 自更新检查的 npm registry(默认 npmjs.org)

maxDiffChars 控制 AI 生成提交信息时送入模型的 diff 截断长度,大仓库可按需调整;registryUrl 在内网或镜像环境下有用。

典型流程

以一个尚未纳入版本控制的目录为例,日常流程大致是:

  1. 打开侧边栏面板,点击一键初始化仓库(git init -b main
  2. 在 Changes 列表逐文件暂存,或点全部暂存
  3. 点击 AI 生成提交信息,等流式输出完成,也可以手动改写
  4. 点 Commit;首次提交后分支没有上游,按钮会变成 Publish branch
  5. 通过远程管理添加 origin 后,面板出现 Pull 按钮;分支领先远程时显示 Push

经过上面的步骤,暂存、提交、推送都能在面板内完成,不需要切终端。

适用场景与注意事项

适合常驻 dsh web UI 工作、希望 git 操作不离开浏览器的人。如果你习惯纯命令行,这个面板是补充而非替代。

几点值得注意:

  • 安全设计:所有 git/* 端点以 authority: 'loopback' 注册,仅 127.0.0.1 可访问;用户数据不会拼进命令字符串——提交信息走 git commit -F -,路径走 --pathspec-from-file=-,分支 / 远程名与 URL 按安全字符类校验。
  • 插件以当前 dsh 进程的权限运行,安装前建议先读一遍源码与许可证再决定。本项目为 MIT,源码公开。
  • 自更新检查依赖 npm registry,内网环境可用 registryUrl 指向自己的镜像地址。

结尾

@mojiexuan/dsh-git 把一块类 VS Code 的源代码管理面板装进 dsh web UI:初始化、暂存、提交、推送、分支与远程管理在浏览器内完成,AI 提交信息与提交历史拓扑图也在其中。

  • 目录页:https://www.skillhub.cn/plugins/mojiexuan/dsh-git
  • 源码:https://github.com/mojiexuan/dsh-git

目录页为社区维护的独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

小夜