关于 senpi-qa
用于 omo Senpi 适配器和任务引擎的 QA Skill,要求使用真实 senpi 二进制进行验证,而非仅依赖单元测试。它规定了实时测试驱动、隔离的 Agent 目录和本地证据管理方式。
主要功能
- 01使用 senpi 进行实时 QA
- 02覆盖适配器与任务生命周期
- 03隔离 Agent 目录
- 04将证据存入解析后的路径
- 05区分实时验证与单元测试
适用场景
- 01验证适配器在实时会话中的行为
- 02测试任务启动、流式处理与终态
- 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-test | RPC 接口契约 |
| 向任务交付技能 | 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 均已终止。