ARTICLE DETAIL

资讯详情

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

Happy 项目 Lab Rat Todo 测试夹具全解析:用最小化应用系统性评测 Coding Agent 协议原语

Happy 项目 Lab Rat Todo 测试夹具全解析:用最小化应用系统性评测 Coding Agent 协议原语 人工智能AI AgentAI 应用移动开发CLI后端【免费下载链接】happyMobile and Web client for Codex and Claude Code, with realtime voice, encryption and fully featured项目地址https://gitcode.com/gh_mirrors/happy20/happy点击查看免费下载导读Lab Rat Todo Projectenvironments/lab-rat-todo-project/是 Happy 仓库内置的一套专用于评测编码 AgentCoding Agent行为的最小化前端 Todo 应用夹具它只有 4 个源文件、无构建步骤、无依赖却埋入了真实 bug 与缺失功能足以触发 Agent 支持的每一种协议原语权限、子代理、提问、Todo 追踪、沙箱边界、上下文压缩、模型切换、会话恢复。本文将以该夹具的 README 为核心结合app.js、exercise-flow.md、agents.md以及环境管理器 environments.ts 的源码完整讲解其设计动机、缺陷清单、24 步协议演练脚本以及它在 Happy 开发环境与集成测试中的实际落地方式。读完本文你将掌握一套可复用的“Agent 协议行为观察”方法论并清楚如何在本仓库中一键拉起一个用于评测的隔离环境。一、为什么需要 Lab Rat Todo Project夹具的设计动机This project exists toexercise coding agents. It is the standard test fixture for Happy, OpenCode, Claude Code, Codex, and any other agent we want to evaluate protocol behavior against.这是 README 中给出的核心定位它不是真实产品而是 Happy、OpenCode、Claude Code、Codex 等编码 Agent 的标准测试夹具。设计者需要在不引入大规模代码库的前提下观察 Agent 在协议层面的端到端行为。它的三个设计原则刻意保持极小仅 4 个源文件index.html、styles.css、app.js外加面向 Agent 的agents.md打开即用任何 Agent 都能在几条工具调用内完成对整个项目的理解从而把观察重心放在“协议交互”而不是“代码理解”上。真实但不复杂夹具不是玩具而是带真实 bug、真实 localStorage 持久化和真实交互语义的小应用能让 Agent 执行真实的修改任务。覆盖全部协议面夹具的“表面面积”surface area足以触发一个编码 Agent 可能支持的每一种协议原语——权限审批、子代理、提问、todo 追踪、沙箱边界、上下文压缩、模型切换、会话恢复等。从 agents.md 的措辞可以进一步确认其用途This is atest fixture, not a real product. It exists so we can exercise coding agents (Claude Code, OpenCode, Codex, Happy, etc.) against a small but realistic codebase and observe their protocol behavior end to end.二、项目全貌文件清单与职责environments/lab-rat-todo-project/ ├── index.html # 应用外壳shell ├── styles.css # 布局与主题 ├── app.js # Todo 逻辑与 localStorage 持久化 ├── agents.md # 面向编码 Agent 的指令说明 ├── CLAUDE.md # 将 Claude Code 指向 agents.md └── exercise-flow.md # 20 步实际为 24 步脚本化交互序列2.1 index.html应用外壳index.html是一个单文件 HTML 应用结构清晰左侧hero-panel项目标题与统计面板#todo-count未完成数、#done-count已完成数右侧todo-panel#todo-form表单#todo-input输入框maxlength120工具栏三个过滤器按钮data-filterall | open | done与#clear-done清除按钮#todo-list列表容器#todo-item-templatetemplate元素作为每个待办项checkbox 文本 删除按钮的渲染模板。HTML 端还包含少量可观察的无障碍细节aria-label、roletablist、aria-livepolite这些会在演练脚本 Step 8 的“无障碍问题探查”子任务中被使用。2.2 styles.css布局与主题styles.css使用 CSS 变量定义配色根节点声明color-scheme: light——这正是 agents.md 指出“没有深色模式但添加深色模式是合理功能”的依据所在。布局上采用双栏网格1fr 1.15fr并在860px断点以下回退为单栏。除此之外夹具还内置了media (max-width: 860px)响应式规则与.sr-only辅助类。2.3 app.jsTodo 逻辑与 localStorage 持久化app.js是唯一的逻辑文件主要实现种子数据seedItems内置 4 条初始待办其中一条done: true首次加载无存储时使用状态管理state { filter, items }filter支持all/open/done持久化loadItems()从localStorage读取lab-rat-todo-items键用isTodoItem()做结构校验id为字符串、text为字符串、done为布尔解析失败或格式非法时回退到种子数据persistAndRender()负责写回并重渲染渲染render()基于template克隆节点构建列表并为每条待办绑定 toggle 与删除事件过滤逻辑getVisibleItems()根据state.filter返回可见项。2.4 agents.md 与 CLAUDE.md给 Agent 的“任务说明书”agents.md面向编码 Agent 声明了夹具内已知的问题清单详见第三节并明确要求按照exercise-flow.md逐步执行不要跳过步骤、不要批量执行一次只做一步并观察协议层面发生的事。CLAUDE.md的作用则是把 Claude Code 的注意点引导到agents.mdREADME 中注明其职责为“points Claude Code to agents.md”。2.5 exercise-flow.md24 步协议演练脚本exercise-flow.md是夹具的“剧本”README 中写为 20 步实际文件内已扩充为24 步要求“一个连续会话、按顺序执行、每一步建立在上一步之上”。脚本同时声明Not all agents support every primitive. Record what happens, skip what doesnt apply, note whats missing.即不是所有 Agent 都支持全部原语执行时记录现象、跳过不适用的、记下缺失的。这与“观察协议行为”的目的完全一致。三、故意埋下的缺陷清单Known issues夹具的核心价值之一是内置了一批确定性存在的问题保证 Agent 有具体的活可干。以下问题均来自 README 与 agents.md并可逐一在源码中定位#缺陷源码定位说明1Done 过滤器失效显示全部项而非仅已完成项app.js第 88-89 行getVisibleItems()中case done的过滤条件为!item.done || item.done这是一个恒为true的表达式任何布尔值都满足因此“Done”过滤器实际返回所有条目2没有深色模式styles.css第 2 行:root声明了color-scheme: light且所有颜色变量均为浅色系添加深色模式被文档明确标注为“合理功能”3没有测试也没有测试框架目录内无任何测试文件演练脚本 Step 12-13 会要求 Agent 先询问、再搭建 Vitest4没有键盘快捷键index.html与app.js均无 keydown 监听文档举例页面任意位置按 CmdEnter 提交表单5删除无确认app.js第 120-123 行删除按钮的 click 处理器直接filter移除条目并持久化无任何二次确认这些缺陷的存在意义正如 README 所写“让 Agent 在演练中有具体工作可做。”例如缺陷 1 是 Step 2/4/13 的主线任务缺陷 2 是 Step 5-6 的任务缺陷 3 是 Step 12-13 的任务缺陷 4 是 Step 7-11 的任务。四、24 步协议演练逐段拆解与观察要点exercise-flow.md将整个流程划分为 13 个段落覆盖 13 类协议原语。下面按段落逐一说明其脚本内容与要观察的协议行为。4.1 SETUPStep 0打开 Agent将 Agent 指向environments/lab-rat-todo-project/目录观察启动时它主动暴露了什么——可用模式、模型、斜杠命令、权限级别、项目检测等即“在你输入第一个字之前它展示出的所有东西”。这是评估 Agent“开局信息密度”的基准。4.2 TRANSCRIPTStep 1-2基础消息流Step 1 Orient提示词为“Read all files, tell me what this does.”。预期 Agent 会发起多次 read 工具调用并输出纯文本总结不产生任何编辑。Step 2 Find the bug提示词为“Theres a bug in the Done filter … Find it and show me the exact line.”。预期 Agent 定位到app.js中!item.done || item.done条件约第 88 行并解释其为何恒为真此时不应编辑。本段覆盖纯文本响应无工具、推理/思考过程、流式文本、多步回合。4.3 PERMISSIONSStep 3-6权限四级模型这是整个演练中最重要的段落逐一覆盖拒绝、单次允许、总是允许、自动放行四种权限形态Step 3 Edit rejected提示词“Fix it.”当权限弹窗出现时拒绝例如回复“no — show me the diff first.”。观察 Agent 能否从工具错误中恢复、是否改为用文本展示 diff。Step 4 Edit approved once提示词“Ok that diff looks right. Go ahead and apply it.”当权限弹窗出现时单次允许。预期磁盘上的文件发生变化、bug 修复被真正应用。Step 5 Edit approved always要求添加深色模式使用prefers-color-scheme: dark媒体查询弹窗时选择总是允许。此时会话内已记录 always 规则。Step 6 Auto-approved edit要求添加.dark-toggle按钮并接线在 hero panel 的 h1 之后插入按钮app.js中切换 body 的darkclass。该任务涉及多文件修改命中 Step 5 always 规则的编辑应不再弹出权限提示要记录哪些文件弹出、哪些没有。本段覆盖reject → 工具错误、allow once → 完成、allow always → 规则被存储、auto-approvealways 规则生效。4.4 WEB SEARCHStep 7联网搜索提示词为“Search the web for best practices on accessible keyboard shortcuts in todo apps.”。观察 Agent 是否调用 web search / web fetch 工具、搜到了什么、如何呈现结果。本段覆盖外部获取external fetch。4.5 SUBAGENTSStep 8并行子代理提示词要求“在动手之前用一个子代理探查应用当前处理了哪些键盘事件并另外检查 HTML 中是否有无障碍问题两者并行执行”。观察两个子任务是否并行运行、子代理权限是否受限、父 Agent 是否汇总结果。本段覆盖子任务、受限权限与并行执行三个观察点。4.6 TOOLSStep 9基于前期调研的简单编辑提示词为“Add CmdEnter to submit the form from anywhere on the page. Thats it, nothing else.”。若 Step 5 的 always 规则覆盖app.js编辑应自动放行否则记录权限弹窗情况。4.7 INTERRUPTIONStep 10-11中断与恢复Step 10 Cancel提示词要求实现整套快捷键CmdEnter 提交、Escape 清空输入、方向键导航在 Agent 流式输出或执行工具的途中强行 CANCEL/INTERRUPT。观察是否干净停止、部分工具调用是否被清理、磁盘上是否有半成品代码。Step 11 Resume after cancel提示词为“Ok just the CmdEnter. Do that.”观察 Agent 能否干净地拾起更简单的请求并完成。本段覆盖流中取消、取消后的清理、恢复执行。4.8 QUESTIONStep 12-13Agent 主动提问与基于回答行动Step 12 Agent asks a question提示词为“I want to add a test framework. Ask me which one I want before you set anything up.”。预期 Agent 先呈现选项Jest、Vitest、Mocha 等并等待测试者回答“Vitest”Agent 应确认但不立即搭建。Step 13 Act on the answer提示词为“Set up Vitest. Add a vitest config, a package.json with the dev dependency, and one test that verifies the Done filter bug is fixed过滤器只返回donetrue的项”。此步会创建多个文件注意观察权限行为。4.9 SANDBOXStep 14-15项目目录边界Step 14 Read outside project提示词为“What files are in the parent directory?”观察行为——可能成功、可能被拒绝、可能弹出提示属于厂商特有行为需精确记录。Step 15 Write outside project要求创建../outside-test.txt文件内容为 “boundary test”。预期几乎必然被阻止或拒绝需捕获确切的错误或行为。4.10 TODOStep 16Agent 管理的任务追踪提示词要求为项目创建任务列表并追踪1给 todo 增加截止日期2支持拖拽排序3支持导出 JSON。观察 Agent 使用专用 todo 工具、写入文件、还是仅把任务放进响应文本——这是判断 Agent todo 原语实现形态的关键。4.11 MODEL SWITCHStep 17会话中途切换模型先按 Agent 支持的方式配置、斜杠命令或 UI 开关切换到不同模型再要求添加“due date”字段表单里加日期选择器、随条目存入 localStorage。观察Agent 是否感知模型变更、响应风格是否有差异。4.12 COMPACTIONStep 18-19上下文压缩Step 18 Compact发出“Compact the context.”或使用 Agent 支持的压缩方式如斜杠命令或自动压缩观察是否确认压缩、能否感知上下文缩小。Step 19 Post-compaction sanity提示词为“What files have we changed so far?”检验压缩后 Agent 是否仍能基于会话历史准确列出已修改文件。4.13 PERSISTENCEStep 20-22会话持久化Step 20 Close关闭 Agent 与终端离开。Step 21 Reopen通过会话 ID、会话列表或最近会话重新打开同一会话观察历史是否还在、能否回滚、工具结果是否完好、权限决策与提问答案是否保留。Step 22 Verify continuity提示词为“What was the last thing we were working on?”Agent 应能引用此前的工作——这证明 transcript 完整存活且 Agent 可基于它推理。4.14 TODO续Step 23与 WRAP UPStep 24Step 23 Mark todo done要求把 Step 16 的“add due dates”标记为完成检验任务追踪的更新能力。Step 24 Full summary提示词为“Give me a git-style summary of everything we changed. List files modified, lines added/removed if you can tell.”——这是压轴验证如果 Agent 能跨全部 24 次交互输出一致连贯的总结说明整个会话的 transcript 自始至终是连贯的。4.15 原语覆盖矩阵Primitives coverageexercise-flow.md末尾还给出了一张“原语 → 步骤”的对照表便于跑完后核对覆盖面原语覆盖步骤纯文本响应无工具1, 2, 19, 24推理/思考2, 3流式文本1, 2, 24多步回合1, 6, 13工具完成1, 4, 6, 9, 13工具出错3, 10带输出的工具1, 16多文件编辑6, 13磁盘文件变更4, 5, 6, 13, 17拒绝 → 错误3单次允许 → 完成4总是允许 → 规则存储5自动放行always 规则6, 9拒绝/沙箱15外部获取7子任务8受限权限8并行执行8流中取消10取消后清理10恢复11Agent 提问、用户回答12项目外读取14项目外写入15创建任务16更新任务23会话中途切换模型17压缩18压缩后工作正常19关闭 重开20, 21历史完好21, 22恢复后的连续性22, 24五、夹具在 Happy 仓库中的落地环境管理器与集成测试Lab Rat Todo Project 不是孤立文件它在 Happy 仓库中承担着双重职责开发环境的标准工作目录与集成测试的标准夹具。5.1 environments.ts环境创建时自动拷贝夹具environments/environments.ts是仓库的环境管理器入口其中与夹具直接相关的是const LAB_RAT_PROJECT_TEMPLATE_DIR path.join(ENVIRONMENTS_ROOT, lab-rat-todo-project);在createEnvironment()environments.ts 第 270 行起中每次创建新环境都会调用copyLabRatProject(envDir)将夹具目录递归拷贝到新环境的project子目录function copyLabRatProject(envDir: string): string { ensureLabRatProjectTemplate(); const targetDir path.join(envDir, project); fs.cpSync(LAB_RAT_PROJECT_TEMPLATE_DIR, targetDir, { recursive: true }); return targetDir; }对应的EnvironmentConfig中记录了projectTemplate: lab-rat-todo-project与projectPath环境创建完成后控制台会打印Project: environments/data/envs/name/project5.2 env.sh 与 HAPPY_PROJECT_DIR每个环境会生成一份 env.sh由buildEnvSh()生成其中导出了 CLI 的关键变量最重要的两条是export HAPPY_PROJECT_DIRenvironments/data/envs/name/project export HAPPY_VARIANTdev export DEBUG1也就是说每个隔离环境都内置一份全新的、未经修改的 Lab Rat Todo 副本Agent 的每次评测都从同一基线开始结果可重复、可对比。5.3 pnpm env:* 命令族一键拉起评测环境基于 environments.ts 的命令入口文件末尾main()的switch分发可用以下命令创建并操作评测环境完整的命令清单见 docs/dev-environments.mdpnpm env:up --template empty # 创建环境 启动 server/web 拷贝 lab-rat 项目 pnpm env:list # 列出所有环境及运行状态 pnpm env:current # 打印当前环境的 env.sh 路径与 URL pnpm env:use name # 切换到指定环境 pnpm env:seed # 为 CLI Web 写入开发认证需 server 运行 pnpm env:cli # 在当前环境中透传运行 happy CLI可加参数 pnpm env:cli --help # 例如happy --help pnpm env:down # 停止当前环境的全部服务 pnpm env:remove name # 删除环境pnpm env:cli是一个透传入口它读取environments/data/current.json为当前环境构造环境变量然后启动 CLI。等价于手动source environments/data/envs/name/env.sh happy例如 docs/dev-environments.md 中演示的守护进程控制pnpm env:cli daemon stop pnpm env:cli daemon start5.4 集成测试中的应用夹具还直接服务于 Happy CLI 的集成测试。在 test-setup.ts 的注释中明确写着Integration suites now provision their own isolated environments so each suite can get a fresh lab-rat project copy.即集成测试套件如 claude.integration.test.ts、daemon.integration.test.ts各自申请隔离环境并获取一份全新的 lab-rat 副本保证测试互不污染。5.5 已知限制docs/dev-environments.md 记录了一个当前限制the lab-rat project is copied as plain files only. It does not include git history yet, so provider tests that depend on realistic repo history still need a later fixture upgrade.即夹具目前仅以纯文件形式拷贝不包含 git 历史因此依赖真实仓库历史的 provider 测试仍需后续的夹具升级。六、实操指南如何用这套夹具评测你自己的 Agent结合以上内容使用流程可以归纳为四个步骤1. 准备基准夹具无需改动仓库直接使用 environments/lab-rat-todo-project 目录本身或通过pnpm env:new获得一份隔离副本位于environments/data/envs/name/project。夹具是纯静态前端index.html双击或经任意静态服务器即可打开无构建、无依赖。2. 配置 Agent 指令把 agents.md 的内容作为 Agent 的项目级指令Claude Code 场景下由CLAUDE.md完成桥接确保 Agent 知道这只是一个测试夹具、了解内置缺陷、并按要求逐步执行。3. 逐段执行 exercise-flow.md保持一个连续会话从 Step 0 到 Step 24 严格顺序执行不跳过、不批量。每一步都记录协议层现象——权限弹窗形态、工具调用序列、错误恢复方式、子代理并行情况等。对不支持的步骤记录“缺失”而不是“跳过”。4. 汇总对照原语覆盖矩阵跑完后用 4.15 节的原语覆盖表核对哪些原语被触发、哪些缺失形成 Agent 协议能力的横向对比证据。这套方法论对 Happy、OpenCode、Claude Code、Codex 均适用也是仓库中相关评测文档如 docs/competition 下的协议对比材料依赖的基础设施。七、结语小夹具大方法论Lab Rat Todo Project 的价值不在于它本身是一个 Todo 应用而在于它把“评测编码 Agent 协议行为”这一复杂任务压缩到了 4 个源文件、24 步脚本与一张覆盖矩阵里。它证明了一个足够小、足够真实、且缺陷确定的夹具可以稳定地触发 Agent 在权限、子代理、提问、沙箱、压缩、持久化等每一个协议层面的行为从而让 Happy 等 Agent 产品在开发与评测中获得可复现的观察基线。如果你正在评估或构建编码 Agentenvironments/lab-rat-todo-project是一个可以直接拿来用的起点。赞分享人工智能AI AgentAI 应用移动开发CLI后端【免费下载链接】happyMobile and Web client for Codex and Claude Code, with realtime voice, encryption and fully featured项目地址https://gitcode.com/gh_mirrors/happy20/happy点击查看免费下载相关推荐最安全协议大比拼JumpServer多协议深度测评与性能测试报告最安全协议大比拼JumpServer多协议深度测评与性能测试报告 你是否还在为服务器管理选择哪种协议而头疼SSH、RDP、Telnet这些协议到底有何区别后端认证鉴权运维网络安全Slang 测试覆盖审查回归测试、测试指令体系与 LLM Agent 评审协议Slang 测试覆盖审查回归测试、测试指令体系与 LLM Agent 评审协议 本文以 Slang 仓库中的测试覆盖评审 Agent 定义 test cove编译器图形学编程语言Meshery 关系测试夹具设计指南系统化构建 Relationship 评估 E2E 测试资产Meshery 关系测试夹具设计指南系统化构建 Relationship 评估 E2E 测试资产 本文基于 Meshery 仓库中的 Agent 指南 rel云原生微服务运维DevOps上一篇CANN/asc-devkit SetUserTag方法文档下一篇KuiperInfer模型蒸馏知识迁移技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表