ai-engineering-init 1.7.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.claude/agents/bug-analyzer.md +103 -0
  2. package/.claude/agents/code-reviewer.md +115 -5
  3. package/.claude/agents/image-reader.md +154 -0
  4. package/.claude/agents/loki-runner.md +80 -0
  5. package/.claude/agents/mysql-runner.md +81 -0
  6. package/.claude/agents/requirements-analyzer.md +162 -0
  7. package/.claude/agents/task-fetcher.md +75 -0
  8. package/.claude/commands/dev.md +29 -0
  9. package/.claude/commands/next.md +31 -1
  10. package/.claude/commands/progress.md +23 -1
  11. package/.claude/hooks/skill-forced-eval.js +46 -62
  12. package/.claude/settings.json +10 -1
  13. package/.claude/skills/api-development/SKILL.md +179 -130
  14. package/.claude/skills/architecture-design/SKILL.md +102 -212
  15. package/.claude/skills/backend-annotations/SKILL.md +166 -220
  16. package/.claude/skills/bug-detective/SKILL.md +225 -186
  17. package/.claude/skills/code-patterns/SKILL.md +127 -244
  18. package/.claude/skills/collaborating-with-codex/SKILL.md +96 -113
  19. package/.claude/skills/crud-development/SKILL.md +226 -307
  20. package/.claude/skills/data-permission/SKILL.md +131 -202
  21. package/.claude/skills/database-ops/SKILL.md +158 -355
  22. package/.claude/skills/error-handler/SKILL.md +224 -285
  23. package/.claude/skills/file-oss-management/SKILL.md +174 -169
  24. package/.claude/skills/git-workflow/SKILL.md +123 -341
  25. package/.claude/skills/json-serialization/SKILL.md +121 -137
  26. package/.claude/skills/performance-doctor/SKILL.md +83 -89
  27. package/.claude/skills/redis-cache/SKILL.md +134 -185
  28. package/.claude/skills/scheduled-jobs/SKILL.md +187 -224
  29. package/.claude/skills/security-guard/SKILL.md +168 -276
  30. package/.claude/skills/sms-mail/SKILL.md +266 -228
  31. package/.claude/skills/social-login/SKILL.md +257 -195
  32. package/.claude/skills/tenant-management/SKILL.md +172 -188
  33. package/.claude/skills/utils-toolkit/SKILL.md +214 -222
  34. package/.claude/skills/websocket-sse/SKILL.md +251 -172
  35. package/.claude/skills/workflow-engine/SKILL.md +178 -250
  36. package/.codex/skills/api-development/SKILL.md +179 -130
  37. package/.codex/skills/architecture-design/SKILL.md +102 -212
  38. package/.codex/skills/backend-annotations/SKILL.md +166 -220
  39. package/.codex/skills/bug-detective/SKILL.md +225 -186
  40. package/.codex/skills/code-patterns/SKILL.md +127 -244
  41. package/.codex/skills/collaborating-with-codex/SKILL.md +96 -113
  42. package/.codex/skills/crud-development/SKILL.md +226 -307
  43. package/.codex/skills/data-permission/SKILL.md +131 -202
  44. package/.codex/skills/database-ops/SKILL.md +158 -355
  45. package/.codex/skills/dev/SKILL.md +476 -131
  46. package/.codex/skills/error-handler/SKILL.md +224 -285
  47. package/.codex/skills/file-oss-management/SKILL.md +174 -169
  48. package/.codex/skills/git-workflow/SKILL.md +123 -341
  49. package/.codex/skills/json-serialization/SKILL.md +121 -137
  50. package/.codex/skills/next/SKILL.md +186 -42
  51. package/.codex/skills/performance-doctor/SKILL.md +83 -89
  52. package/.codex/skills/progress/SKILL.md +147 -76
  53. package/.codex/skills/redis-cache/SKILL.md +134 -185
  54. package/.codex/skills/scheduled-jobs/SKILL.md +187 -224
  55. package/.codex/skills/security-guard/SKILL.md +168 -276
  56. package/.codex/skills/sms-mail/SKILL.md +266 -228
  57. package/.codex/skills/social-login/SKILL.md +257 -195
  58. package/.codex/skills/tenant-management/SKILL.md +172 -188
  59. package/.codex/skills/utils-toolkit/SKILL.md +214 -222
  60. package/.codex/skills/websocket-sse/SKILL.md +251 -172
  61. package/.codex/skills/workflow-engine/SKILL.md +178 -250
  62. package/.cursor/agents/bug-analyzer.md +102 -0
  63. package/.cursor/agents/code-reviewer.md +80 -97
  64. package/.cursor/agents/image-reader.md +154 -0
  65. package/.cursor/agents/loki-runner.md +80 -0
  66. package/.cursor/agents/mysql-runner.md +81 -0
  67. package/.cursor/agents/project-manager.md +1 -1
  68. package/.cursor/agents/requirements-analyzer.md +141 -0
  69. package/.cursor/agents/task-fetcher.md +75 -0
  70. package/.cursor/hooks/cursor-skill-eval.js +66 -6
  71. package/.cursor/skills/api-development/SKILL.md +179 -130
  72. package/.cursor/skills/architecture-design/SKILL.md +102 -212
  73. package/.cursor/skills/backend-annotations/SKILL.md +166 -220
  74. package/.cursor/skills/bug-detective/SKILL.md +225 -186
  75. package/.cursor/skills/code-patterns/SKILL.md +127 -244
  76. package/.cursor/skills/collaborating-with-codex/SKILL.md +96 -113
  77. package/.cursor/skills/crud-development/SKILL.md +226 -307
  78. package/.cursor/skills/data-permission/SKILL.md +131 -202
  79. package/.cursor/skills/database-ops/SKILL.md +158 -355
  80. package/.cursor/skills/error-handler/SKILL.md +224 -285
  81. package/.cursor/skills/file-oss-management/SKILL.md +174 -169
  82. package/.cursor/skills/git-workflow/SKILL.md +123 -341
  83. package/.cursor/skills/json-serialization/SKILL.md +121 -137
  84. package/.cursor/skills/performance-doctor/SKILL.md +83 -89
  85. package/.cursor/skills/redis-cache/SKILL.md +134 -185
  86. package/.cursor/skills/scheduled-jobs/SKILL.md +187 -224
  87. package/.cursor/skills/security-guard/SKILL.md +168 -276
  88. package/.cursor/skills/sms-mail/SKILL.md +266 -228
  89. package/.cursor/skills/social-login/SKILL.md +257 -195
  90. package/.cursor/skills/tenant-management/SKILL.md +172 -188
  91. package/.cursor/skills/utils-toolkit/SKILL.md +214 -222
  92. package/.cursor/skills/websocket-sse/SKILL.md +251 -172
  93. package/.cursor/skills/workflow-engine/SKILL.md +178 -250
  94. package/AGENTS.md +117 -540
  95. package/CLAUDE.md +105 -117
  96. package/README.md +37 -6
  97. package/bin/index.js +5 -1
  98. package/package.json +1 -1
  99. package/src/skills/api-development/SKILL.md +179 -130
  100. package/src/skills/architecture-design/SKILL.md +102 -212
  101. package/src/skills/backend-annotations/SKILL.md +166 -220
  102. package/src/skills/bug-detective/SKILL.md +225 -186
  103. package/src/skills/code-patterns/SKILL.md +127 -244
  104. package/src/skills/collaborating-with-codex/SKILL.md +96 -113
  105. package/src/skills/crud-development/SKILL.md +226 -307
  106. package/src/skills/data-permission/SKILL.md +131 -202
  107. package/src/skills/database-ops/SKILL.md +158 -355
  108. package/src/skills/error-handler/SKILL.md +224 -285
  109. package/src/skills/file-oss-management/SKILL.md +174 -169
  110. package/src/skills/git-workflow/SKILL.md +123 -341
  111. package/src/skills/json-serialization/SKILL.md +121 -137
  112. package/src/skills/performance-doctor/SKILL.md +83 -89
  113. package/src/skills/redis-cache/SKILL.md +134 -185
  114. package/src/skills/scheduled-jobs/SKILL.md +187 -224
  115. package/src/skills/security-guard/SKILL.md +168 -276
  116. package/src/skills/sms-mail/SKILL.md +266 -228
  117. package/src/skills/social-login/SKILL.md +257 -195
  118. package/src/skills/tenant-management/SKILL.md +172 -188
  119. package/src/skills/utils-toolkit/SKILL.md +214 -222
  120. package/src/skills/websocket-sse/SKILL.md +251 -172
  121. package/src/skills/workflow-engine/SKILL.md +178 -250
  122. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  123. package/.claude/skills/skill-creator/SKILL.md +0 -479
  124. package/.claude/skills/skill-creator/agents/analyzer.md +0 -274
  125. package/.claude/skills/skill-creator/agents/comparator.md +0 -202
  126. package/.claude/skills/skill-creator/agents/grader.md +0 -223
  127. package/.claude/skills/skill-creator/assets/eval_review.html +0 -146
  128. package/.claude/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  129. package/.claude/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  130. package/.claude/skills/skill-creator/references/schemas.md +0 -430
  131. package/.claude/skills/skill-creator/scripts/__init__.py +0 -0
  132. package/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  133. package/.claude/skills/skill-creator/scripts/generate_report.py +0 -326
  134. package/.claude/skills/skill-creator/scripts/improve_description.py +0 -248
  135. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -136
  136. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -103
  137. package/.claude/skills/skill-creator/scripts/run_eval.py +0 -310
  138. package/.claude/skills/skill-creator/scripts/run_loop.py +0 -332
  139. package/.claude/skills/skill-creator/scripts/utils.py +0 -47
package/AGENTS.md CHANGED
@@ -1,16 +1,17 @@
1
- # AGENTS.md - RuoYi-Vue-Plus 项目开发规范
1
+ # AGENTS.md - [项目名称] 开发规范
2
+
3
+ > ⚠️ **这是示例模板,安装后请替换为你的项目实际规范**
4
+ > 需要修改:项目名称、技术栈描述、架构规范、禁止事项、代码模板
2
5
 
3
6
  ## 对话语言设置
4
7
 
5
8
  **重要**: 在此代码库中工作时,必须始终使用**中文**与用户对话。
6
9
 
7
- > **项目说明**: 本项目是 **RuoYi-Vue-Plus** 后端框架。
10
+ > **项目说明**:[在此填写你的项目简介,例如:本项目是 XXX 后端服务]
8
11
  >
9
- > **前端代码检测**:
10
- > - 如果存在 `plus-ui/` 目录 → 包含 PC 端前端代码(Vue 3 + Element Plus)
11
- > - 如果不存在 `plus-ui/` 目录 → 纯后端项目,前端需单独获取
12
+ > **技术栈**:[例如:Spring Boot 3.x + MyBatis-Plus + Redis + Sa-Token]
12
13
  >
13
- > 💡 **提示**:首次使用时请检查 `plus-ui/` 目录是否存在,若不存在可从官方仓库克隆。
14
+ > **架构**:[例如:三层架构(Controller Service → Mapper)]
14
15
 
15
16
  ---
16
17
 
@@ -18,11 +19,9 @@
18
19
 
19
20
  | 术语 | 含义 | 对应目录 |
20
21
  |------|------|---------|
21
- | **后端** | Java 服务 | `ruoyi-modules/` |
22
- | **前端** | PC 管理端 | `plus-ui/`(如存在) |
23
- | **系统模块** | 系统管理功能 | `ruoyi-modules/ruoyi-system/` |
24
- | **业务模块** | 自定义业务 | `ruoyi-modules/ruoyi-xxx/` |
25
- | **通用模块** | 公共工具 | `ruoyi-common/` |
22
+ | **后端** | Java 服务 | `[你的模块目录]/` |
23
+ | **前端** | PC 管理端 | `[前端目录]/`(如存在) |
24
+ | **公共模块** | 通用工具 | `[公共模块目录]/` |
26
25
 
27
26
  ---
28
27
 
@@ -31,7 +30,7 @@
31
30
  | 触发词 | 工具 | 用途 |
32
31
  |-------|------|------|
33
32
  | 深度分析、仔细思考、全面评估 | `sequential-thinking` | 链式推理,多步骤分析 |
34
- | 最佳实践、官方文档、标准写法 | `context7` | MyBatis-Plus/Sa-Token/Spring Boot 等 |
33
+ | 最佳实践、官方文档、标准写法 | `context7` | 框架官方文档查询 |
35
34
  | 打开浏览器、截图、检查元素 | `chrome-devtools` | 浏览器调试 |
36
35
 
37
36
  ---
@@ -42,9 +41,8 @@
42
41
 
43
42
  ### 技能系统工作原理
44
43
 
45
- 技能文件存储在 `.claude/skills/[skill-name]/SKILL.md` 中。
44
+ 技能文件存储在 `.codex/skills/[skill-name]/SKILL.md` 中。
46
45
 
47
- **启动时**:自动加载所有技能的 `name` 和 `description`
48
46
  **任务匹配时**:读取匹配技能的完整 SKILL.md 内容
49
47
  **需要时**:可进一步读取技能目录下的 `references/`、`scripts/` 等文件
50
48
 
@@ -52,102 +50,125 @@
52
50
 
53
51
  ## 技能清单与触发条件
54
52
 
55
- 以下是本项目的技能列表,根据 `description` 自动判断何时使用:
56
-
57
53
  ### 后端开发技能
58
54
 
59
55
  | 技能名称 | 触发条件 |
60
56
  |---------|---------|
61
57
  | `crud-development` | CRUD 开发、业务模块、Entity/Service/Mapper 创建 |
62
58
  | `database-ops` | 数据库操作、SQL、建表、字典、菜单配置 |
63
- | `utils-toolkit` | 工具类、StringUtils、MapstructUtils |
64
- | `error-handler` | 异常处理、ServiceException、错误处理 |
65
- | `security-guard` | 安全、Sa-Token、认证授权、加密 |
66
- | `data-permission` | 数据权限、@DataPermission、行级权限 |
67
- | `tenant-management` | 多租户、租户隔离、TenantEntity |
68
- | `workflow-engine` | 工作流、审批流、WarmFlow |
69
- | `scheduled-jobs` | 定时任务、SnailJob、@Scheduled |
70
- | `redis-cache` | Redis、缓存、@Cacheable、分布式锁 |
71
- | `json-serialization` | JSON 序列化、反序列化、JsonUtils |
72
- | `file-oss-management` | 文件上传、OSS、云存储、MinIO |
73
- | `sms-mail` | 短信、邮件、SMS、验证码 |
74
- | `social-login` | 第三方登录、OAuth、JustAuth |
59
+ | `api-development` | API 接口设计、RESTful、接口规范 |
60
+ | `utils-toolkit` | 工具类、StringUtils |
61
+ | `error-handler` | 异常处理、错误处理规范 |
62
+ | `security-guard` | 安全、认证授权、加密 |
63
+ | `data-permission` | 数据权限、行级权限 |
64
+ | `tenant-management` | 多租户、租户隔离 |
65
+ | `workflow-engine` | 工作流、审批流 |
66
+ | `scheduled-jobs` | 定时任务 |
67
+ | `redis-cache` | Redis、缓存、分布式锁 |
68
+ | `json-serialization` | JSON 序列化、反序列化 |
69
+ | `file-oss-management` | 文件上传、OSS、云存储 |
70
+ | `sms-mail` | 短信、邮件发送 |
71
+ | `social-login` | 第三方登录、OAuth |
75
72
  | `websocket-sse` | WebSocket、SSE、实时推送 |
76
-
77
- ### leniu-tengyun-core / leniu-yunshitang 项目专用技能
78
-
79
- | 技能名称 | 触发条件 |
80
- |---------|---------|
81
- | `leniu-crud-development` | CRUD、增删改查、新建模块、Business层、Service、Mapper、Controller、分页查询、LeRequest、PageDTO |
82
- | `leniu-api-development` | API接口、Controller、RESTful、LeResult、LeResponse、LeRequest、接口开发、路由前缀 |
83
- | `leniu-brainstorm` | 头脑风暴、方案设计、怎么设计、创意探索、功能规划、可行性分析 |
84
- | `leniu-architecture-design` | 架构设计、双库架构、商户库、系统库、pigx框架、四层架构、模块划分、Business层 |
85
- | `leniu-database-ops` | 数据库、SQL、建表、双库、商户库、系统库、审计字段、crby、crtime、del_flag |
86
- | `leniu-utils-toolkit` | 工具类、BeanUtil、StrUtil、CollUtil、ObjectUtil、RedisUtil、JacksonUtil、LeBeanUtil |
87
- | `leniu-error-handler` | 异常处理、LeException、全局异常、参数校验、错误码、I18n、国际化 |
88
- | `leniu-backend-annotations` | @RequiresAuthentication、@RequiresGuest、@Validated、@NotNull、@Api、分组校验、InsertGroup |
89
- | `leniu-security-guard` | 安全认证、SQL注入防护、XSS防护、数据脱敏、SM4加密、接口安全、限流 |
90
- | `leniu-data-permission` | 多租户、数据权限、@UseSystem、Executors.doInTenant、TenantContextHolder、MERCHANT-ID、双库隔离 |
91
- | `leniu-redis-cache` | Redis、缓存、RedisUtil、分布式锁、RLock、getLock、setNx、ZSet、限流、缓存击穿 |
92
- | `leniu-code-patterns` | 代码禁令、代码规范、命名规范、代码风格、Git提交规范、包结构、禁止写法、审计字段规范 |
93
- | `leniu-java-entity` | Entity实体类、VO视图对象、DTO数据传输、Param参数类、@TableName、@TableField、字段映射 |
94
- | `leniu-java-logging` | 日志、@Slf4j、log.info、log.error、log.debug、日志级别、logback |
95
- | `leniu-java-mybatis` | MyBatis、MyBatisPlus、Mapper、LambdaQueryWrapper、XML映射、动态SQL、BaseMapper |
96
- | `leniu-java-amount-handling` | 金额处理、分转元、元转分、Long金额、money、fen、BigDecimal金额 |
97
- | `leniu-java-concurrent` | 并发、CompletableFuture、线程池、ThreadPool、并发安全、异步处理 |
98
- | `leniu-java-export` | 导出、Excel导出、异步导出、分页导出、@ExcelProperty、exportApi |
99
- | `leniu-java-mq` | 消息队列、MQ、MqUtil、@MqConsumer、延迟消息、消息重试、事务消息 |
100
- | `leniu-java-task` | 定时任务、XXL-Job、@XxlJob、TenantLoader、任务调度、分布式定时 |
101
- | `leniu-java-report-query-param` | 报表查询入参、Param类、分页参数、时间范围查询、ReportBaseParam、exportCols |
102
- | `leniu-java-total-line` | 合计行、totalLine、报表合计、SUM合计、ReportBaseTotalVO、合计查询 |
103
- | `leniu-mealtime` | 餐次、mealtime、mealtimeType、早餐、午餐、晚餐、下午茶、夜宵、AllocMealtimeTypeEnum |
104
- | `leniu-marketing-price-rule-customizer` | 营销计费、计价规则、RulePriceHandler、RulePriceEnum、折扣规则、满减规则、限额规则 |
105
- | `leniu-marketing-recharge-rule-customizer` | 营销充值、充值规则、RuleRechargeHandler、RuleRechargeEnum、满赠规则、充值赠送 |
106
- | `leniu-report-customization` | 定制报表、汇总报表、report_order_info、report_order_detail、report_account_flow、退款汇总、消费金额统计 |
107
- | `leniu-report-standard-customization` | 标准版报表、core-report、report_refund、经营分析、营业额分析、用户活跃度、菜品排行、操作员统计、账户日结、商户消费汇总 |
108
-
109
- ### 前端开发技能(需 plus-ui 目录存在)
110
-
111
- | 技能名称 | 触发条件 |
112
- |---------|---------|
113
- | `ui-pc` | PC 端页面、Element Plus、表格、表单、弹窗 |
114
- | `store-pc` | Pinia 状态管理、Store、useUserStore |
115
-
116
- > 💡 **提示**:如果 `plus-ui/` 目录不存在,前端技能将不可用。
73
+ | `backend-annotations` | 注解使用规范 |
117
74
 
118
75
  ### 通用技能
119
76
 
120
77
  | 技能名称 | 触发条件 |
121
78
  |---------|---------|
122
79
  | `architecture-design` | 架构设计、模块划分、重构 |
123
- | `code-patterns` | 代码规范、命名、禁止事项、Git 提交 |
124
- | `project-navigator` | 项目结构、文件定位 |
80
+ | `code-patterns` | 代码规范、命名、禁止事项 |
125
81
  | `git-workflow` | Git、提交、commit、分支 |
126
82
  | `tech-decision` | 技术选型、方案对比 |
127
83
  | `brainstorm` | 头脑风暴、创意、方案设计 |
128
84
  | `task-tracker` | 任务跟踪、进度管理 |
129
- | `test-development` | 测试、单元测试、JUnit5、Mockito |
85
+ | `test-development` | 测试、单元测试 |
130
86
  | `bug-detective` | Bug 排查、报错、异常 |
131
87
  | `performance-doctor` | 性能优化、慢查询、缓存 |
132
88
  | `add-skill` | 添加技能、创建技能文档 |
89
+ | `collaborating-with-codex` | 与 Codex 协同分析 |
90
+ | `collaborating-with-gemini` | 与 Gemini 协同设计 |
91
+ | `codex-code-review` | 代码审查 |
133
92
 
134
93
  ### OpenSpec 规格驱动开发技能(SDD)
135
94
 
136
- > 基于 [OpenSpec](https://github.com/Fission-AI/OpenSpec) 的规格驱动开发工作流,需安装 `openspec` CLI。
137
95
  > 完整工作流:`/opsx:new` → `/opsx:ff` → `/opsx:apply` → `/opsx:archive`
138
96
 
139
97
  | 技能名称 | 触发条件 |
140
98
  |---------|---------|
141
- | `openspec-onboard` | 新手引导、学习 OpenSpec 工作流、/opsx:onboard |
142
- | `openspec-explore` | 探索模式、思维伙伴、探索问题设计、/opsx:explore |
143
- | `openspec-new-change` | 新建变更、开始新功能、/opsx:new |
144
- | `openspec-ff-change` | 快速推进所有制品、/opsx:ff、fast-forward |
145
- | `openspec-continue-change` | 继续变更、创建下一个制品、/opsx:continue |
146
- | `openspec-apply-change` | 实现任务、开始编码、/opsx:apply |
147
- | `openspec-verify-change` | 验证实现、检查规格匹配、/opsx:verify |
148
- | `openspec-sync-specs` | 同步规格到主 spec、/opsx:sync |
149
- | `openspec-archive-change` | 归档变更、完成收尾、/opsx:archive |
150
- | `openspec-bulk-archive-change` | 批量归档多个变更、/opsx:bulk-archive |
99
+ | `openspec-new-change` | 新建变更、/opsx:new |
100
+ | `openspec-ff-change` | 快速推进、/opsx:ff |
101
+ | `openspec-apply-change` | 实现任务、/opsx:apply |
102
+ | `openspec-verify-change` | 验证实现、/opsx:verify |
103
+ | `openspec-archive-change` | 归档变更、/opsx:archive |
104
+
105
+ ---
106
+
107
+ ## 多模型分层 Agent 系统
108
+
109
+ > 按思维深度分层,不同 Agent 使用不同模型,各司其职。
110
+
111
+ ### Haiku 层 — 数据获取(快、省)
112
+
113
+ | Agent | 模型 | 职责 | 触发场景 |
114
+ |-------|------|------|---------|
115
+ | `loki-runner` | haiku | Loki 日志查询 + 格式化 | Bug 排查、线上问题、traceId 追踪 |
116
+ | `mysql-runner` | haiku | MySQL 只读查询 + 格式化 | 数据排查、验证数据状态 |
117
+ | `task-fetcher` | haiku | 云效任务获取 + 整理 | 需求同步、任务查询 |
118
+ | `image-reader` | haiku | 截图/图片/Axure原型图内容提取 | 错误截图、表格截图、架构图、Axure原型分析 |
119
+
120
+ ### Sonnet + Codex 层 — 代码分析(理解、推理)
121
+
122
+ | Agent | 模型 | 职责 | 触发场景 |
123
+ |-------|------|------|---------|
124
+ | `bug-analyzer` | sonnet | Bug 根因分析 + Codex 逻辑分析 | 接收 Haiku 层数据后分析根因 |
125
+ | `code-reviewer` | sonnet | 规范检查 + Codex 逻辑审查 | /dev、/crud 完成后、代码审查 |
126
+
127
+ ### Opus 层 — 需求分析 + 架构决策 + 编码
128
+
129
+ | Agent | 模型 | 职责 | 触发场景 |
130
+ |-------|------|------|---------|
131
+ | `requirements-analyzer` | opus | 需求分析,协调 Haiku 层提取数据并输出开发任务清单 | Axure 原型分析、需求转开发任务 |
132
+
133
+ 主会话也使用 Opus 模型,负责:
134
+ - 接收各层 Agent 的结构化结果
135
+ - 做出架构决策
136
+ - 编写核心业务代码
137
+ - 协调各层 Agent 工作
138
+
139
+ ### 协作流程示例
140
+
141
+ ```
142
+ 需求分析流程:
143
+ Opus 主会话 → 启动 requirements-analyzer(Opus)
144
+ └─ 内部并行调用 Haiku 层
145
+ ├─ image-reader(Haiku) → 原型图结构数据
146
+ └─ task-fetcher(Haiku) → 云效任务信息
147
+ └─ 汇总分析 → 输出需求分析报告 + 开发任务清单
148
+
149
+ ▼ 按任务清单开发
150
+ Opus 主会话 → /dev 或 /crud 编写代码
151
+
152
+ ▼ 代码完成
153
+ Opus 主会话 → 启动审查
154
+ └─ code-reviewer(Sonnet+Codex) → 审查报告
155
+
156
+ Bug 修复流程:
157
+ Opus 主会话 → 并行启动 Haiku 层
158
+ ├─ loki-runner(Haiku) → 日志数据
159
+ └─ mysql-runner(Haiku) → 数据库数据
160
+
161
+ ▼ 汇总数据
162
+ Opus 主会话 → 启动 Sonnet 层
163
+ └─ bug-analyzer(Sonnet+Codex) → 根因分析
164
+
165
+ ▼ 分析报告
166
+ Opus 主会话 → 编写修复代码
167
+
168
+ ▼ 代码完成
169
+ Opus 主会话 → 启动审查
170
+ └─ code-reviewer(Sonnet+Codex) → 审查报告
171
+ ```
151
172
 
152
173
  ---
153
174
 
@@ -183,463 +204,31 @@
183
204
 
184
205
  ## 🚫 核心禁止事项
185
206
 
186
- ### 后端禁止项(必须遵守)
187
-
188
- ```java
189
- // ❌ 禁止1: 错误包名
190
- package com.ruoyi.xxx; // 禁止!
191
- package plus.ruoyi.xxx; // 禁止!
192
- // ✅ 正确: org.dromara.xxx
193
-
194
- // ❌ 禁止2: 使用 BeanUtils
195
- BeanUtil.copyProperties(bo, entity); // 禁止!
196
- // ✅ 正确: MapstructUtils.convert(bo, Xxx.class)
197
-
198
- // ❌ 禁止3: 使用 Map 传递业务数据
199
- public Map<String, Object> getXxx() // 禁止!
200
- // ✅ 正确: public XxxVo getXxx()
207
+ > ⚠️ **请替换为你的项目实际禁止事项**
201
208
 
202
- // ❌ 禁止4: Service 继承基类
203
- public class XxxServiceImpl extends ServiceImpl<...> // 禁止!
204
- // ✅ 正确: public class XxxServiceImpl implements IXxxService
205
-
206
- // ❌ 禁止5: 单目标映射使用 @AutoMappers(复数)
207
- @AutoMappers({@AutoMapper(...)}) // 单目标时禁止!
208
- // ✅ 正确: @AutoMapper(target = Xxx.class)
209
- // 💡 例外: 多目标映射(如 SysOperLogBo)可使用 @AutoMappers
210
-
211
- // ❌ 禁止6: 使用完整类型引用
212
- public org.dromara.common.core.domain.R<XxxVo> getXxx() // 禁止!
213
- // ✅ 正确: 先 import,再使用短类名
214
- import org.dromara.common.core.domain.R;
215
- public R<XxxVo> getXxx()
216
-
217
- // ❌ 禁止7: 使用自增 ID
218
- id BIGINT(20) AUTO_INCREMENT // 禁止!
219
- // ✅ 正确: 使用雪花 ID(全局配置)
220
-
221
- // ❌ 禁止8: 创建 DAO 层
222
- private final IXxxDao xxxDao; // 禁止!本项目无 DAO 层
223
- // ✅ 正确: private final XxxMapper baseMapper;
209
+ ```
210
+ // [在此填写你的项目禁止写法]
211
+ // ✅ [在此填写正确写法]
224
212
  ```
225
213
 
226
214
  ---
227
215
 
228
- ## 🏗️ 核心架构(必须牢记)
216
+ ## 🏗️ 核心架构
229
217
 
230
- ### 三层架构(无 DAO 层)
218
+ > ⚠️ **请替换为你的项目实际架构**
231
219
 
232
220
  ```
221
+ [在此描述你的项目架构,例如:]
222
+
233
223
  Controller(接收请求、参数校验)
234
224
 
235
- Service(业务逻辑、buildQueryWrapper 查询构建、直接注入 Mapper)
225
+ Service(业务逻辑)
236
226
 
237
- Mapper(extends BaseMapperPlus<Entity, Vo>)
238
- ```
239
-
240
- **关键点**:
241
- - ✅ Service 层直接注入 Mapper(无 DAO 层)
242
- - ✅ `buildQueryWrapper()` 方法在 **Service 实现类**中
243
- - ✅ Service 实现类**不继承任何基类**
244
- - ✅ Mapper 继承 `BaseMapperPlus<Entity, Vo>`
245
-
246
- ### 模块与表前缀对应
247
-
248
- | 模块 | 表前缀 | 包路径 |
249
- |------|--------|--------|
250
- | system | `sys_` | `org.dromara.system` |
251
- | demo | `test_` | `org.dromara.demo` |
252
- | workflow | `flow_` | `org.dromara.workflow` |
253
- | 自定义 | 自定义 | `org.dromara.xxx` |
254
-
255
- ### 核心类继承关系
256
-
257
- | 类型 | 基类/注解 |
258
- |------|---------|
259
- | Entity | `extends TenantEntity` |
260
- | BO | `@AutoMapper(target = Xxx.class)`(单数) |
261
- | VO | `@AutoMapper(target = Xxx.class)` |
262
- | Mapper | `extends BaseMapperPlus<Xxx, XxxVo>` |
263
- | Service 接口 | `interface IXxxService` |
264
- | Service 实现 | `implements IXxxService`(不继承基类) |
265
- | Controller | `extends BaseController` |
266
-
267
- ---
268
-
269
- ## 📡 API 路径规范
270
-
271
- | 操作 | HTTP方法 | 路径格式 | 示例 |
272
- |------|---------|---------|------|
273
- | 分页查询 | GET | `/list` | `@GetMapping("/list")` |
274
- | 获取详情 | GET | `/{id}` | `@GetMapping("/{id}")` |
275
- | 新增 | POST | `/`(空) | `@PostMapping` |
276
- | 修改 | PUT | `/`(空) | `@PutMapping` |
277
- | 删除 | DELETE | `/{ids}` | `@DeleteMapping("/{ids}")` |
278
- | 导出 | POST | `/export` | `@PostMapping("/export")` |
279
-
280
- ---
281
-
282
- ## 📋 标准代码模板
283
-
284
- ### 1. Service 实现类(核心模板)
285
-
286
- ```java
287
- package org.dromara.demo.service.impl;
288
-
289
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
290
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
291
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
292
- import lombok.RequiredArgsConstructor;
293
- import org.springframework.stereotype.Service;
294
- import org.dromara.common.core.utils.MapstructUtils;
295
- import org.dromara.common.core.utils.StringUtils;
296
- import org.dromara.common.mybatis.core.page.PageQuery;
297
- import org.dromara.common.mybatis.core.page.TableDataInfo;
298
- import org.dromara.demo.domain.Xxx;
299
- import org.dromara.demo.domain.bo.XxxBo;
300
- import org.dromara.demo.domain.vo.XxxVo;
301
- import org.dromara.demo.mapper.XxxMapper;
302
- import org.dromara.demo.service.IXxxService;
303
- import java.util.Collection;
304
- import java.util.List;
305
- import java.util.Map;
306
-
307
- @Service
308
- @RequiredArgsConstructor
309
- public class XxxServiceImpl implements IXxxService { // ✅ 不继承任何基类
310
-
311
- private final XxxMapper baseMapper; // ✅ 直接注入 Mapper(无 DAO 层)
312
-
313
- @Override
314
- public XxxVo queryById(Long id) {
315
- return baseMapper.selectVoById(id);
316
- }
317
-
318
- @Override
319
- public TableDataInfo<XxxVo> queryPageList(XxxBo bo, PageQuery pageQuery) {
320
- LambdaQueryWrapper<Xxx> lqw = buildQueryWrapper(bo); // ✅ Service 层构建查询
321
- Page<XxxVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
322
- return TableDataInfo.build(result);
323
- }
324
-
325
- @Override
326
- public Boolean insertByBo(XxxBo bo) {
327
- Xxx add = MapstructUtils.convert(bo, Xxx.class); // ✅ MapstructUtils 转换
328
- return baseMapper.insert(add) > 0;
329
- }
330
-
331
- @Override
332
- public Boolean updateByBo(XxxBo bo) {
333
- Xxx update = MapstructUtils.convert(bo, Xxx.class);
334
- return baseMapper.updateById(update) > 0;
335
- }
336
-
337
- @Override
338
- public Boolean deleteByIds(Collection<Long> ids) {
339
- return baseMapper.deleteByIds(ids) > 0;
340
- }
341
-
342
- /**
343
- * 构建查询条件
344
- * ⭐ 在 Service 层构建(不是 DAO 层)
345
- */
346
- private LambdaQueryWrapper<Xxx> buildQueryWrapper(XxxBo bo) {
347
- Map<String, Object> params = bo.getParams();
348
- LambdaQueryWrapper<Xxx> lqw = Wrappers.lambdaQuery();
349
- lqw.eq(bo.getId() != null, Xxx::getId, bo.getId());
350
- lqw.eq(StringUtils.isNotBlank(bo.getStatus()), Xxx::getStatus, bo.getStatus());
351
- lqw.like(StringUtils.isNotBlank(bo.getXxxName()), Xxx::getXxxName, bo.getXxxName());
352
- lqw.orderByDesc(Xxx::getCreateTime);
353
- return lqw;
354
- }
355
- }
356
- ```
357
-
358
- ### 2. Entity 实体类
359
-
360
- ```java
361
- package org.dromara.demo.domain;
362
-
363
- import org.dromara.common.tenant.core.TenantEntity;
364
- import com.baomidou.mybatisplus.annotation.*;
365
- import lombok.Data;
366
- import lombok.EqualsAndHashCode;
367
- import java.io.Serial;
368
-
369
- @Data
370
- @EqualsAndHashCode(callSuper = true)
371
- @TableName("test_xxx")
372
- public class Xxx extends TenantEntity { // ✅ 继承 TenantEntity
373
-
374
- @Serial
375
- private static final long serialVersionUID = 1L;
376
-
377
- @TableId(value = "id")
378
- private Long id;
379
-
380
- private String xxxName;
381
-
382
- private String status;
383
- }
384
- ```
385
-
386
- ### 3. BO 业务对象
387
-
388
- ```java
389
- package org.dromara.demo.domain.bo;
390
-
391
- import io.github.linpeilie.annotations.AutoMapper;
392
- import org.dromara.demo.domain.Xxx;
393
- import org.dromara.common.core.validate.AddGroup;
394
- import org.dromara.common.core.validate.EditGroup;
395
- import org.dromara.common.mybatis.core.domain.BaseEntity;
396
- import lombok.Data;
397
- import lombok.EqualsAndHashCode;
398
- import jakarta.validation.constraints.*;
399
-
400
- @Data
401
- @EqualsAndHashCode(callSuper = true)
402
- @AutoMapper(target = Xxx.class, reverseConvertGenerate = false) // ✅ 单数!
403
- public class XxxBo extends BaseEntity {
404
-
405
- @NotNull(message = "ID不能为空", groups = {EditGroup.class})
406
- private Long id;
407
-
408
- @NotBlank(message = "名称不能为空", groups = {AddGroup.class, EditGroup.class})
409
- private String xxxName;
410
-
411
- private String status;
412
- }
413
- ```
414
-
415
- ### 4. VO 视图对象
416
-
417
- ```java
418
- package org.dromara.demo.domain.vo;
419
-
420
- import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
421
- import cn.idev.excel.annotation.ExcelProperty;
422
- import io.github.linpeilie.annotations.AutoMapper;
423
- import lombok.Data;
424
- import org.dromara.demo.domain.Xxx;
425
- import java.io.Serial;
426
- import java.io.Serializable;
427
- import java.util.Date;
428
-
429
- @Data
430
- @ExcelIgnoreUnannotated
431
- @AutoMapper(target = Xxx.class)
432
- public class XxxVo implements Serializable {
433
-
434
- @Serial
435
- private static final long serialVersionUID = 1L;
436
-
437
- @ExcelProperty(value = "ID")
438
- private Long id;
439
-
440
- @ExcelProperty(value = "名称")
441
- private String xxxName;
442
-
443
- @ExcelProperty(value = "状态")
444
- private String status;
445
-
446
- @ExcelProperty(value = "创建时间")
447
- private Date createTime;
448
- }
449
- ```
450
-
451
- ### 5. Mapper 接口
452
-
453
- ```java
454
- package org.dromara.demo.mapper;
455
-
456
- import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
457
- import org.dromara.demo.domain.Xxx;
458
- import org.dromara.demo.domain.vo.XxxVo;
459
-
460
- public interface XxxMapper extends BaseMapperPlus<Xxx, XxxVo> {
461
- // ✅ 继承 BaseMapperPlus,已提供 selectVoById、selectVoPage 等方法
462
- }
463
- ```
464
-
465
- ### 6. Controller 控制器
466
-
467
- ```java
468
- package org.dromara.demo.controller;
469
-
470
- import cn.dev33.satoken.annotation.SaCheckPermission;
471
- import jakarta.servlet.http.HttpServletResponse;
472
- import jakarta.validation.constraints.*;
473
- import lombok.RequiredArgsConstructor;
474
- import org.dromara.common.core.domain.R;
475
- import org.dromara.common.core.validate.AddGroup;
476
- import org.dromara.common.core.validate.EditGroup;
477
- import org.dromara.common.excel.utils.ExcelUtil;
478
- import org.dromara.common.log.annotation.Log;
479
- import org.dromara.common.log.enums.BusinessType;
480
- import org.dromara.common.mybatis.core.page.PageQuery;
481
- import org.dromara.common.mybatis.core.page.TableDataInfo;
482
- import org.dromara.common.web.core.BaseController;
483
- import org.dromara.demo.domain.bo.XxxBo;
484
- import org.dromara.demo.domain.vo.XxxVo;
485
- import org.dromara.demo.service.IXxxService;
486
- import org.springframework.validation.annotation.Validated;
487
- import org.springframework.web.bind.annotation.*;
488
- import java.util.List;
489
-
490
- @Validated
491
- @RequiredArgsConstructor
492
- @RestController
493
- @RequestMapping("/demo/xxx")
494
- public class XxxController extends BaseController { // ✅ 继承 BaseController
495
-
496
- private final IXxxService xxxService;
497
-
498
- @SaCheckPermission("demo:xxx:list")
499
- @GetMapping("/list") // ✅ 标准路径
500
- public TableDataInfo<XxxVo> list(XxxBo bo, PageQuery pageQuery) {
501
- return xxxService.queryPageList(bo, pageQuery);
502
- }
503
-
504
- @SaCheckPermission("demo:xxx:query")
505
- @GetMapping("/{id}") // ✅ 标准路径
506
- public R<XxxVo> getInfo(@NotNull(message = "ID不能为空") @PathVariable Long id) {
507
- return R.ok(xxxService.queryById(id));
508
- }
509
-
510
- @SaCheckPermission("demo:xxx:add")
511
- @Log(title = "XXX管理", businessType = BusinessType.INSERT)
512
- @PostMapping // ✅ 空路径
513
- public R<Void> add(@Validated(AddGroup.class) @RequestBody XxxBo bo) {
514
- return toAjax(xxxService.insertByBo(bo));
515
- }
516
-
517
- @SaCheckPermission("demo:xxx:edit")
518
- @Log(title = "XXX管理", businessType = BusinessType.UPDATE)
519
- @PutMapping // ✅ 空路径
520
- public R<Void> edit(@Validated(EditGroup.class) @RequestBody XxxBo bo) {
521
- return toAjax(xxxService.updateByBo(bo));
522
- }
523
-
524
- @SaCheckPermission("demo:xxx:remove")
525
- @Log(title = "XXX管理", businessType = BusinessType.DELETE)
526
- @DeleteMapping("/{ids}") // ✅ 标准路径
527
- public R<Void> remove(@NotEmpty(message = "ID不能为空") @PathVariable Long[] ids) {
528
- return toAjax(xxxService.deleteByIds(List.of(ids)));
529
- }
530
-
531
- @SaCheckPermission("demo:xxx:export")
532
- @Log(title = "XXX管理", businessType = BusinessType.EXPORT)
533
- @PostMapping("/export")
534
- public void export(XxxBo bo, HttpServletResponse response) {
535
- List<XxxVo> list = xxxService.queryList(bo);
536
- ExcelUtil.exportExcel(list, "XXX数据", XxxVo.class, response);
537
- }
538
- }
227
+ Mapper(数据访问)
539
228
  ```
540
229
 
541
230
  ---
542
231
 
543
- ## 🤖 AI 写代码前强制检查清单
544
-
545
- **在输出代码给用户之前,必须确认:**
546
-
547
- ### 架构设计检查
548
-
549
- - [ ] **包名是否是 `org.dromara.*`**?(不是 `com.ruoyi.*` 或 `plus.ruoyi.*`)
550
- - [ ] **Service 是否不继承任何基类**?(只 implements 接口)
551
- - [ ] **Service 是否直接注入 Mapper**?(无 DAO 层)
552
- - [ ] **buildQueryWrapper() 是否在 Service 层**?
553
- - [ ] **Entity 是否继承 `TenantEntity`**?
554
- - [ ] **BO 是否使用 `@AutoMapper`(单数)**?
555
- - [ ] **Mapper 是否继承 `BaseMapperPlus<Entity, VO>`**?
556
- - [ ] **Controller 是否继承 `BaseController`**?
557
-
558
- ### 代码质量检查
559
-
560
- - [ ] **是否使用了完整包名引用**?(必须先 import)
561
- - [ ] **是否使用了 `Map<String, Object>` 传递业务数据**?(必须用 VO)
562
- - [ ] **是否使用了 `MapstructUtils.convert()` 转换对象**?(禁止 BeanUtils)
563
- - [ ] **API 路径是否使用标准 RESTful 格式**?(/list、/{id})
564
- - [ ] **主键是否使用雪花 ID**?(无 AUTO_INCREMENT)
565
-
566
- ### 🔴 如果任何一项检查失败,必须修正后再输出!
567
-
568
- ---
569
-
570
- ## 📁 项目结构
571
-
572
- ```
573
- RuoYi-Vue-Plus/
574
- ├── plus-ui/ # 🖥️ PC 端前端(如存在)
575
- │ ├── src/
576
- │ │ ├── api/ # API 接口定义
577
- │ │ ├── components/ # 公共组件
578
- │ │ ├── views/ # 页面视图
579
- │ │ └── store/ # Pinia 状态管理
580
- │ └── package.json
581
-
582
- ├── ruoyi-admin/ # 后端启动入口
583
- │ └── src/main/resources/
584
- │ ├── application.yml # 主配置
585
- │ └── application-dev.yml # 开发环境配置
586
-
587
- ├── ruoyi-common/ # 通用工具模块(24个子模块)
588
- │ ├── ruoyi-common-core/ # 核心工具(MapstructUtils, StringUtils)
589
- │ ├── ruoyi-common-mybatis/ # MyBatis-Plus 扩展(BaseMapperPlus)
590
- │ ├── ruoyi-common-tenant/ # 多租户(TenantEntity)
591
- │ └── ... # 其他模块
592
-
593
- ├── ruoyi-modules/ # 业务功能模块
594
- │ ├── ruoyi-system/ # 系统管理模块(sys_*)
595
- │ ├── ruoyi-demo/ # 演示模块(test_*)⭐ 参考实现
596
- │ ├── ruoyi-generator/ # 代码生成器
597
- │ ├── ruoyi-job/ # 定时任务(SnailJob)
598
- │ └── ruoyi-workflow/ # 工作流(WarmFlow)
599
-
600
- ├── script/sql/ # 数据库脚本
601
- │ └── ry_vue_5.X.sql # 系统表初始化
602
-
603
- ├── .claude/ # Claude AI 配置
604
- │ ├── skills/ # 技能库
605
- │ └── docs/ # 开发文档
606
-
607
- └── pom.xml # Maven 项目配置
608
- ```
609
-
610
- > 💡 **注意**:如果 `plus-ui/` 目录不存在,说明当前是纯后端项目,前端代码需从官方仓库单独获取。
611
-
612
- ---
613
-
614
- ## 📚 参考实现
615
-
616
- 开发新功能时,请参考 `ruoyi-demo` 模块的 TestDemo 实现:
617
-
618
- | 类型 | 参考文件 |
619
- |------|---------|
620
- | Entity | `org.dromara.demo.domain.TestDemo` |
621
- | BO | `org.dromara.demo.domain.bo.TestDemoBo` |
622
- | VO | `org.dromara.demo.domain.vo.TestDemoVo` |
623
- | Service | `org.dromara.demo.service.impl.TestDemoServiceImpl` |
624
- | Mapper | `org.dromara.demo.mapper.TestDemoMapper` |
625
- | Controller | `org.dromara.demo.controller.TestDemoController` |
626
-
627
- ---
628
-
629
- ## 📖 深度参考(按需查阅)
630
-
631
- 开发遇到问题时查阅对应指南:
632
-
633
- | 文档 | 位置 | 用途 |
634
- |------|------|------|
635
- | 后端开发指南 | `.claude/docs/后端开发指南.md` | 架构理解、业务开发 |
636
- | 前端开发指南 | `.claude/docs/前端开发指南.md` | 后端与前端协作规范 |
637
- | 工作流开发指南 | `.claude/docs/工作流开发指南.md` | WarmFlow 集成 |
638
- | 工具类使用指南 | `.claude/docs/工具类使用指南.md` | 工具类完整用法 |
639
- | 数据库设计规范 | `.claude/docs/数据库设计规范.md` | 表设计、索引优化 |
640
-
641
- ---
642
-
643
232
  ## 快速命令
644
233
 
645
234
  | 命令 | 用途 |
@@ -652,20 +241,8 @@ RuoYi-Vue-Plus/
652
241
 
653
242
  ---
654
243
 
655
- ## 🎯 核心原则
656
-
657
- **三层架构**:Controller → Service → Mapper(**无 DAO 层**)
244
+ ## 🤝 维护与贡献 Skills
658
245
 
659
- **包名规范**:`org.dromara.*`
660
-
661
- **对象转换**:`MapstructUtils.convert()`
662
-
663
- **BO 注解**:`@AutoMapper`(单数)
664
-
665
- **主键策略**:雪花 ID
666
-
667
- **RESTful 路径**:`/list`、`/{id}`、`/`、`/{ids}`
668
-
669
- ---
246
+ > 团队成员可以在本地修改 Skills 并将改动贡献回框架
670
247
 
671
- > **最后提醒**: 写代码前先阅读本项目的参考实现(TestDemo),严格遵循三层架构规范!
248
+ 详见 [CONTRIBUTING.md](./CONTRIBUTING.md)