oh-my-openagent omo-senpi 适配器回归 QA 实录:从 Issue 5317 证据记录解读隔离认证驱动器 📅 发布时间:2026/9/19 20:52:33 👁 浏览次数: oh-my-openagent omo-senpi 适配器回归 QA 实录从 Issue 5317 证据记录解读隔离认证驱动器【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent在 oh-my-openagent 仓库中omo-senpi是 Senpi 引擎的 TypeScript 扩展适配层其改动必须通过真实 Senpi 二进制的活体验证而非仅依赖单元测试。本文以.omo/evidence/omo-senpi-adapter/20260828-issue-5317-team-message-fallback-wake/README.md这份 QA 证据记录为主体逐层拆解它背后完整的隔离认证方法论沙箱如何构建、自测与真实驱动如何分工、真实主目录如何被证明未被触碰、测试结果如何解读以及证据记录本身遵守的边界。读完本文你将掌握一条可直接复用的适配器回归 QA 隔离认证实操链路。证据记录的核心内容测了什么Issue 5317 的证据记录开篇给出了本次 QA 的全部执行面共四条node packages/omo-senpi/scripts/qa/drive.mjs --self-test # 隔离夹具自测 node packages/omo-senpi/scripts/qa/drive.mjs # 真实 Senpi 驱动器 bun run test:senpi # 包级单元测试门禁 # CI-Bun 1.4.0Senpi 扩展产物重新生成 新鲜度校验其中前两条是真实 harness 证明对应 packages/omo-senpi/AGENTS.md 中 the scripts inscripts/qa/are the real harness proof 的定位后两条覆盖生成的产物与适配器回归。本次改动涉及两个随包发布的产物文件packages/omo-senpi/plugin/extensions/omo-task.jspackages/omo-senpi/plugin/extensions/omo-member.js这两个文件位于packages/omo-senpi/plugin/extensions/下属于构建生成的产物。按 packages/omo-senpi/AGENTS.md 的说明产物不要手工编辑由plugin/scripts/build-extension.mjs生成因此 CI 的新鲜度检查本质上是验证源码与产物一致、生成流程未引入回归。观察结果一次全绿但有节制的 QA 输出证据记录中观察到什么一节是整份文档的信息核心逐条对应驱动器输出的最终 JSON 字段观察项结果驱动器自测SELF-TEST OK真实 Senpi 驱动器PASSUltrawork 注入observed已观察到Comment checkerPASS真实 Senpi agent 目录untouched未被触碰调用方传入的SENPI_CODING_AGENT_DIRunset驱动器忽略调用方环境沙箱 agent 目录/private/var/folders/13/.../omo-senpi-qa-DehvME/agent捕获后沙箱清理已移除匹配的子进程数 0包门禁2417 通过、1 个 Windows-only 跳过、0 失败Evidence resolver 测试10 通过、0 失败几点值得注意的工程细节沙箱路径前缀是omo-senpi-qa-在 drive.mjs 的createSandbox()中通过mkdtempSync(join(tmpdir(), omo-senpi-qa-))创建落在系统临时目录与真实主目录物理隔离。匹配子进程数 0说明驱动器退出时没有遗留孤儿进程finally块中的rmSync(sandbox.root, { recursive: true, force: true })完成了彻底清理。SENPI_CODING_AGENT_DIR为 unset是本驱动器的一条铁律它拒绝继承调用方的 agent 目录只使用自己创建的沙箱目录避免 QA 过程污染开发者的真实~/.senpi/agent。隔离沙箱是怎么搭出来的drive.mjs的沙箱不是简单的临时目录而是一整套伪主目录它同时隔离了工作目录、agent 目录和 XDG 三件套。createSandbox()返回的结构包括{ root, // tmpdir 下的 omo-senpi-qa-* 根 cwd, // root/project驱动器的工作目录 agentDir, // root/agentSenpi 的 agent 目录 xdgConfigHome, // root/xdg xdgDataHome, // root/xdg-data xdgCacheHome, // root/xdg-cache homeDir, // root/home伪 $HOME canonicalCwd: cwd, }seedSandbox()随后向沙箱写入两份关键配置// agent/settings.json { defaultProjectTrust: ask, packages: [ pluginRoot ] }packages指向packages/omo-senpi/plugindrive.mjs 中pluginRoot join(packageRoot, plugin)这样真实驱动加载的正是本次改动重新生成的那个插件defaultProjectTrust: ask配合trust.json中{ canonicalCwd: true }让 Senpi 进程信任沙箱内的工作目录而无需交互。runSenpi()启动真实 Senpi 二进制时的环境重写是隔离的关键OMO_CODING_AGENT_DIR: sandbox.agentDir, SENPI_CODING_AGENT_DIR: sandbox.agentDir, PI_CODING_AGENT_DIR: sandbox.agentDir, HOME: sandbox.homeDir, USERPROFILE: sandbox.homeDir, XDG_CONFIG_HOME: sandbox.xdgConfigHome, XDG_DATA_HOME: sandbox.xdgDataHome, XDG_CACHE_HOME: sandbox.xdgCacheHome, PI_OFFLINE: 1, OMO_SENPI_QA: 1,其中PI_OFFLINE1强制离线不依赖外部服务OMO_SENPI_QA1是 QA 模式标记。驱动器通过-e参数注入两个扩展environment-receipt.ts记录运行环境供事后核验和mock-provider/index.ts模拟模型提供方并以--provider omo-mock --model mock-1运行全程不触碰真实 provider 凭证。自测与真实驱动两层验证的分工证据记录专门解释了为什么这样就够了Why it is enough自测验证隔离夹具本身真实驱动验证适配器行为。二者缺一不可。runSelfTest()--self-test分支验证的是夹具的不变量trust.json中存在 canonical cwd 的信任条目沙箱 agent 目录与调用方SENPI_CODING_AGENT_DIR不相等拒绝复用调用方目录沙箱 XDG_CONFIG_HOME 与调用方的不相等沙箱 XDG 目录确实已创建对不存在的目录做digestDirectory应返回absent快照原语对缺失路径的语义正确。自测通过后输出SELF-TEST OK——它只证明夹具可靠不证明适配器正确。真实驱动main()才真正通过spawnSync(senpiBin, ...)拉起真实 Senpi 二进制并用两个场景断言适配器行为Ultrawork 注入以ulw please respond为 prompt 运行随后扫描沙箱 agent 目录下所有.json/.jsonl/.log/.md文本readSandboxText断言其中包含ultrawork-mode标签。这正是ultrawork组件向模型中注入隐藏指令后的落盘痕迹属于可观察的 shipped adapter 行为。Comment checker以write qa slop为 prompt 触发写文件工具调用同时通过OMO_COMMENT_CHECKER_BIN注入 comment-checker 二进制由resolveCommentCheckerBin()从仓库根解析code-yeongyu/comment-checker/cli.js断言沙箱文本中出现comment-checker found issues in头。最终判定PASS需要ultraworkInjected (commentChecker PASS || SKIPPED-no-binary)若 Senpi 二进制不可用SENPI_BIN指向不存在或 PATH 中找不到驱动器输出SKIPreason: senpi-binary-unavailable而不是制造虚假的失败或成功。隔离认证如何证明真实主目录未被触碰这是整条 QA 链路最有分量的部分。驱动器对真实的~/.senpi/agent与~/.omo/agentdrive.mjs 中的realSenpiAgentDir/realOmoAgentDir做前后两次快照只有两边完全一致时才宣称realHomeIsolationCertified。快照原语在 isolation-state.mjs 中实现分两层受保护状态文件层snapshotProtectedState只针对 6 个敏感文件做 SHA-256 摘要——export const PROTECTED_STATE_FILES [ auth.json, settings.json, models.json, models-store.json, trust.json, hooks-state.json, ];其中settings.json在摘要前会做规范化删除tipsHistory、lastChangelogVersion、modelLastOnThinkingLevels等易变字段避免运行本身写回了无害状态被误判为污染。目录观察层snapshotDirectory递归扫描整个 agent 目录但设置了显式边界与易变子树豁免export const OBSERVATION_LIMITS { maxFiles: 10_000, maxBytes: 64 * 1024 * 1024, maxEntries: 20_000, }; const VOLATILE_SUBTREES new Set([sessions, cache, logs]);session/、cache/、logs/以及*.log文件被归类为 volatile易变不计入污染其余任何非易变路径的变化都会让isolationVerdict的untouched变为false。关键的是 fail-closed 设计只有快照complete !truncated errors.length 0observationComplete时才可能认证通过——一旦扫描因超限截断truncated或出现FILE_REPLACED等错误结论直接失败绝不睁一只眼闭一只眼。目录身份防替换是另一层保障Linux 上以O_RDONLY | O_DIRECTORY | O_NOFOLLOW打开目录并比较打开前后的dev/ino遍历中还通过/proc/self/fd/N走描述符路径任何边扫边换目录的竞态都会报FILE_REPLACED。isolation-certification.test.mjs 里有两组针对性测试一是宽泛真实主目录观察不完整时整体 fail-closed而受控根目录车道仍可独立认证二是受控根目录出现一次持久化写入后车道报告限定路径并拒绝认证。这解释了证据记录中 macOS 上directoryIdentityAvailable()返回 false 时为何降级为DIRECTORY_IDENTITY_UNAVAILABLE——身份原语只在 Linux 可用非 Linux 平台认证结论严格收紧。受控认证车道与环境回执把未触碰从声明变成可校验数据除了真实主目录的观察驱动器还单独开辟了一条受控认证车道certification lane即输出中的certificationLane: controlled-environment-roots在沙箱的伪$HOME中预置~/.senpi/agent与~/.omo/agent写入全部受保护状态文件为{}再在XDG_CONFIG_HOME、XDG_DATA_HOME、XDG_CACHE_HOME写入哨兵文件.qa-sentinel。前后快照这四个受控根HOME_DEFAULT_SENPI_AGENT、HOME_DEFAULT_OMO_AGENT、XDG_CONFIG_HOME、XDG_DATA_HOME任何持久化写入都会出现在certificationChangedPaths中并导致certified: false。与此同时注入的 environment-receipt.ts 扩展会在进程内把运行时的关键环境变量落盘为.omo-senpi-qa-environment.json{ HOME, USERPROFILE, XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_CACHE_HOME, SENPI_CODING_AGENT_DIR, }驱动器随后逐项比对certificationEnvironmentObserved确认 Senpi 进程实际看到的环境与驱动器预期的沙箱环境完全一致。这样隔离生效就不再是口头声明而是三个可交叉验证的证据环境回执、受控根快照、真实主目录快照。最终isolationCertified为 true 需要result PASS environmentObserved certificationVerdict.certified三者同时成立。结果解读2417 通过、1 个跳过、0 失败bun run test:senpi作为包门禁跑出 2417 通过、0 失败唯一的非通过是1 Windows-only process-driver skip——这不是失败而是平台守卫的有意行为某个进程型驱动只针对 Windows 场景在本次 macOS 工作站上被平台条件跳过由 CI 的对应平台任务覆盖证据记录省略了什么一节对此有明确说明。而10 pass的 evidence resolver 测试对应senpi-qa技能使用的resolve-evidence-dir.mjs路径契约拒绝分隔符、./..、穿越、绝对路径、非 git 根等。证据记录的边界什么被省略同样重要这份 README 最后专门交代了What was omitted省略了什么这是成熟 QA 证据链的标配不复制任何凭证、token、环境转储或 provider 流量隔离认证的意义正在于此——驱动器跑完真实 Senpi 进程后日志里不能残留凭据Windows-only 进程驱动用例按平台守卫跳过在 macOS 工作站上不强行执行 Windows 场景交由 CI 平台任务覆盖避免制造伪通过。按 packages/omo-senpi/AGENTS.md 的证据规则此类记录统一放在.omo/evidence/omo-senpi-adapter/下、按变更分目录必须包含执行的命令或操作、要证明的行为、观察结果含驱动最终 JSON、隔离证明尤其沙箱SENPI_CODING_AGENT_DIR与真实 agent 目录是否 untouched、以及被省略或脱敏的材料。换言之这份 README 本身就是一个可审计的 QA 交付物而非事后补写的说明。小结一条可复用的适配器回归 QA 链路从 Issue 5317 的这份证据记录可以提炼出一套完整的适配器回归 QA 模板任何涉及对外部引擎注入扩展的改动都可以照搬夹具自测--self-test先证明隔离沙箱可信真实驱动用被测插件包 mock provider 拉起真实二进制断言落盘痕迹如ultrawork-mode、comment-checker 头隔离认证同时覆盖真实主目录fail-closed 快照与受控根哨兵 环境回执三重交叉验证未触碰包门禁 CI 产物新鲜度检查覆盖产物层回归平台专用用例交给对应 CI 任务证据记录交代执行面、观察结果、判定理由与省略边界且绝不复制敏感信息。对照源码阅读 drive.mjs 与 isolation-state.mjs再回头看这份 40 行的证据 README你会发现每条观察项背后都有可执行的代码路径支撑——这正是以源码为证的 QA 记录应有的样子。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考