BugGPS(dsh-bug-gps):录制浏览器问题,按原预期复核修复

前言

在 DSH 里让 agent 修前端 bug 时,常见做法是口述复现步骤,或手写 Playwright 脚本。前者容易漏掉「正确应该是什么」,后者往往和真实用户操作脱节,修完后也难以证明跑的是当前工作区里的补丁。BugGPS 是 DeepSeek Harness 的工作流类插件:你在浏览器里把问题操作一遍并标出预期,插件把它锁成会失败的检查;agent 改代码后,由 BugGPS 自己启动应用、按原条件重放,只有全部检查通过才给出 VERIFIED。

这是什么

BugGPS(仓库名 dsh-bug-gps)由维护者 lijiaqi-AI-Product-Manager 发布,分类为工作流。一句话定位:录下问题,按原预期复核修复(Record the bug. Verify the fix against the original expectation.)。当前为预发布状态,尚未发布到 npm;README 记载的安装与流程在 DSH 0.2.1-rc.5 / Windows 11 上已用本地 checkout 或 npm pack 包实测。

社区目录页:https://www.skillhub.cn/plugins/lijiaqi-AI-Product-Manager/dsh-bug-gps
源码与文档:https://github.com/lijiaqi-AI-Product-Manager/dsh-bug-gps

DSH 生态理念是「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

核心流程与工具

下面介绍插件在 DSH 会话里暴露的主线,对应 README 中的四步。

1. 录制(buggps_record)

浏览器打开后,你操作一遍,在工具栏上标注:

  • 预期:文本、输入值、应可见、应消失、不应报错。若先标「不应报错」再标正向预期,两者都会保留。
  • 检查点(可选):「此刻页面应为 …」。修复前后都必须成立,防止修复绕过录制情境;缩减步骤时也不会删掉。
  • 关键步骤(可选):缩减时永远保留。

密码、验证码、卡号等敏感字段不会写入录制,只存引用;重放时从环境变量 BUGGPS_SECRET_<名字> 读取。

2. 锁定(buggps_lock)

BugGPS 用配置里的 serve 命令自己启动应用,在当前代码上重放 3 次;3 次都以同一种方式失败才锁定。锁定用例带内容哈希并写保护,同时尝试缩短步骤(只靠重放,不调用模型)。

3. 修复

由 DSH agent 用常规工具改代码,插件不替代这一环。

4. 验证(buggps_verify)

BugGPS 再次从工作区启动应用,重放完整录制 3 次。每次在最后一步之后须持续满足全部检查(默认观察 1000 ms,见 observeMs)。

录制范围包括点击、输入、选择、勾选、回车、Escape,以及确实打开了菜单的悬停;不记录拖拽和全局键盘输入。每次启动应用后会先完整重放一次作预热(宽松超时、结果丢弃),便于 Vite 等按需编译;因此录制里的操作不应改动服务端持久数据,目前面向状态在浏览器内、每次可重置的应用。

配置:buggps.config.json

在仓库根目录放置配置,示例:

{
  "serve": {
    "command": ["npm", "run", "dev", "--", "--port", "5199", "--strictPort"],
    "url": "http://127.0.0.1:5199/"
  },
  "observeMs": 1000
}

serve 是 BugGPS 自行执行的命令,只接受 localhost。端口应与你平时开发用的不同:录制时你的 dev server 照常跑;锁定和验证时 BugGPS 用自有端口。端口被占用时报 ENV_BLOCKED,不会误用其它服务器的结果。锁定时 serve 会写入用例并参与哈希,之后改配置文件不影响已锁定用例。

判定结果

验证与锁定阶段会返回明确判定,便于 agent 和人判断是否真修好了。要点如下:

判定 含义(摘要)
VERIFIED 从当前工作区启动应用,完整录制 3 次均满足检查;补丁为锁定基线到当前代码的差异
PASSED_UNBOUND 检查通过,但非 BugGPS 启动的服务器,无法证明运行的是这份补丁
NEEDS_REVIEW 检查通过但证据偏弱,需人工看 review_reasons
STILL_FAILING 仍是原失败
DIFFERENT_FAILURE 症状变化或检查点不再成立
NO_CODE_CHANGE 锁定后代码无变化
CASE_TAMPERED 锁定用例被改动
STALE 验证过程中文件变化
TEST_INVALID 录制无法重放
ENV_BLOCKED 浏览器、端口、dev server 或 secret 等环境问题
FLAKY 多次重放结果不一致

VERIFIED 只覆盖录制场景,不证明其它 bug 不存在。禁用控件类修法、negative-only、模糊定位等会落入 NEEDS_REVIEW,不会自动当作完全修好。

环境要求

  • DeepSeek Harness:>=0.2.1-0 <0.3.0(README 实测 0.2.1-rc.5)
  • PATH 上有 pnpm ≥10(dsh plugin 会调用 pnpm)
  • 已安装 Microsoft Edge 或 Google Chrome(插件不下载浏览器)
  • Node ≥20,git;目标项目为 git 仓库

依赖侧:playwright-core 1.64.1;peer 为 @deepseek-ai/dsh-tools 同版本区间。许可证 MIT。

安装与启用

插件尚未上 npm,安装方式为本地路径(README 已实测):

dsh plugin --profile <你的 profile> add <path-to-dsh-bug-gps>

确认是否加载:

dsh --profile <你的 profile> --dump-config

输出中应出现 # == dsh-bug-gps。--profile 为必填。Windows 上若 DSH_HOME 路径过深可能报 ENAMETOOLONG。

安装前请自行阅读仓库源码与 MIT 许可证。插件以当前 DSH 进程权限运行,会启动浏览器、执行 serve 命令并读写项目下的 .buggps/;对 .buggps/ 的写操作在 agent 工具层会被拦截,但 shell 侧只能尽力防护,防线还包括用例内容哈希。

典型用法:内置示例

先做一分钟试用,生成带植入 bug 的示例商店(独立 git 仓库,已含 buggps.config.json):

node bin/buggps.js demo ../buggps-demo

按终端提示启动 npm run dev,再在 DSH 里让 agent 借助 BugGPS 修 bug。环境自检:

node bin/buggps.js doctor --repo ../buggps-demo

会检查 Node、git、Edge/Chrome、pnpm、dsh、serve 配置与端口。

适用场景与注意

更适合:React + Vite、Chromium 系浏览器、前端状态可重置、用 DOM 断言描述预期的 bug 修复闭环;希望 agent 的「修好了」有浏览器重放证据,而不是仅凭描述或弱断言。

需要留意:

  • 快照基于 git,含未跟踪文件,不含 .gitignore 忽略项(如 node_modules、.env);依赖或本地配置变化不算在补丁里。
  • 实测范围 README 写明为上述技术栈;其它环境未验收。
  • 「把按钮禁用」等修法需人工确认;删掉功能消除报错、换服务器、推迟报错等反例在仓库 test/counterexamples.test.js 中有覆盖。

结尾

BugGPS 把「用户真实操作 + 明确预期」变成可锁定、可重放的检查,并在验证阶段由插件自启应用给出 VERIFIED 或具体失败原因,适合纳入 DSH 前端 bug 工作流。详情与演示 GIF 见 GitHub README;社区条目见 SkillHub 目录页。

  • 目录:https://www.skillhub.cn/plugins/lijiaqi-AI-Product-Manager/dsh-bug-gps
  • 仓库:https://github.com/lijiaqi-AI-Product-Manager/dsh-bug-gps
羽毛球分组比赛记分
小程序二维码

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

小夜