前言¶
DeepSeek Harness (DSH) 在处理多个 Pull Request 时,智能体没有记忆功能,每次查询都需要重新从 GitHub 获取数据。这会导致重复的 API 调用和上下文冗余。dsh-pr-watch 插件旨在解决这一问题,它通过存储快照并报告增量变化,让智能体只需关注“最近发生了什么”。
功能概览¶
该插件通过注册一个名为 pr_watch 的工具来工作。核心能力包括:
- 跨仓库追踪:追踪你 authored(作者身份)的所有 Pull Request,无需本地克隆仓库。
- 状态报告:区分并报告 PR 的变化状态,包括已合并、已关闭未合并、变得陈旧。
- 增量更新:基于上次检查的快照,只报告新增或变化的状态。
- 处理重新打开:能够识别那些被关闭后又重新打开的 PR。
- 防重复:合并和陈旧状态在后续检查中不会重复报告,直到其状态再次发生根本性变化。
安装与启用¶
当前插件处于 pre-release(预发布) 状态,尚未发布到 npm,因此官方安装命令暂时无法使用。
官方安装命令(待发布):
dsh plugin --profile PROFILE add dsh-pr-watch
当前安装方式:
从源码检出仓库后,先构建,再通过本地链接安装。
pnpm install && pnpm run build
dsh plugin --profile PROFILE add link:.
依赖与环境¶
安装前需确保环境满足以下要求:
* Node.js:版本需大于等于 18。
* GitHub CLI (gh):必须安装在 PATH 中,并已通过 gh auth login 完成认证。
* 凭据处理:插件不存储任何凭据,完全依赖 gh 的 keyring 认证机制。
使用方法¶
可以通过调用工具 pr_watch 来检查 PR 状态。调用时传入参数配置。
调用示例:
{
"staleDays": 14,
"all": false
}
参数说明:
* staleDays:整数类型,PR 无活动多少天后会被标记为陈旧,默认为 14。范围限制在 1 到 3650 之间,0 会被拒绝。
* all:布尔类型,设为 true 时列出所有打开的 PR,而不是仅列出变化。默认为 false。
输出示例:
插件会输出三类状态的 PR:
✅ Merged (2):
octo/repo#41 — Add Russian locale (last activity 1 day ago)
octo/repo#38 — Fix broken link (last activity 3 days ago)
⏳ Became stale (1):
octo/repo#29 — docs: clarify install steps (last activity 21 days ago)
🆕 Newly noticed (1):
octo/repo#44 — Add MCP server entry (last activity today)
工作原理与注意事项¶
该插件采用了两阶段查询策略:
1. 枚举:获取你 authored 的所有打开的 PR。
2. 解析:将当前打开的 PR 集合与上次快照进行比对,找出那些不在当前集合中(即已关闭或已合并)的 PR,并单独查询其最终状态。
由于需要区分“已合并”和“关闭未合并”,简单的 diff 无法满足需求。插件通过这种机制确保了状态的准确性。
注意事项:
* 插件仅依赖 gh CLI 进行认证,不保存 Token,安全性由 gh 的 keyring 保证。
* 对于未克隆的仓库,插件通过 owner/repo#number 的形式进行追踪,因此本地无需 checkout。
总结¶
dsh-pr-watch 为 DSH 智能体提供了对 PR 变化的有效追踪能力,减少了重复检查的开销。目前代码实现已完成,测试通过,但尚未发布,需通过源码方式安装使用。