mcpField
S
senpi-qa

senpi-qa

github.com/code-yeongyu测试与质量70.4k78 次安装今天更新
代码仓库

关于 senpi-qa

用于 omo Senpi 适配器和任务引擎的 QA Skill,要求使用真实 senpi 二进制进行验证,而非仅依赖单元测试。它规定了实时测试驱动、隔离的 Agent 目录和本地证据管理方式。

主要功能

  1. 01使用 senpi 进行实时 QA
  2. 02覆盖适配器与任务生命周期
  3. 03隔离 Agent 目录
  4. 04将证据存入解析后的路径
  5. 05区分实时验证与单元测试

适用场景

  1. 01验证适配器在实时会话中的行为
  2. 02测试任务启动、流式处理与终态
  3. 03检查团队交付及重启恢复

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/code-yeongyu/oh-my-openagent --skill senpi-qa

安装后在 Claude Code 中输入/senpi-qa确认已加载。

附带文件scripts/resolve-evidence-dir.mjsscripts/resolve-evidence-dir.test.mjs

详细介绍

Senpi QA

通过驱动真实的 senpi 二进制文件,对 omo Senpi 适配器(packages/omo-senpi/)和任务引擎(packages/senpi-task/)进行 QA。单元测试不算实时 QA:bun run test:senpi 是软件包门禁,packages/omo-senpi/scripts/qa/ 中的驱动脚本才是测试工具的验证依据。

黄金规则

  • 证据只能存放在一个指定路径下。 所有产物都必须放在 .omo/evidence/omo-senpi-adapter/<slug>/ 下。使用 scripts/resolve-evidence-dir.mjs 来确定路径,不要使用其他方式——手动输入路径可能导致运行产物落在 local-ignore/qa-evidence/ 或工作树根目录下的 .qa-evidence/ 等位置,这些位置不在忽略目录中,可能会意外提交(#8703)。
  • 证据只保留在本地。 .omo/evidence/ 已被 git 忽略;如果有任何证据路径被跟踪,跟踪证据审计测试就会导致构建失败。绝不要对产物运行 git add -f;PR 正文会包含摘要和关键摘录。
  • 真实的 Agent 目录必须保持原样。 实时驱动脚本会创建自己的隔离 SENPI_CODING_AGENT_DIR,并有意忽略调用方提供的目录,因此绝不会将 ~/.senpi/agent 用作沙盒。请报告驱动脚本的 realSenpiUntouched/已更改路径字段以及隔离 Agent 目录路径;整个目录的摘要只能作为辅助证据,不能单独作为证明。
  • 没有二进制文件就标记为 SKIP,不要保持沉默。 如果找不到 senpi,实时驱动脚本会在最终 JSON 中报告 SKIP 或 FAIL,而不会退回使用真实主目录。SKIP 不代表通过——请在证据 README 中明确说明。
  • 捕获的 JSON 就是证据。 磁盘上没有文件就表示没有进行 QA,也就意味着不能提交或推送。该文件证明了运行它的机器上的测试结果;提交中不会包含它。

首先解析证据目录

ev="$(node .agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs \
  --repo-root "$(git rev-parse --show-toplevel)" --slug <YYYYMMDD>-<short-slug>)"
mkdir -p "$ev"

解析器会返回绝对路径,但不会创建任何内容,因此由调用方决定何时创建目录。slug 必须是一个相对路径段,只能包含小写字母、数字和连字符(20260820-senpi-qa-contract)。分隔符、./..、路径遍历、绝对路径以及非 git 根目录都会被拒绝,并以非零状态码退出,同时显示指出问题 slug 的消息。

路由:选择测试案例

你修改了……运行证明内容
任意适配器代码,作为快速前置检查node packages/omo-senpi/scripts/qa/drive.mjs --self-test驱动脚本和隔离测试工具本身正常工作
可连接实时会话的适配器接线node packages/omo-senpi/scripts/qa/drive.mjs真实的 senpi 运行已加载插件、使用隔离的 Agent 目录,并且没有可归因于真实主目录的更改
任务生命周期(单个和批量)SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-e2e.mjs实时任务的启动、流式输出和终止状态
团队交付、关闭、回收、重启恢复SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/team-e2e.mjs注入内容的交付和恰好一次的恢复
任务 RPC 驱动脚本node packages/omo-senpi/scripts/qa/task-rpc-e2e.mjs --self-testRPC 接口契约
向任务交付技能SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-load-skills-e2e.mjs技能已传递给子任务
延续行为node packages/omo-senpi/scripts/qa/probe-continuation.mjs轮次按预期继续
DAG 状态机/运行器bun test packages/senpi-task单元测试和混沌测试不变量(不是实时测试证明)

将驱动脚本的输出指向已解析的目录,例如:

TASK_E2E_OUT_DIR="$ev/live-task-dag" SENPI_BIN="$(command -v senpi)" \
  node packages/omo-senpi/scripts/qa/task-e2e.mjs

软件包门禁

tsgo --noEmit -p packages/omo-senpi/tsconfig.json
bun run test:senpi

编写证据 README

每次运行都会在 $ev/README.md 留下证据,审阅者无需重新运行即可阅读。 必需章节是根目录 AGENTS.md 中的全仓库证据规则(测试了什么/观察到什么/为什么足够/ 省略了什么)。对于 Senpi,记录驱动程序的 changed-path/isolation 字段和沙箱 Agent 目录路径。有些驱动程序会报告沙箱路径但不会将其移除;调用方必须删除每个由任务拥有的沙箱,并在写入清理收据之前确认子 PID 均已终止。

评论

支持 Markdown