ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vm0 Mock代理设计:guest-mock-claude与guest-mock-codex如何模拟Agent后端

vm0 Mock代理设计:guest-mock-claude与guest-mock-codex如何模拟Agent后端 vm0 Mock代理设计guest-mock-claude与guest-mock-codex如何模拟Agent后端【免费下载链接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.项目地址: https://gitcode.com/GitHub_Trending/vm/okouOkouvm0在 Firecracker 虚拟机里运行 AI AgentClaude / Codex但 CI 不可能每次测试都调用真实大模型。项目为此内置了两个Mock 代理——claude-mock与codex-mock它们伪装成真实 CLI 二进制的替身输出格式逐字节对齐真实 Agent 后端让整套测试可以在无网络、无 API Key 的情况下秒级复现还能刻意制造真实世界中最难遇到的故障。为什么需要 Mock 代理在 vm0 中Runner 会在 guest VM 内启动 Agent CLI 执行任务。真实后端有两个特点让自动化测试非常痛苦输出不可控模型每次回答都不同断言没法写死故障不可复现卡死、乱码、超时的进程在测试里几乎抓不到。Mock 代理的思路很朴素不模拟智能而是模拟协议。只要输出格式与真实后端一致上层的会话管理、事件转发、日志解析、进程回收逻辑就全部可以被测到。整体架构两个替身二进制两个 Mock 都被编译进 guest 镜像注册在 guest-binaries.json 中安装到 guest 的/usr/local/bin/二进制模拟对象协议源码位置claude-mockClaude Code CLIstdout 上的 JSONL 事件流crates/claude-mock/codex-mockCodex app-serverstdio 上的换行分隔 JSON-RPCcrates/codex-mock/测试时Runner 只需把环境变量里的 Agent 路径指向 mock 二进制其余链路启动、读 stdout、解析事件、写会话历史与真实后端完全一致。guest-mock-claude用场景标记驱动行为claude-mock的入口在 main.rs它完整复刻了真实 Claude CLI 的命令行参数——--input-format、--output-format、--resume、--tools等在 args.rs 中逐一解析保证上层无论怎么调用都不会掉链子。真正的核心是 scenario.rs 中的场景规则表prompt 里带上特定标记就触发对应行为。例如普通文本 → 当作 bash 命令执行默认 Shell 模式fail:boom→ 向 stderr 写错误并以退出码 1 结束stuck-tool→ 发出 WebFetch 工具事件后永久卡住测试看门狗回收逻辑hang-after-result→ 正常发完结果事件后挂起验证 SIGTERM/SIGKILL 升级回收路径ECHO JSONL 负载 → 把给定事件原样回放用于精确复现任意后端响应序列。 设计亮点规则表同时支持精确匹配 / 前缀匹配 / 携带负载三种模式且保证长标记排在短前缀之前避免stuck-tool-deaf被误判成stuck-tool——scenario.rs 里甚至有专门测试锁定这个顺序。事件本身由 transcript.rs 生成system/init、assistant、result等事件结构与真实 Claude Code 完全同构JsonlTranscript在打到 stdout 的同时还会把完整记录写入 Claude Code 约定的会话历史路径{config_dir}/projects/.../{session_id}.jsonl连session_id的生成规则mock-{uuid-v7}都一并模仿。这意味着依赖读历史文件续接会话的逻辑也能被真实覆盖。guest-mock-codex一个可编排的微型 app-servercodex-mock走的是另一条协议路线。真实 Codex 通过codex app-server在 stdio 上说 JSON-RPCmock 则实现了 main.rs 中同名的app-server子命令app_server/mod.rs 逐行读取 stdin、同步处理请求并回写 JSON-RPC 响应。与 claude-mock 用prompt 标记选行为不同codex-mock 用环境变量MOCK_CODEX_APP_SERVER_SCENARIO选择场景scenario.rs 里定义了 60 余种场景覆盖面相当惊人连接层initialize 后断开、stdout 出现畸形数据、超大通知帧回合层turn 开始时进程退出、挂起、中断interrupt时序竞态运行时错误上下文窗口超限、未授权、响应流断开、内容策略拒绝等几乎囊括了上层每一种错误分支。会话侧session.rs 按真实 Codex 的目录约定$CODEX_HOME→~/.codex回退链在 guest 里落盘 JSONL 会话产物使会话恢复resume测试读写的是真文件。两者如何配合测试维度claude-mockcodex-mock选择行为的方式prompt 中的标记环境变量MOCK_CODEX_APP_SERVER_SCENARIO协议载体stdout JSONL 流stdio JSON-RPC副作用写 Claude 会话历史文件写 Codex home 下的 JSONL 产物典型故障覆盖卡死工具、孤儿管道、非法 UTF-8断连、畸形响应、中断竞态它们分别支撑了两组庞大的集成测试crates/claude-mock/tests/含 stream-json 流式输入、活动输入等与 crates/codex-mock/tests/integration/app-server 会话、文件系统、resume。而 guest 端真正消费这些 mock 输出的回收、超时、OOM 逻辑见 docs/runner-guest-process-lifecycle.md。对初学者的 3 个启示 Mock 的价值在于协议对齐而非功能仿真——输出结构与真实后端逐字段一致测试才能以假乱真场景驱动比硬编码用例更可扩展——一张规则表或一个场景枚举就能枚举几十种故障形态新增场景只需加一行把偶发故障变成确定性复现——卡死、乱码、挂起这些线上噩梦在 mock 里都是随手可点的开关。想动手验证仓库只读即可阅读从 crates/claude-mock/CHANGELOG.md 与 crates/codex-mock/CHANGELOG.md 追踪每次协议对齐的演进是最快的理解路径。【免费下载链接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.项目地址: https://gitcode.com/GitHub_Trending/vm/okou创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表