dsh-pr-chip:在 DSH 会话行显示 Pull Request 状态

前言

用 DeepSeek Harness(DSH)同时开多个会话时,侧边栏里往往只有标题和工作区路径,很难一眼看出某次对话背后是否已经建了 PR、是否还在 open、还是已经 merged。要确认状态,通常得切回终端查分支,或自己打开 GitHub。下面介绍的 dsh-pr-chip 是社区维护的 DSH 客户端插件,在每条会话行标题前固定占一格,用小型图标标出关联 PR 的 open、draft、merged、closed 四态,配色与 GitHub 一致,图形风格参考 Codex 桌面应用的 badge。

这是什么

dsh-pr-chip(GitHub:N-o-c-t-i-s/dsh-pr-chip,维护者 N-o-c-t-i-s)在 SkillHub 目录中归类为客户端插件。一句话定位:在 DSH 侧边栏每条会话行的 leading 区域绘制 PR 状态 chip。宿主侧负责解析「这条会话对应哪个仓库、哪条分支、PR 当前状态」,浏览器侧负责渲染 16px 图标;会话记录本身不持久化 PR 状态,只记身份,状态每次查询(带内存缓存)。

工作原理

状态解析链路可以概括为:

sessionId ──resolve cwd──> (ownerRepo, branch) ──gh pr list --head──> state

cwd 先查 storages/workspace.json 里该会话所属工作区;若缺失,再根据会话在磁盘上的目录名反推(含 ~XXXX 转义、按真实路径切分连字符等),以兼容「会话 cwd 不等于 workspace 路径」以及工作区记录已删但会话仍保留的情况。

内存缓存以 cwd 为键:有 PR 时答案缓存 30 秒,「无 PR」缓存 60 秒;同工作区的多条会话共享一次查询。进行中的查询会去重,并发子进程上限为 4。

身份从哪里来(按优先级)

  1. 当前 worktree:会话 cwd → git 分支 → gh pr list --head
  2. links.json 中记住的身份:检出目录已归档或删除时仍可能命中
  3. 会话事件:在事件总线上观察到 gh pr create,并与该次调用的输出配对
  4. 一次性回溯:安装前已存在的会话,对 transcript 扫描一次,结果写入后不再重复扫描

第 3、4 条只接受 gh pr create 命令自身返回的裸 PR URL;终端里随便 echo 一个链接,或正文里提到的 URL,都不会被当作身份来源。

核心功能

  • 四态展示:open、draft、merged、closed;颜色分别为 #1f883d、#6e7781、#8250df、#cf222e。
  • 展示位置:扩展点 sidebar.session.row.leading,即会话标题前的 16px 格;DSH 仅在行处于 idle 时渲染该格,归档行或空白行不显示。README 说明 DSH 没有「标题后常驻」的槽位,leading 是唯一适合常驻 chip 的位置。
  • 无 PR 或无法解析时:端点返回 state: null 及 reason(如 no-branch、no-pull-request、workspace-missing、gh-failed),会话行外观与未装插件时一致。
  • 离线:gh 连不上 GitHub 时,若此前已成功解析过,会返回磁盘上保存的状态并标记 stale: true,失败查询不会覆盖已有好状态;从未解析出 PR 的会话仍不显示 chip。
  • 插件在 $DSH_HOME/pr-chip/ 下写入 links.json(会话 → 身份,最多 500 条)、scanned.json(已做过 transcript 回溯的会话)、host-loaded.jsonl(宿主启动诊断,每行一条)。

安装与启用

环境要求:

  • DSH ≥ 0.2.1(需支持 sidebar.session.row.leading 并传入 { sessionId })
  • 系统 PATH 上有 git、gh,且 gh auth status 正常

安装命令(摘自仓库 README):

# 本地目录
dsh plugin --profile <profile> add link:/path/to/dsh-pr-chip

# 从 git
dsh plugin --profile <profile> add github:N-o-c-t-i-s/dsh-pr-chip

安装后需重启 DSH 宿主:bundle 列表在启动时组装。

若在 DSH 桌面应用中安装,README 注明应用会自行管理 profile,dsh plugin 可能拒绝操作,需手动添加依赖、dsh.profile.bundles 条目以及 node_modules 符号链接。

当前 package 版本为 0.1.6,许可证 MIT。

典型用法与何时不显示

装好插件并重启后,无需额外配置:在 git worktree 内、当前分支非 detached HEAD、且存在对应 PR(或能通过 links.json / 事件 / 回溯得到身份)的会话,标题前会出现状态 chip。

以下情况不会绘制 chip(与 README 一致):

  • 目录不是 git worktree(临时路径可以,但必须能当作 worktree 使用)
  • 分支为 detached HEAD
  • 分支没有 PR,且没有记住的身份
  • 未安装 gh 或未登录

适用场景与注意

适合经常在 DSH 里并行多个仓库或分支、又习惯用 gh 管理 PR 的开发者:侧边栏即可区分「还在提 PR」「已合并」等,减少来回切终端或浏览器。

插件以当前 DSH 宿主进程的权限运行,会调用 git、gh 并读写 $DSH_HOME/pr-chip/。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证。社区插件目录 SkillHub 条目 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-pr-chip 把 PR 四态收进会话行 leading 格,状态不落会话库、查询带缓存,并在离线时尽量保留上次已知状态。需要安装命令与行为细节时,以 README 为准;目录页:https://www.skillhub.cn/plugins/N-o-c-t-i-s/dsh-pr-chip,源码:https://github.com/N-o-c-t-i-s/dsh-pr-chip。

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

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

Xiaoye