dsh-git-status-pill:Harness 会话里的浮动 Git 状态条

前言

在 DeepSeek Harness(DSH)里跑智能体时,工作区往往就是一个 Git 仓库:要确认当前分支、未提交改动量,还要在合适时机开 Pull Request。这些信息分散在终端或 IDE 里,和 Harness 主界面不在同一视线内。社区插件 dsh-git-status-pill(维护者 luigiinred)把 Git 摘要做成帧级浮动组件,挂在 web 客户端的 shell.overlay 插槽上,不挡主界面交互,并附带可编辑的 Create PR 流程。

这是什么

dsh-git-status-pill 是 DSH 的客户端插件:在 web profile 下于整个应用框架右下角(默认位置)显示一个可拖动的「状态 pill」。Host 侧通过 HTTP 路由读取当前会话工作区的 Git 状态;Client 侧轮询该路由并渲染 UI。简介原文为:Floating git status pill for DeepSeek Harness: live branch, +/- line changes and a Create PR prompt.

包版本 0.1.0,许可证 MIT,要求 Node >= 20,与 Harness 的兼容声明为 dsh >= 0.1.0-rc.5(见 package.json)。

核心功能

下面能力均来自项目 README,按界面与数据划分。

实时 Git 摘要

针对当前会话绑定的工作区仓库,插件 live 展示:

  • 分支名与仓库名
  • 行级增删(基于 git diff HEAD --shortstat 的 +/-)
  • 已改文件数、未跟踪文件数、upstream,以及 ahead/behind
  • 是否能在 Host 环境找到 gh(GitHub CLI)

Create PR 面板

展开后可编辑 PR 标题,并给出:

  • 生成的 gh pr create 命令
  • 可直接交给 Agent 的提示文案

复制优先使用 navigator.clipboard,失败时回退为可选中的 textarea。

交互与挂载方式

  • 渲染在 Harness 的 shell.overlay:全帧宽、默认可点透的浮层,浮于各列之上。
  • 通过握把拖动位置;用 ✕ 隐藏。
  • 非仓库工作区时:在工作区及其父目录中扫描 .git,以 chip 形式列出可选仓库,并提供绝对路径输入(README 说明仅向下扫描会漏掉同级仓库,故包含父目录)。

沙箱与拒绝访问

若 Harness 沙箱拒绝读取会话工作区外的路径,响应 payload 会带 denied: true,而不是静默显示为 0。

安装与启用

安装命令须使用 README 原文,不要自行拼接 github:owner/repo 形式。

1、安装包

从 registry 安装:

dsh plugin --profile web add dsh-git-status-pill

或从本地 checkout / tarball 安装(路径改为你的绝对路径):

dsh plugin --profile web add /absolute/path/to/dsh-git-status-pill

dsh plugin … add 会在 profile 目录内转发到 pnpm,包会进入该 profile 的 node_modules。

2、写入 bundles

确认 $DSH_HOME/profiles/web/package.json 中 dsh.profile.bundles 包含本包,例如:

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

该列表用于应用本包的 cordis.patch.yml,插入 Host 行:

- insert:
    - id: git-status-pill
      name: dsh-git-status-pill

3、重启 web profile

重启后,pill 应出现在框架右下角(默认 DEFAULT_POS)。

README Status 一节写明:业务逻辑已在真实仓库上验证过,但模块打包、cordis.patch、HTTP 路由尚未在 profile 内完整跑通端到端安装;建议把 0.1.0 视为初版,安装后查看 run card 与浏览器控制台。

典型用法

  1. 在 web profile 中打开带 Git 工作区的 Harness 会话,确认右下角出现状态 pill。
  2. 查看分支与 +/- 行变更;需要开 PR 时打开 Create PR 区域,改标题后复制 gh pr create 或 Agent 提示。
  3. 若会话目录不是 checkout,在 pill 提供的仓库 chip 或绝对路径字段中选择/输入目标仓库后再读状态。
  4. 无 gh 时按界面提示处理;Create PR 仍可通过 Agent 提示推进。

Host 与 Client 默认共用路由 /git-status-pill/status;Client 轮询间隔 POLL_MS 默认 4000 ms。二者在 lib/index.js 与 lib/client.js 文件顶部为常量,修改后需保证 composition 内路由 (kind, path) 唯一,否则注册时会抛错。

实现要点(可选阅读)

半边 文件 机制
Host lib/index.js ESM Cordis 插件,inject: ['webServer'],注册一条 exact HTTP 路由,经 ctx.shell 读 Git
Client lib/client.js window.__ModuleLoader__ bundle,注入 slots,占用 shell.overlay,fetch 轮询 Host 路由
组合 cordis.patch.yml bundle 应用时插入 Host 行

README 说明:Harness 上 Host→Client 的常规桥是 typert Remote,但当前安装包内不含 @deepseek-ai/dsh-typert-generator,手写生成 descriptor 易碎,故本插件选用 plain HTTP,代价是不参与 typert 的 scope 与 schema 校验。

适用场景与注意

适合谁: 经常在 DSH web 客户端里改 Git 仓库、希望一眼看到分支与 diff 规模、并想快速生成 PR 命令或 Agent 提示的开发者。

权限与安全: 插件以当前 DSH 进程权限运行;Host 会执行 Git(及检测 gh)。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行判断是否纳入 profile。

生态说明: DSH 采用「一切皆插件」的扩展方式;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系。

链接

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

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

小夜