ECShopX已配置AI Agent辅助开发
商派ECShopX开源商城发布后,为了提高开发者的开发效率,商派进行了"系统AI友好性"的能力提升,针对Cursor 编码环境配置了Agent分层角色(规划/编排/执行)与TDD(tdd-guard)钩子,让协作过程有统一节奏:先产出带验收与测试用例的计划,再按红绿重构实现,减少「直接改代码却不可测」的漂移。
基于AI Agent规则与TDD(tdd-guard)的使用说明
1. 配置入口与优先级
| 位置 | 作用 |
|---|---|
| ECShopX/.cursor/rules/*.mdc | 始终生效的规则:index→agent-triggers→workflow→tdd-guard(优先级1~4) |
| ECShopX/.cursor/agents/*.md | 各子Agent的详细职责与输出约定(如 planner.md) |
| ECShopX/.cursor/hooks.json + hooks/cursor-adapter.js | 将Cursor事件转发tdd-guard CLI,在Edit/Write等操作前做TDD校验 |
2. Agent 体系(「技能」如何落地)
规则将能力拆成多层角色,通过 @角色名 或自然语言关键词切换意图;执行层任务在约定中应通过 mcp_task + subagent_type 委派,避免在当前会话里「一人分饰多角」。
| 层级 | 角色 | 要点 |
|---|---|---|
| 规划层 | Planner | 访谈、研究(委派 Explore/Librarian)、强制咨询 Advisor,产出 .tasks/plans/{name}.md;只动 .tasks/ 下文档,不写业务代码 |
| 规划层 | Advisor | 计划前风险与遗漏分析,只读、不改文件 |
| 规划层 | Reviewer(可选高精度) | 审查计划质量,返回 [OKAY] / [REJECT] |
| 编排层 | Orchestrator | 用户确认「开始执行」后读计划、拆 TODO、委派 Developer/Architect/Explore/Librarian,跑验证、维护 Notepad |
| 执行层 | Developer | TDD 实现(配合 tdd-guard),遵守计划内已审核的测试用例 |
| 执行层 | Architect | 架构咨询,只读 |
| 执行层 | Explore / Librarian | 代码探索 / 文档与最佳实践检索 |
核心原则(摘自规则):
- 先规划后执行 — 任何任务(含小修复)都需经 Planner 产出计划;规划者与执行者职责分离。
- @<Agent名> 优先 — 用户显式指定角色时优先按该角色行事。
- 子任务必须委派 — Explore、Librarian、Advisor、Reviewer、Developer 等对应工作应用 mcp_task 发起,并在 prompt 中写清任务。
3. 工作流程速览
3.1 规划阶段
- 1Planner 访谈并研究代码库(通过委派 Explore/Librarian)。
- 2强制 Advisor 评审后再写计划。
- 3生成 .tasks/plans/{"{"}name{"}"}.md,其中必须包含 Acceptance & Test Cases:WHEN/THEN 验收场景 + 由场景推导的测试用例(含边界)。
- 4可选:高精度模式下由 Reviewer 审查计划;[REJECT] 时 Planner 需改计划并再审直至 [OKAY]。
- 5用户审核并通过计划中的测试用例清单后,才允许进入执行阶段。
3.2 执行阶段
- 1Orchestrator 读取同一 name 的计划与 TODO,可维护 .tasks/boulder.json 与 .tasks/notepads/{"{"}plan-name{"}"}/(learnings.md、decisions.md、issues.md、problems.md 等,追加写入并带作者与时间戳)。
- 2通过 mcp_task 按 TODO 委派;委派 Developer时 CONTEXT 须引用计划中 Acceptance & Test Cases 里与本任务相关的条目。
- 3本项目验证 phpunit 零错误、全通过;必要时结合诊断读取变更文件人工核对。
3.3 委派用的 6-Section Prompt(Orchestrator → 执行层)
计划要求使用统一结构,便于落地与审计:
TASK
EXPECTED OUTCOME
REQUIRED TOOLS
MUST DO
MUST NOT DO
CONTEXT
Developer 的 MUST DO 中应包含:遵循 TDD 与 tdd-guard.mdc;MUST NOT 中应包含:不得用脚本或让用户手动改代码来绕过 tdd-guard。
4. TDD 机制与 tdd-guard
4.1 目标
在 Edit / MultiEdit / Write 等写文件操作前拦截「跳过测试」或「一次改太多」等行为,引导 RED → GREEN → REFACTOR。
4.2 运行方式
hooks.json在 preToolUse(匹配Write|Edit|MultiEdit)、beforeSubmitPrompt、sessionStart 时执行:node .cursor/hooks/cursor-adapter.js。- 适配器将 Cursor 的 payload 规范为
tdd-guard所需字段,并在可能时把对已存在文件的 Write 转为 Edit/MultiEdit;最终调用tdd-guard可执行文件并将结果回传。 - 若返回
block(或continue: false),适配器以退出码 2 表示拦截。
4.3 被拦截时 Agent 应怎么做
- 1阅读返回的 reason(含违规说明与建议的下一步)。
- 2在本会话内按建议继续:例如只加最小实现、先 stub、先建空类再跑测试等。
- 3禁止用 sed/重定向等脚本批量改受检文件,或让用户手动粘贴代码以绕过拦截。
4.4 Hook 不可用时的自律
若 tdd-guard 未安装、超时或报错:Developer 仍应按同一套 TDD 纪律(一次一个失败测试、最小实现、全绿再重构)工作,只是没有自动拦截。
4.5 Developer 的 TDD 要点
RED
每次只增加一个失败测试,并保留失败证据。
GREEN
最小实现使当前测试通过。
REFACTOR
仅在测试全绿时重构;重构后仍全绿。
5. 实例:给ECShopX添加"订单备注API"
1)规划(Planner)
- Planner 经 Advisor 审视范围与风险后,生成 .tasks/plans/order-note-api.md,其中 Acceptance & Test Cases 至少包含:
WHEN合法用户更新本人订单备注 THEN 返回 200 且持久化成功;
WHEN订单不属于当前用户 THEN 返回 403/业务错误码;
WHEN备注超长或空串边界 THEN 校验与错误响应符合约定。
Planner 呈现测试用例清单,等待你确认后再进入执行。
2)可选高精度(Reviewer)
若开启高精度审查,Reviewer 对计划文档做 [OKAY] / [REJECT];被拒则 Planner 改计划后再审。
3)执行(Orchestrator + Developer)
- 你说「开始执行」后,Orchestrator 读取同一计划中的 TODO,按依赖拆任务,并通过 mcp_task 委派 Developer,prompt 采用 6-Section,且在 CONTEXT 中引用计划里与本任务对应的验收场景与用例 ID。
- Developer 严格 TDD:例如先写一条「越权访问应失败」的测试(RED),再写最小控制器/服务逻辑使该测试通过(GREEN),再补「成功路径」测试并实现,最后在全部绿的前提下做小幅重构(REFACTOR)。
- 若 tdd-guard 拦截某次 Edit/Write,根据返回的 reason 在本会话内缩小改动(如只补一个方法、先通过当前单测),不要用脚本或让用户手动粘贴绕过。
4)收尾
运行 phpunit 全绿;Orchestrator/Developer 视需要在 .tasks/notepads/order-note-api/ 追加决策与问题记录。
6. 快速对照:你要做什么时该怎么做
| 场景 | 建议 |
|---|---|
| 新需求或改需求 | 走 Planner → 计划含验收与测试用例 → 用户确认 → Orchestrator 执行 |
| 只想改代码 | 仍应先有对应计划与用例约定(规则要求「无例外先规划」) |
| 写 PHP/API 实现 | Developer 角色 + TDD;接受 tdd-guard 拦截并按 reason 调整 |
| 查代码 / 查文档 | 通过委派 Explore / Librarian,而非在 Planner/Orchestrator 会话里自己搜遍全库代替委派 |

