前言¶
在 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 与浏览器控制台。
典型用法¶
- 在 web profile 中打开带 Git 工作区的 Harness 会话,确认右下角出现状态 pill。
- 查看分支与 +/- 行变更;需要开 PR 时打开 Create PR 区域,改标题后复制
gh pr create或 Agent 提示。 - 若会话目录不是 checkout,在 pill 提供的仓库 chip 或绝对路径字段中选择/输入目标仓库后再读状态。
- 无
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 / 幻方无官方从属关系。