leniu-dev 2.0.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 (670) hide show
  1. package/.claude/agents/auto-test-generator.md +315 -0
  2. package/.claude/agents/bug-analyzer.md +103 -0
  3. package/.claude/agents/code-reviewer.md +122 -0
  4. package/.claude/agents/code-scanner.md +145 -0
  5. package/.claude/agents/image-reader.md +154 -0
  6. package/.claude/agents/loki-runner.md +80 -0
  7. package/.claude/agents/mysql-runner.md +81 -0
  8. package/.claude/agents/project-manager.md +159 -0
  9. package/.claude/agents/requirements-analyzer.md +175 -0
  10. package/.claude/agents/task-fetcher.md +75 -0
  11. package/.claude/audio/completed.wav +0 -0
  12. package/.claude/commands/add-todo.md +255 -0
  13. package/.claude/commands/auto-test.md +252 -0
  14. package/.claude/commands/check.md +210 -0
  15. package/.claude/commands/crud.md +454 -0
  16. package/.claude/commands/dev.md +532 -0
  17. package/.claude/commands/init-config.md +154 -0
  18. package/.claude/commands/init-docs.md +681 -0
  19. package/.claude/commands/next.md +281 -0
  20. package/.claude/commands/opsx-apply.md +147 -0
  21. package/.claude/commands/opsx-archive.md +105 -0
  22. package/.claude/commands/opsx-bulk-archive.md +237 -0
  23. package/.claude/commands/opsx-continue.md +109 -0
  24. package/.claude/commands/opsx-explore.md +281 -0
  25. package/.claude/commands/opsx-ff.md +92 -0
  26. package/.claude/commands/opsx-new.md +65 -0
  27. package/.claude/commands/opsx-onboard.md +397 -0
  28. package/.claude/commands/opsx-sync.md +129 -0
  29. package/.claude/commands/opsx-verify.md +159 -0
  30. package/.claude/commands/progress.md +264 -0
  31. package/.claude/commands/release.md +109 -0
  32. package/.claude/commands/start.md +199 -0
  33. package/.claude/commands/sync.md +307 -0
  34. package/.claude/commands/update-status.md +428 -0
  35. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  36. package/.claude/docs/README.md +167 -0
  37. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  38. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  39. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  40. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  41. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  42. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  43. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  44. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  45. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  46. package/.claude/framework-config.json +73 -0
  47. package/.claude/hooks/lib/notify.js +310 -0
  48. package/.claude/hooks/pre-tool-use.js +117 -0
  49. package/.claude/hooks/skill-forced-eval.js +161 -0
  50. package/.claude/hooks/stop.js +55 -0
  51. package/.claude/notify-config.json +9 -0
  52. package/.claude/settings.json +57 -0
  53. package/.claude/skills/add-skill/SKILL.md +488 -0
  54. package/.claude/skills/analyze-requirements/SKILL.md +112 -0
  55. package/.claude/skills/api-development/SKILL.md +315 -0
  56. package/.claude/skills/architecture-design/SKILL.md +152 -0
  57. package/.claude/skills/auto-test/SKILL.md +625 -0
  58. package/.claude/skills/auto-test/references/api-conventions.md +260 -0
  59. package/.claude/skills/backend-annotations/SKILL.md +248 -0
  60. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  61. package/.claude/skills/banana-image/README.md +146 -0
  62. package/.claude/skills/banana-image/SKILL.md +171 -0
  63. package/.claude/skills/banana-image/assets/logo.png +0 -0
  64. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  65. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  66. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  67. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  68. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  69. package/.claude/skills/banana-image/scripts/package.json +18 -0
  70. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  71. package/.claude/skills/banana-image/templates/poster.json +22 -0
  72. package/.claude/skills/banana-image/templates/product.json +17 -0
  73. package/.claude/skills/banana-image/templates/social.json +22 -0
  74. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  75. package/.claude/skills/brainstorm/SKILL.md +216 -0
  76. package/.claude/skills/bug-detective/SKILL.md +295 -0
  77. package/.claude/skills/bug-detective/references/error-patterns.md +242 -0
  78. package/.claude/skills/chrome-cdp/SKILL.md +81 -0
  79. package/.claude/skills/chrome-cdp/scripts/cdp.mjs +838 -0
  80. package/.claude/skills/chrome-cdp/scripts/run-cdp.sh +7 -0
  81. package/.claude/skills/code-patterns/SKILL.md +163 -0
  82. package/.claude/skills/code-patterns/references/leniu-code-patterns.md +87 -0
  83. package/.claude/skills/codex-code-review/SKILL.md +327 -0
  84. package/.claude/skills/collaborating-with-codex/SKILL.md +180 -0
  85. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  86. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  87. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  88. package/.claude/skills/crud-development/SKILL.md +328 -0
  89. package/.claude/skills/data-permission/SKILL.md +221 -0
  90. package/.claude/skills/data-permission/references/custom-data-scope.md +90 -0
  91. package/.claude/skills/database-ops/SKILL.md +210 -0
  92. package/.claude/skills/error-handler/SKILL.md +310 -0
  93. package/.claude/skills/file-oss-management/SKILL.md +260 -0
  94. package/.claude/skills/file-oss-management/references/entities.md +105 -0
  95. package/.claude/skills/file-oss-management/references/service-impl.md +104 -0
  96. package/.claude/skills/fix-bug/SKILL.md +269 -0
  97. package/.claude/skills/git-workflow/SKILL.md +179 -0
  98. package/.claude/skills/jenkins-deploy/SKILL.md +134 -0
  99. package/.claude/skills/jenkins-deploy/assets/env_param.template.json +51 -0
  100. package/.claude/skills/jenkins-deploy/assets/jk_build.py +400 -0
  101. package/.claude/skills/json-serialization/SKILL.md +341 -0
  102. package/.claude/skills/lanhu-design/SKILL.md +99 -0
  103. package/.claude/skills/leniu-api-development/SKILL.md +319 -0
  104. package/.claude/skills/leniu-api-development/references/real-examples.md +273 -0
  105. package/.claude/skills/leniu-architecture-design/SKILL.md +383 -0
  106. package/.claude/skills/leniu-backend-annotations/SKILL.md +277 -0
  107. package/.claude/skills/leniu-brainstorm/SKILL.md +242 -0
  108. package/.claude/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
  109. package/.claude/skills/leniu-code-patterns/SKILL.md +411 -0
  110. package/.claude/skills/leniu-crud-development/SKILL.md +404 -0
  111. package/.claude/skills/leniu-crud-development/references/templates.md +597 -0
  112. package/.claude/skills/leniu-customization-location/SKILL.md +410 -0
  113. package/.claude/skills/leniu-data-permission/SKILL.md +341 -0
  114. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  115. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  116. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  117. package/.claude/skills/leniu-java-entity/SKILL.md +237 -0
  118. package/.claude/skills/leniu-java-entity/references/templates.md +237 -0
  119. package/.claude/skills/leniu-java-logging/SKILL.md +229 -0
  120. package/.claude/skills/leniu-java-logging/references/data-mask.md +46 -0
  121. package/.claude/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
  122. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  123. package/.claude/skills/leniu-java-mybatis/SKILL.md +267 -0
  124. package/.claude/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
  125. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  126. package/.claude/skills/leniu-marketing-scenario/SKILL.md +448 -0
  127. package/.claude/skills/leniu-marketing-scenario/references/pay-meal-rules.md +197 -0
  128. package/.claude/skills/leniu-marketing-scenario/references/price-rules.md +286 -0
  129. package/.claude/skills/leniu-marketing-scenario/references/recharge-rules.md +188 -0
  130. package/.claude/skills/leniu-redis-cache/SKILL.md +331 -0
  131. package/.claude/skills/leniu-report-scenario/SKILL.md +508 -0
  132. package/.claude/skills/leniu-report-scenario/references/amount-handling.md +448 -0
  133. package/.claude/skills/leniu-report-scenario/references/analysis-module.md +64 -0
  134. package/.claude/skills/leniu-report-scenario/references/customization-table-fields.md +93 -0
  135. package/.claude/skills/leniu-report-scenario/references/customization.md +356 -0
  136. package/.claude/skills/leniu-report-scenario/references/data-permission.md +182 -0
  137. package/.claude/skills/leniu-report-scenario/references/export.md +553 -0
  138. package/.claude/skills/leniu-report-scenario/references/mealtime.md +197 -0
  139. package/.claude/skills/leniu-report-scenario/references/query-param.md +274 -0
  140. package/.claude/skills/leniu-report-scenario/references/report-tables.md +162 -0
  141. package/.claude/skills/leniu-report-scenario/references/standard-customization.md +112 -0
  142. package/.claude/skills/leniu-report-scenario/references/standard-table-fields.md +113 -0
  143. package/.claude/skills/leniu-report-scenario/references/total-line.md +179 -0
  144. package/.claude/skills/leniu-security-guard/SKILL.md +306 -0
  145. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  146. package/.claude/skills/loki-log-query/SKILL.md +430 -0
  147. package/.claude/skills/mysql-debug/SKILL.md +406 -0
  148. package/.claude/skills/performance-doctor/SKILL.md +297 -0
  149. package/.claude/skills/project-navigator/SKILL.md +211 -0
  150. package/.claude/skills/redis-cache/SKILL.md +282 -0
  151. package/.claude/skills/redis-cache/references/listeners.md +23 -0
  152. package/.claude/skills/scheduled-jobs/SKILL.md +277 -0
  153. package/.claude/skills/security-guard/SKILL.md +245 -0
  154. package/.claude/skills/security-guard/references/encrypt-config.md +103 -0
  155. package/.claude/skills/security-guard/references/sensitive-strategies.md +42 -0
  156. package/.claude/skills/sms-mail/SKILL.md +346 -0
  157. package/.claude/skills/sms-mail/references/mail-config.md +88 -0
  158. package/.claude/skills/sms-mail/references/sms-config.md +74 -0
  159. package/.claude/skills/social-login/SKILL.md +328 -0
  160. package/.claude/skills/social-login/references/provider-configs.md +118 -0
  161. package/.claude/skills/store-pc/SKILL.md +366 -0
  162. package/.claude/skills/sync-back-merge/SKILL.md +66 -0
  163. package/.claude/skills/task-tracker/SKILL.md +307 -0
  164. package/.claude/skills/tech-decision/SKILL.md +393 -0
  165. package/.claude/skills/tenant-management/SKILL.md +272 -0
  166. package/.claude/skills/tenant-management/references/tenant-scenarios.md +91 -0
  167. package/.claude/skills/test-development/SKILL.md +301 -0
  168. package/.claude/skills/test-development/references/parameterized-examples.md +119 -0
  169. package/.claude/skills/ui-pc/SKILL.md +438 -0
  170. package/.claude/skills/utils-toolkit/SKILL.md +354 -0
  171. package/.claude/skills/utils-toolkit/references/redis-utils-api.md +56 -0
  172. package/.claude/skills/websocket-sse/SKILL.md +350 -0
  173. package/.claude/skills/workflow-engine/SKILL.md +249 -0
  174. package/.claude/skills/yunxiao-task-management/SKILL.md +401 -0
  175. package/.claude/skills/yunxiao-task-management/templates//346/217/220/346/265/213/345/215/225/346/250/241/346/235/277.html +17 -0
  176. package/.claude/templates/env-config.md +27 -0
  177. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  178. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  179. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  180. package/.codex/skills/add-skill/SKILL.md +488 -0
  181. package/.codex/skills/add-todo/SKILL.md +269 -0
  182. package/.codex/skills/analyze-requirements/SKILL.md +112 -0
  183. package/.codex/skills/api-development/SKILL.md +315 -0
  184. package/.codex/skills/architecture-design/SKILL.md +152 -0
  185. package/.codex/skills/auto-test/SKILL.md +453 -0
  186. package/.codex/skills/auto-test/references/api-conventions.md +260 -0
  187. package/.codex/skills/backend-annotations/SKILL.md +248 -0
  188. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  189. package/.codex/skills/banana-image/README.md +146 -0
  190. package/.codex/skills/banana-image/SKILL.md +171 -0
  191. package/.codex/skills/banana-image/assets/logo.png +0 -0
  192. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  193. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  194. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  195. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  196. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  197. package/.codex/skills/banana-image/scripts/package.json +18 -0
  198. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  199. package/.codex/skills/banana-image/templates/poster.json +22 -0
  200. package/.codex/skills/banana-image/templates/product.json +17 -0
  201. package/.codex/skills/banana-image/templates/social.json +22 -0
  202. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  203. package/.codex/skills/brainstorm/SKILL.md +216 -0
  204. package/.codex/skills/bug-detective/SKILL.md +295 -0
  205. package/.codex/skills/bug-detective/references/error-patterns.md +242 -0
  206. package/.codex/skills/check/SKILL.md +367 -0
  207. package/.codex/skills/code-patterns/SKILL.md +163 -0
  208. package/.codex/skills/code-patterns/references/leniu-code-patterns.md +87 -0
  209. package/.codex/skills/collaborating-with-codex/SKILL.md +180 -0
  210. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  211. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  212. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  213. package/.codex/skills/crud/SKILL.md +265 -0
  214. package/.codex/skills/crud-development/SKILL.md +328 -0
  215. package/.codex/skills/data-permission/SKILL.md +221 -0
  216. package/.codex/skills/data-permission/references/custom-data-scope.md +90 -0
  217. package/.codex/skills/database-ops/SKILL.md +210 -0
  218. package/.codex/skills/dev/SKILL.md +187 -0
  219. package/.codex/skills/error-handler/SKILL.md +310 -0
  220. package/.codex/skills/file-oss-management/SKILL.md +260 -0
  221. package/.codex/skills/file-oss-management/references/entities.md +105 -0
  222. package/.codex/skills/file-oss-management/references/service-impl.md +104 -0
  223. package/.codex/skills/fix-bug/SKILL.md +269 -0
  224. package/.codex/skills/git-workflow/SKILL.md +179 -0
  225. package/.codex/skills/init-docs/SKILL.md +194 -0
  226. package/.codex/skills/jenkins-deploy/SKILL.md +134 -0
  227. package/.codex/skills/json-serialization/SKILL.md +341 -0
  228. package/.codex/skills/lanhu-design/SKILL.md +99 -0
  229. package/.codex/skills/leniu-api-development/SKILL.md +319 -0
  230. package/.codex/skills/leniu-api-development/references/real-examples.md +273 -0
  231. package/.codex/skills/leniu-architecture-design/SKILL.md +383 -0
  232. package/.codex/skills/leniu-backend-annotations/SKILL.md +277 -0
  233. package/.codex/skills/leniu-brainstorm/SKILL.md +242 -0
  234. package/.codex/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
  235. package/.codex/skills/leniu-code-patterns/SKILL.md +411 -0
  236. package/.codex/skills/leniu-crud-development/SKILL.md +404 -0
  237. package/.codex/skills/leniu-crud-development/references/templates.md +597 -0
  238. package/.codex/skills/leniu-customization-location/SKILL.md +410 -0
  239. package/.codex/skills/leniu-data-permission/SKILL.md +341 -0
  240. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  241. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  242. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  243. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  244. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  245. package/.codex/skills/leniu-java-entity/SKILL.md +237 -0
  246. package/.codex/skills/leniu-java-entity/references/templates.md +237 -0
  247. package/.codex/skills/leniu-java-logging/SKILL.md +229 -0
  248. package/.codex/skills/leniu-java-logging/references/data-mask.md +46 -0
  249. package/.codex/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
  250. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  251. package/.codex/skills/leniu-java-mybatis/SKILL.md +267 -0
  252. package/.codex/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
  253. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  254. package/.codex/skills/leniu-marketing-scenario/SKILL.md +448 -0
  255. package/.codex/skills/leniu-marketing-scenario/references/pay-meal-rules.md +197 -0
  256. package/.codex/skills/leniu-marketing-scenario/references/price-rules.md +286 -0
  257. package/.codex/skills/leniu-marketing-scenario/references/recharge-rules.md +188 -0
  258. package/.codex/skills/leniu-redis-cache/SKILL.md +331 -0
  259. package/.codex/skills/leniu-report-scenario/SKILL.md +508 -0
  260. package/.codex/skills/leniu-report-scenario/references/amount-handling.md +448 -0
  261. package/.codex/skills/leniu-report-scenario/references/analysis-module.md +64 -0
  262. package/.codex/skills/leniu-report-scenario/references/customization-table-fields.md +93 -0
  263. package/.codex/skills/leniu-report-scenario/references/customization.md +356 -0
  264. package/.codex/skills/leniu-report-scenario/references/data-permission.md +182 -0
  265. package/.codex/skills/leniu-report-scenario/references/export.md +553 -0
  266. package/.codex/skills/leniu-report-scenario/references/mealtime.md +197 -0
  267. package/.codex/skills/leniu-report-scenario/references/query-param.md +274 -0
  268. package/.codex/skills/leniu-report-scenario/references/report-tables.md +162 -0
  269. package/.codex/skills/leniu-report-scenario/references/standard-customization.md +112 -0
  270. package/.codex/skills/leniu-report-scenario/references/standard-table-fields.md +113 -0
  271. package/.codex/skills/leniu-report-scenario/references/total-line.md +179 -0
  272. package/.codex/skills/leniu-security-guard/SKILL.md +306 -0
  273. package/.codex/skills/leniu-utils-toolkit/SKILL.md +380 -0
  274. package/.codex/skills/loki-log-query/SKILL.md +430 -0
  275. package/.codex/skills/loki-log-query/environments.json +45 -0
  276. package/.codex/skills/mysql-debug/SKILL.md +406 -0
  277. package/.codex/skills/next/SKILL.md +137 -0
  278. package/.codex/skills/openspec-apply-change/SKILL.md +165 -0
  279. package/.codex/skills/openspec-archive-change/SKILL.md +122 -0
  280. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +254 -0
  281. package/.codex/skills/openspec-continue-change/SKILL.md +126 -0
  282. package/.codex/skills/openspec-explore/SKILL.md +299 -0
  283. package/.codex/skills/openspec-ff-change/SKILL.md +109 -0
  284. package/.codex/skills/openspec-new-change/SKILL.md +82 -0
  285. package/.codex/skills/openspec-onboard/SKILL.md +414 -0
  286. package/.codex/skills/openspec-sync-specs/SKILL.md +146 -0
  287. package/.codex/skills/openspec-verify-change/SKILL.md +176 -0
  288. package/.codex/skills/performance-doctor/SKILL.md +297 -0
  289. package/.codex/skills/progress/SKILL.md +193 -0
  290. package/.codex/skills/project-navigator/SKILL.md +211 -0
  291. package/.codex/skills/redis-cache/SKILL.md +282 -0
  292. package/.codex/skills/redis-cache/references/listeners.md +23 -0
  293. package/.codex/skills/scheduled-jobs/SKILL.md +277 -0
  294. package/.codex/skills/security-guard/SKILL.md +245 -0
  295. package/.codex/skills/security-guard/references/encrypt-config.md +103 -0
  296. package/.codex/skills/security-guard/references/sensitive-strategies.md +42 -0
  297. package/.codex/skills/skill-creator/LICENSE.txt +202 -0
  298. package/.codex/skills/skill-creator/SKILL.md +479 -0
  299. package/.codex/skills/skill-creator/agents/analyzer.md +274 -0
  300. package/.codex/skills/skill-creator/agents/comparator.md +202 -0
  301. package/.codex/skills/skill-creator/agents/grader.md +223 -0
  302. package/.codex/skills/skill-creator/assets/eval_review.html +146 -0
  303. package/.codex/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  304. package/.codex/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  305. package/.codex/skills/skill-creator/references/schemas.md +430 -0
  306. package/.codex/skills/skill-creator/scripts/__init__.py +0 -0
  307. package/.codex/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  308. package/.codex/skills/skill-creator/scripts/generate_report.py +326 -0
  309. package/.codex/skills/skill-creator/scripts/improve_description.py +248 -0
  310. package/.codex/skills/skill-creator/scripts/package_skill.py +136 -0
  311. package/.codex/skills/skill-creator/scripts/quick_validate.py +103 -0
  312. package/.codex/skills/skill-creator/scripts/run_eval.py +310 -0
  313. package/.codex/skills/skill-creator/scripts/run_loop.py +332 -0
  314. package/.codex/skills/skill-creator/scripts/utils.py +47 -0
  315. package/.codex/skills/sms-mail/SKILL.md +346 -0
  316. package/.codex/skills/sms-mail/references/mail-config.md +88 -0
  317. package/.codex/skills/sms-mail/references/sms-config.md +74 -0
  318. package/.codex/skills/social-login/SKILL.md +328 -0
  319. package/.codex/skills/social-login/references/provider-configs.md +118 -0
  320. package/.codex/skills/start/SKILL.md +154 -0
  321. package/.codex/skills/store-pc/SKILL.md +366 -0
  322. package/.codex/skills/sync/SKILL.md +149 -0
  323. package/.codex/skills/sync-back-merge/SKILL.md +66 -0
  324. package/.codex/skills/task-tracker/SKILL.md +307 -0
  325. package/.codex/skills/tech-decision/SKILL.md +393 -0
  326. package/.codex/skills/tenant-management/SKILL.md +272 -0
  327. package/.codex/skills/tenant-management/references/tenant-scenarios.md +91 -0
  328. package/.codex/skills/test-development/SKILL.md +301 -0
  329. package/.codex/skills/test-development/references/parameterized-examples.md +119 -0
  330. package/.codex/skills/ui-pc/SKILL.md +438 -0
  331. package/.codex/skills/update-status/SKILL.md +159 -0
  332. package/.codex/skills/utils-toolkit/SKILL.md +354 -0
  333. package/.codex/skills/utils-toolkit/references/redis-utils-api.md +56 -0
  334. package/.codex/skills/websocket-sse/SKILL.md +350 -0
  335. package/.codex/skills/workflow-engine/SKILL.md +249 -0
  336. package/.codex/skills/yunxiao-task-management/SKILL.md +401 -0
  337. package/.codex/skills/yunxiao-task-management/templates//346/217/220/346/265/213/345/215/225/346/250/241/346/235/277.html +17 -0
  338. package/.cursor/agents/bug-analyzer.md +102 -0
  339. package/.cursor/agents/code-reviewer.md +122 -0
  340. package/.cursor/agents/code-scanner.md +145 -0
  341. package/.cursor/agents/image-reader.md +154 -0
  342. package/.cursor/agents/loki-runner.md +80 -0
  343. package/.cursor/agents/mysql-runner.md +81 -0
  344. package/.cursor/agents/project-manager.md +159 -0
  345. package/.cursor/agents/requirements-analyzer.md +141 -0
  346. package/.cursor/agents/task-fetcher.md +75 -0
  347. package/.cursor/audio/completed.wav +0 -0
  348. package/.cursor/commands/opsx-apply.md +152 -0
  349. package/.cursor/commands/opsx-archive.md +157 -0
  350. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  351. package/.cursor/commands/opsx-continue.md +114 -0
  352. package/.cursor/commands/opsx-explore.md +174 -0
  353. package/.cursor/commands/opsx-ff.md +94 -0
  354. package/.cursor/commands/opsx-new.md +69 -0
  355. package/.cursor/commands/opsx-onboard.md +525 -0
  356. package/.cursor/commands/opsx-sync.md +134 -0
  357. package/.cursor/commands/opsx-verify.md +164 -0
  358. package/.cursor/hooks/cursor-pre-tool-use.js +122 -0
  359. package/.cursor/hooks/cursor-skill-eval.js +466 -0
  360. package/.cursor/hooks/lib/notify.js +310 -0
  361. package/.cursor/hooks/stop.js +55 -0
  362. package/.cursor/hooks.json +23 -0
  363. package/.cursor/mcp.json +22 -0
  364. package/.cursor/rules/skill-activation.mdc +99 -0
  365. package/.cursor/skills/add-skill/SKILL.md +488 -0
  366. package/.cursor/skills/analyze-requirements/SKILL.md +112 -0
  367. package/.cursor/skills/api-development/SKILL.md +315 -0
  368. package/.cursor/skills/architecture-design/SKILL.md +152 -0
  369. package/.cursor/skills/auto-test/SKILL.md +453 -0
  370. package/.cursor/skills/auto-test/references/api-conventions.md +260 -0
  371. package/.cursor/skills/backend-annotations/SKILL.md +248 -0
  372. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  373. package/.cursor/skills/banana-image/README.md +146 -0
  374. package/.cursor/skills/banana-image/SKILL.md +171 -0
  375. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  376. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  377. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  378. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  379. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  380. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  381. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  382. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  383. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  384. package/.cursor/skills/banana-image/templates/product.json +17 -0
  385. package/.cursor/skills/banana-image/templates/social.json +22 -0
  386. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  387. package/.cursor/skills/brainstorm/SKILL.md +216 -0
  388. package/.cursor/skills/bug-detective/SKILL.md +295 -0
  389. package/.cursor/skills/bug-detective/references/error-patterns.md +242 -0
  390. package/.cursor/skills/code-patterns/SKILL.md +163 -0
  391. package/.cursor/skills/code-patterns/references/leniu-code-patterns.md +87 -0
  392. package/.cursor/skills/collaborating-with-codex/SKILL.md +180 -0
  393. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  394. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  395. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  396. package/.cursor/skills/crud-development/SKILL.md +328 -0
  397. package/.cursor/skills/data-permission/SKILL.md +221 -0
  398. package/.cursor/skills/data-permission/references/custom-data-scope.md +90 -0
  399. package/.cursor/skills/database-ops/SKILL.md +210 -0
  400. package/.cursor/skills/error-handler/SKILL.md +310 -0
  401. package/.cursor/skills/file-oss-management/SKILL.md +260 -0
  402. package/.cursor/skills/file-oss-management/references/entities.md +105 -0
  403. package/.cursor/skills/file-oss-management/references/service-impl.md +104 -0
  404. package/.cursor/skills/fix-bug/SKILL.md +269 -0
  405. package/.cursor/skills/git-workflow/SKILL.md +179 -0
  406. package/.cursor/skills/jenkins-deploy/SKILL.md +134 -0
  407. package/.cursor/skills/json-serialization/SKILL.md +341 -0
  408. package/.cursor/skills/lanhu-design/SKILL.md +99 -0
  409. package/.cursor/skills/leniu-api-development/SKILL.md +319 -0
  410. package/.cursor/skills/leniu-api-development/references/real-examples.md +273 -0
  411. package/.cursor/skills/leniu-architecture-design/SKILL.md +383 -0
  412. package/.cursor/skills/leniu-backend-annotations/SKILL.md +277 -0
  413. package/.cursor/skills/leniu-brainstorm/SKILL.md +242 -0
  414. package/.cursor/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
  415. package/.cursor/skills/leniu-code-patterns/SKILL.md +411 -0
  416. package/.cursor/skills/leniu-crud-development/SKILL.md +404 -0
  417. package/.cursor/skills/leniu-crud-development/references/templates.md +597 -0
  418. package/.cursor/skills/leniu-customization-location/SKILL.md +410 -0
  419. package/.cursor/skills/leniu-data-permission/SKILL.md +341 -0
  420. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  421. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  422. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  423. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  424. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  425. package/.cursor/skills/leniu-java-entity/SKILL.md +237 -0
  426. package/.cursor/skills/leniu-java-entity/references/templates.md +237 -0
  427. package/.cursor/skills/leniu-java-logging/SKILL.md +229 -0
  428. package/.cursor/skills/leniu-java-logging/references/data-mask.md +46 -0
  429. package/.cursor/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
  430. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  431. package/.cursor/skills/leniu-java-mybatis/SKILL.md +267 -0
  432. package/.cursor/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
  433. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  434. package/.cursor/skills/leniu-marketing-scenario/SKILL.md +448 -0
  435. package/.cursor/skills/leniu-marketing-scenario/references/pay-meal-rules.md +197 -0
  436. package/.cursor/skills/leniu-marketing-scenario/references/price-rules.md +286 -0
  437. package/.cursor/skills/leniu-marketing-scenario/references/recharge-rules.md +188 -0
  438. package/.cursor/skills/leniu-redis-cache/SKILL.md +331 -0
  439. package/.cursor/skills/leniu-report-scenario/SKILL.md +508 -0
  440. package/.cursor/skills/leniu-report-scenario/references/amount-handling.md +448 -0
  441. package/.cursor/skills/leniu-report-scenario/references/analysis-module.md +64 -0
  442. package/.cursor/skills/leniu-report-scenario/references/customization-table-fields.md +93 -0
  443. package/.cursor/skills/leniu-report-scenario/references/customization.md +356 -0
  444. package/.cursor/skills/leniu-report-scenario/references/data-permission.md +182 -0
  445. package/.cursor/skills/leniu-report-scenario/references/export.md +553 -0
  446. package/.cursor/skills/leniu-report-scenario/references/mealtime.md +197 -0
  447. package/.cursor/skills/leniu-report-scenario/references/query-param.md +274 -0
  448. package/.cursor/skills/leniu-report-scenario/references/report-tables.md +162 -0
  449. package/.cursor/skills/leniu-report-scenario/references/standard-customization.md +112 -0
  450. package/.cursor/skills/leniu-report-scenario/references/standard-table-fields.md +113 -0
  451. package/.cursor/skills/leniu-report-scenario/references/total-line.md +179 -0
  452. package/.cursor/skills/leniu-security-guard/SKILL.md +306 -0
  453. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  454. package/.cursor/skills/loki-log-query/SKILL.md +430 -0
  455. package/.cursor/skills/loki-log-query/environments.json +45 -0
  456. package/.cursor/skills/mysql-debug/SKILL.md +406 -0
  457. package/.cursor/skills/openspec-apply-change/SKILL.md +165 -0
  458. package/.cursor/skills/openspec-archive-change/SKILL.md +122 -0
  459. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +254 -0
  460. package/.cursor/skills/openspec-continue-change/SKILL.md +126 -0
  461. package/.cursor/skills/openspec-explore/SKILL.md +299 -0
  462. package/.cursor/skills/openspec-ff-change/SKILL.md +109 -0
  463. package/.cursor/skills/openspec-new-change/SKILL.md +82 -0
  464. package/.cursor/skills/openspec-onboard/SKILL.md +414 -0
  465. package/.cursor/skills/openspec-sync-specs/SKILL.md +146 -0
  466. package/.cursor/skills/openspec-verify-change/SKILL.md +176 -0
  467. package/.cursor/skills/performance-doctor/SKILL.md +297 -0
  468. package/.cursor/skills/project-navigator/SKILL.md +211 -0
  469. package/.cursor/skills/redis-cache/SKILL.md +282 -0
  470. package/.cursor/skills/redis-cache/references/listeners.md +23 -0
  471. package/.cursor/skills/scheduled-jobs/SKILL.md +277 -0
  472. package/.cursor/skills/security-guard/SKILL.md +245 -0
  473. package/.cursor/skills/security-guard/references/encrypt-config.md +103 -0
  474. package/.cursor/skills/security-guard/references/sensitive-strategies.md +42 -0
  475. package/.cursor/skills/skill-creator/LICENSE.txt +202 -0
  476. package/.cursor/skills/skill-creator/SKILL.md +479 -0
  477. package/.cursor/skills/skill-creator/agents/analyzer.md +274 -0
  478. package/.cursor/skills/skill-creator/agents/comparator.md +202 -0
  479. package/.cursor/skills/skill-creator/agents/grader.md +223 -0
  480. package/.cursor/skills/skill-creator/assets/eval_review.html +146 -0
  481. package/.cursor/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  482. package/.cursor/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  483. package/.cursor/skills/skill-creator/references/schemas.md +430 -0
  484. package/.cursor/skills/skill-creator/scripts/__init__.py +0 -0
  485. package/.cursor/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  486. package/.cursor/skills/skill-creator/scripts/generate_report.py +326 -0
  487. package/.cursor/skills/skill-creator/scripts/improve_description.py +248 -0
  488. package/.cursor/skills/skill-creator/scripts/package_skill.py +136 -0
  489. package/.cursor/skills/skill-creator/scripts/quick_validate.py +103 -0
  490. package/.cursor/skills/skill-creator/scripts/run_eval.py +310 -0
  491. package/.cursor/skills/skill-creator/scripts/run_loop.py +332 -0
  492. package/.cursor/skills/skill-creator/scripts/utils.py +47 -0
  493. package/.cursor/skills/sms-mail/SKILL.md +346 -0
  494. package/.cursor/skills/sms-mail/references/mail-config.md +88 -0
  495. package/.cursor/skills/sms-mail/references/sms-config.md +74 -0
  496. package/.cursor/skills/social-login/SKILL.md +328 -0
  497. package/.cursor/skills/social-login/references/provider-configs.md +118 -0
  498. package/.cursor/skills/store-pc/SKILL.md +366 -0
  499. package/.cursor/skills/sync-back-merge/SKILL.md +66 -0
  500. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  501. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  502. package/.cursor/skills/tenant-management/SKILL.md +272 -0
  503. package/.cursor/skills/tenant-management/references/tenant-scenarios.md +91 -0
  504. package/.cursor/skills/test-development/SKILL.md +301 -0
  505. package/.cursor/skills/test-development/references/parameterized-examples.md +119 -0
  506. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  507. package/.cursor/skills/utils-toolkit/SKILL.md +354 -0
  508. package/.cursor/skills/utils-toolkit/references/redis-utils-api.md +56 -0
  509. package/.cursor/skills/websocket-sse/SKILL.md +350 -0
  510. package/.cursor/skills/workflow-engine/SKILL.md +249 -0
  511. package/.cursor/skills/yunxiao-task-management/SKILL.md +401 -0
  512. package/.cursor/skills/yunxiao-task-management/templates//346/217/220/346/265/213/345/215/225/346/250/241/346/235/277.html +17 -0
  513. package/.cursor/templates/env-config.md +27 -0
  514. package/AGENTS.md +275 -0
  515. package/CLAUDE.md +285 -0
  516. package/README.md +104 -0
  517. package/bin/index.js +3069 -0
  518. package/init.sh +178 -0
  519. package/package.json +40 -0
  520. package/scripts/build-skills.js +180 -0
  521. package/src/platform-map.json +100 -0
  522. package/src/skills/add-skill/SKILL.md +488 -0
  523. package/src/skills/add-todo/SKILL.md +269 -0
  524. package/src/skills/analyze-requirements/SKILL.md +112 -0
  525. package/src/skills/api-development/SKILL.md +315 -0
  526. package/src/skills/architecture-design/SKILL.md +152 -0
  527. package/src/skills/backend-annotations/SKILL.md +248 -0
  528. package/src/skills/banana-image/CHANGELOG.md +37 -0
  529. package/src/skills/banana-image/README.md +146 -0
  530. package/src/skills/banana-image/SKILL.md +171 -0
  531. package/src/skills/banana-image/assets/logo.png +0 -0
  532. package/src/skills/banana-image/references/advanced-usage.md +189 -0
  533. package/src/skills/banana-image/scripts/apply_template.py +125 -0
  534. package/src/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  535. package/src/skills/banana-image/scripts/batch_prep.py +82 -0
  536. package/src/skills/banana-image/scripts/package-lock.json +1437 -0
  537. package/src/skills/banana-image/scripts/package.json +18 -0
  538. package/src/skills/banana-image/scripts/requirements.txt +10 -0
  539. package/src/skills/banana-image/templates/poster.json +22 -0
  540. package/src/skills/banana-image/templates/product.json +17 -0
  541. package/src/skills/banana-image/templates/social.json +22 -0
  542. package/src/skills/banana-image/templates/thumbnail.json +17 -0
  543. package/src/skills/brainstorm/SKILL.md +216 -0
  544. package/src/skills/bug-detective/SKILL.md +295 -0
  545. package/src/skills/bug-detective/references/error-patterns.md +242 -0
  546. package/src/skills/check/SKILL.md +367 -0
  547. package/src/skills/code-patterns/SKILL.md +163 -0
  548. package/src/skills/code-patterns/references/leniu-code-patterns.md +87 -0
  549. package/src/skills/codex-code-review/SKILL.md +327 -0
  550. package/src/skills/collaborating-with-codex/SKILL.md +180 -0
  551. package/src/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  552. package/src/skills/collaborating-with-gemini/SKILL.md +194 -0
  553. package/src/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  554. package/src/skills/crud/SKILL.md +265 -0
  555. package/src/skills/crud-development/SKILL.md +328 -0
  556. package/src/skills/data-permission/SKILL.md +221 -0
  557. package/src/skills/data-permission/references/custom-data-scope.md +90 -0
  558. package/src/skills/database-ops/SKILL.md +210 -0
  559. package/src/skills/dev/SKILL.md +187 -0
  560. package/src/skills/error-handler/SKILL.md +310 -0
  561. package/src/skills/file-oss-management/SKILL.md +260 -0
  562. package/src/skills/file-oss-management/references/entities.md +105 -0
  563. package/src/skills/file-oss-management/references/service-impl.md +104 -0
  564. package/src/skills/fix-bug/SKILL.md +269 -0
  565. package/src/skills/git-workflow/SKILL.md +179 -0
  566. package/src/skills/init-docs/SKILL.md +194 -0
  567. package/src/skills/json-serialization/SKILL.md +341 -0
  568. package/src/skills/leniu-api-development/SKILL.md +319 -0
  569. package/src/skills/leniu-api-development/references/real-examples.md +273 -0
  570. package/src/skills/leniu-architecture-design/SKILL.md +383 -0
  571. package/src/skills/leniu-backend-annotations/SKILL.md +277 -0
  572. package/src/skills/leniu-brainstorm/SKILL.md +242 -0
  573. package/src/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
  574. package/src/skills/leniu-code-patterns/SKILL.md +411 -0
  575. package/src/skills/leniu-crud-development/SKILL.md +404 -0
  576. package/src/skills/leniu-crud-development/references/templates.md +597 -0
  577. package/src/skills/leniu-customization-location/SKILL.md +410 -0
  578. package/src/skills/leniu-data-permission/SKILL.md +341 -0
  579. package/src/skills/leniu-database-ops/SKILL.md +426 -0
  580. package/src/skills/leniu-error-handler/SKILL.md +462 -0
  581. package/src/skills/leniu-java-amount-handling/SKILL.md +461 -0
  582. package/src/skills/leniu-java-code-style/SKILL.md +510 -0
  583. package/src/skills/leniu-java-concurrent/SKILL.md +400 -0
  584. package/src/skills/leniu-java-entity/SKILL.md +237 -0
  585. package/src/skills/leniu-java-entity/references/templates.md +237 -0
  586. package/src/skills/leniu-java-export/SKILL.md +570 -0
  587. package/src/skills/leniu-java-logging/SKILL.md +229 -0
  588. package/src/skills/leniu-java-logging/references/data-mask.md +46 -0
  589. package/src/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
  590. package/src/skills/leniu-java-mq/SKILL.md +338 -0
  591. package/src/skills/leniu-java-mybatis/SKILL.md +267 -0
  592. package/src/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
  593. package/src/skills/leniu-java-report-query-param/SKILL.md +291 -0
  594. package/src/skills/leniu-java-task/SKILL.md +367 -0
  595. package/src/skills/leniu-java-total-line/SKILL.md +196 -0
  596. package/src/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  597. package/src/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  598. package/src/skills/leniu-mealtime/SKILL.md +215 -0
  599. package/src/skills/leniu-redis-cache/SKILL.md +331 -0
  600. package/src/skills/leniu-report-customization/SKILL.md +415 -0
  601. package/src/skills/leniu-report-customization/references/table-fields.md +93 -0
  602. package/src/skills/leniu-report-standard-customization/SKILL.md +391 -0
  603. package/src/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
  604. package/src/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
  605. package/src/skills/leniu-security-guard/SKILL.md +306 -0
  606. package/src/skills/leniu-utils-toolkit/SKILL.md +380 -0
  607. package/src/skills/loki-log-query/SKILL.md +400 -0
  608. package/src/skills/loki-log-query/environments.json +45 -0
  609. package/src/skills/mysql-debug/SKILL.md +400 -0
  610. package/src/skills/next/SKILL.md +137 -0
  611. package/src/skills/openspec-apply-change/SKILL.md +165 -0
  612. package/src/skills/openspec-archive-change/SKILL.md +122 -0
  613. package/src/skills/openspec-bulk-archive-change/SKILL.md +254 -0
  614. package/src/skills/openspec-continue-change/SKILL.md +126 -0
  615. package/src/skills/openspec-explore/SKILL.md +299 -0
  616. package/src/skills/openspec-ff-change/SKILL.md +109 -0
  617. package/src/skills/openspec-new-change/SKILL.md +82 -0
  618. package/src/skills/openspec-onboard/SKILL.md +414 -0
  619. package/src/skills/openspec-sync-specs/SKILL.md +146 -0
  620. package/src/skills/openspec-verify-change/SKILL.md +176 -0
  621. package/src/skills/performance-doctor/SKILL.md +297 -0
  622. package/src/skills/progress/SKILL.md +193 -0
  623. package/src/skills/project-navigator/SKILL.md +211 -0
  624. package/src/skills/redis-cache/SKILL.md +282 -0
  625. package/src/skills/redis-cache/references/listeners.md +23 -0
  626. package/src/skills/scheduled-jobs/SKILL.md +277 -0
  627. package/src/skills/security-guard/SKILL.md +245 -0
  628. package/src/skills/security-guard/references/encrypt-config.md +103 -0
  629. package/src/skills/security-guard/references/sensitive-strategies.md +42 -0
  630. package/src/skills/skill-creator/LICENSE.txt +202 -0
  631. package/src/skills/skill-creator/SKILL.md +479 -0
  632. package/src/skills/skill-creator/agents/analyzer.md +274 -0
  633. package/src/skills/skill-creator/agents/comparator.md +202 -0
  634. package/src/skills/skill-creator/agents/grader.md +223 -0
  635. package/src/skills/skill-creator/assets/eval_review.html +146 -0
  636. package/src/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  637. package/src/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  638. package/src/skills/skill-creator/references/schemas.md +430 -0
  639. package/src/skills/skill-creator/scripts/__init__.py +0 -0
  640. package/src/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  641. package/src/skills/skill-creator/scripts/generate_report.py +326 -0
  642. package/src/skills/skill-creator/scripts/improve_description.py +248 -0
  643. package/src/skills/skill-creator/scripts/package_skill.py +136 -0
  644. package/src/skills/skill-creator/scripts/quick_validate.py +103 -0
  645. package/src/skills/skill-creator/scripts/run_eval.py +310 -0
  646. package/src/skills/skill-creator/scripts/run_loop.py +332 -0
  647. package/src/skills/skill-creator/scripts/utils.py +47 -0
  648. package/src/skills/sms-mail/SKILL.md +346 -0
  649. package/src/skills/sms-mail/references/mail-config.md +88 -0
  650. package/src/skills/sms-mail/references/sms-config.md +74 -0
  651. package/src/skills/social-login/SKILL.md +328 -0
  652. package/src/skills/social-login/references/provider-configs.md +118 -0
  653. package/src/skills/start/SKILL.md +154 -0
  654. package/src/skills/store-pc/SKILL.md +366 -0
  655. package/src/skills/sync/SKILL.md +149 -0
  656. package/src/skills/sync-back-merge/SKILL.md +66 -0
  657. package/src/skills/task-tracker/SKILL.md +307 -0
  658. package/src/skills/tech-decision/SKILL.md +393 -0
  659. package/src/skills/tenant-management/SKILL.md +272 -0
  660. package/src/skills/tenant-management/references/tenant-scenarios.md +91 -0
  661. package/src/skills/test-development/SKILL.md +301 -0
  662. package/src/skills/test-development/references/parameterized-examples.md +119 -0
  663. package/src/skills/ui-pc/SKILL.md +438 -0
  664. package/src/skills/update-status/SKILL.md +159 -0
  665. package/src/skills/utils-toolkit/SKILL.md +354 -0
  666. package/src/skills/utils-toolkit/references/redis-utils-api.md +56 -0
  667. package/src/skills/websocket-sse/SKILL.md +350 -0
  668. package/src/skills/workflow-engine/SKILL.md +249 -0
  669. package/src/skills/yunxiao-task-management/SKILL.md +401 -0
  670. package/src/skills/yunxiao-task-management/templates//346/217/220/346/265/213/345/215/225/346/250/241/346/235/277.html +17 -0
@@ -0,0 +1,210 @@
1
+ ---
2
+ name: database-ops
3
+ description: |
4
+ 通用数据库操作指南。涵盖建表规范、审计字段、逻辑删除、索引设计等。
5
+ 触发场景:建表、数据库设计、SQL 编写、数据迁移。
6
+ 触发词:建表、数据库、SQL、DDL、数据迁移、索引。
7
+ 注意:如果项目有专属技能(如 `leniu-database`),优先使用专属版本。
8
+ ---
9
+
10
+ # 数据库操作指南
11
+
12
+ > 通用模板。如果项目有专属技能(如 `leniu-database`),优先使用。
13
+
14
+ ## 核心规范
15
+
16
+ ### 建表标准模板
17
+
18
+ ```sql
19
+ CREATE TABLE t_order (
20
+ id BIGINT NOT NULL COMMENT '主键',
21
+ order_no VARCHAR(64) NOT NULL COMMENT '订单编号',
22
+ status TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0-待处理,1-已完成,2-已取消)',
23
+ amount BIGINT NOT NULL DEFAULT 0 COMMENT '金额(单位:分)',
24
+ remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
25
+ create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
26
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
27
+ update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
28
+ update_time DATETIME DEFAULT NULL COMMENT '更新时间',
29
+ deleted TINYINT NOT NULL DEFAULT 0 COMMENT '删除标识(0-正常,1-删除)',
30
+ PRIMARY KEY (id),
31
+ UNIQUE KEY uk_order_no (order_no),
32
+ KEY idx_status (status),
33
+ KEY idx_create_time (create_time)
34
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
35
+ ```
36
+
37
+ ### 审计字段规范
38
+
39
+ | 字段 | 类型 | 说明 | 填充时机 |
40
+ |------|------|------|---------|
41
+ | `create_by` | VARCHAR(64) | 创建人 | INSERT |
42
+ | `create_time` | DATETIME | 创建时间 | INSERT |
43
+ | `update_by` | VARCHAR(64) | 更新人 | INSERT / UPDATE |
44
+ | `update_time` | DATETIME | 更新时间 | INSERT / UPDATE |
45
+ | `deleted` | TINYINT | 逻辑删除 | 手动 / 框架自动 |
46
+
47
+ > 审计字段自动填充可通过 MyBatis-Plus 的 `MetaObjectHandler` 实现。
48
+
49
+ ### 逻辑删除
50
+
51
+ - `deleted = 0` 表示正常
52
+ - `deleted = 1` 表示已删除
53
+ - MyBatis-Plus 配置:
54
+
55
+ ```yaml
56
+ mybatis-plus:
57
+ global-config:
58
+ db-config:
59
+ logic-delete-field: deleted
60
+ logic-delete-value: 1
61
+ logic-not-delete-value: 0
62
+ ```
63
+
64
+ ### 命名规范
65
+
66
+ | 类型 | 规范 | 示例 |
67
+ |------|------|------|
68
+ | 表名 | 小写下划线,建议加前缀 | `t_order`, `sys_user` |
69
+ | 字段名 | 小写下划线 | `order_no`, `create_time` |
70
+ | 主键 | `id` | `id BIGINT NOT NULL` |
71
+ | 外键字段 | `关联表_id` | `user_id`, `order_id` |
72
+ | 唯一索引 | `uk_字段名` | `uk_order_no` |
73
+ | 普通索引 | `idx_字段名` | `idx_status` |
74
+ | 联合索引 | `idx_字段1_字段2` | `idx_user_id_status` |
75
+
76
+ ## 代码示例
77
+
78
+ ### 审计字段自动填充
79
+
80
+ ```java
81
+ @Component
82
+ public class MyMetaObjectHandler implements MetaObjectHandler {
83
+
84
+ @Override
85
+ public void insertFill(MetaObject metaObject) {
86
+ this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
87
+ this.strictInsertFill(metaObject, "createBy", String.class, getCurrentUser());
88
+ this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
89
+ this.strictInsertFill(metaObject, "updateBy", String.class, getCurrentUser());
90
+ }
91
+
92
+ @Override
93
+ public void updateFill(MetaObject metaObject) {
94
+ this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
95
+ this.strictUpdateFill(metaObject, "updateBy", String.class, getCurrentUser());
96
+ }
97
+
98
+ private String getCurrentUser() {
99
+ // 从安全上下文获取当前用户,按项目实际实现
100
+ return [你的用户上下文工具].getCurrentUsername();
101
+ }
102
+ }
103
+ ```
104
+
105
+ ### 常见数据库设计模式
106
+
107
+ #### 模式一:树结构 - 祖先路径法
108
+
109
+ ```sql
110
+ CREATE TABLE t_org (
111
+ id BIGINT NOT NULL COMMENT '主键',
112
+ parent_id BIGINT DEFAULT NULL COMMENT '父节点ID',
113
+ ancestors VARCHAR(500) DEFAULT NULL COMMENT '祖先路径(逗号分隔)',
114
+ name VARCHAR(100) NOT NULL COMMENT '节点名称',
115
+ sort INT NOT NULL DEFAULT 0 COMMENT '排序',
116
+ create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人',
117
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
118
+ update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人',
119
+ update_time DATETIME DEFAULT NULL COMMENT '更新时间',
120
+ deleted TINYINT NOT NULL DEFAULT 0 COMMENT '删除标识(0-正常,1-删除)',
121
+ PRIMARY KEY (id),
122
+ KEY idx_parent_id (parent_id),
123
+ KEY idx_ancestors (ancestors(255))
124
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织树';
125
+ ```
126
+
127
+ #### 模式二:关联表(多对多)
128
+
129
+ ```sql
130
+ CREATE TABLE t_user_role (
131
+ id BIGINT NOT NULL COMMENT '主键',
132
+ user_id BIGINT NOT NULL COMMENT '用户ID',
133
+ role_id BIGINT NOT NULL COMMENT '角色ID',
134
+ create_time DATETIME DEFAULT NULL COMMENT '创建时间',
135
+ PRIMARY KEY (id),
136
+ UNIQUE KEY uk_user_role (user_id, role_id)
137
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联';
138
+ ```
139
+
140
+ #### 模式三:状态字段(枚举驱动)
141
+
142
+ ```java
143
+ @Getter
144
+ @AllArgsConstructor
145
+ public enum OrderStatusEnum {
146
+
147
+ PENDING(0, "待处理"),
148
+ COMPLETED(1, "已完成"),
149
+ CANCELLED(2, "已取消");
150
+
151
+ private final int code;
152
+ private final String desc;
153
+ }
154
+
155
+ // SQL 字段
156
+ // status TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0-待处理,1-已完成,2-已取消)'
157
+ ```
158
+
159
+ ### 常见查询模式
160
+
161
+ ```sql
162
+ -- 分页查询(配合 MyBatis-Plus Page)
163
+ SELECT id, order_no, status, amount, create_time
164
+ FROM t_order
165
+ WHERE deleted = 0
166
+ AND status = #{status}
167
+ ORDER BY create_time DESC;
168
+
169
+ -- 批量插入
170
+ INSERT INTO t_order (id, order_no, status, amount, create_by, create_time, deleted)
171
+ VALUES
172
+ (#{id1}, #{orderNo1}, 0, #{amount1}, #{createBy}, NOW(), 0),
173
+ (#{id2}, #{orderNo2}, 0, #{amount2}, #{createBy}, NOW(), 0);
174
+
175
+ -- 逻辑删除
176
+ UPDATE t_order SET deleted = 1, update_by = #{updateBy}, update_time = NOW()
177
+ WHERE id = #{id} AND deleted = 0;
178
+ ```
179
+
180
+ ### 索引设计原则
181
+
182
+ 1. **必须有主键**:推荐 BIGINT 雪花 ID 或自增
183
+ 2. **高频查询字段建索引**:WHERE、JOIN、ORDER BY 中的字段
184
+ 3. **联合索引遵循最左前缀**:把区分度高的字段放前面
185
+ 4. **避免在大文本字段上建索引**:TEXT、BLOB 等
186
+ 5. **控制单表索引数量**:建议不超过 5-6 个
187
+
188
+ ### 数据迁移脚本规范
189
+
190
+ ```sql
191
+ -- V1.0.1__add_order_remark.sql
192
+ -- 描述:订单表新增备注字段
193
+ -- 作者:xxx
194
+ -- 日期:2024-01-01
195
+
196
+ ALTER TABLE t_order ADD COLUMN remark VARCHAR(500) DEFAULT NULL COMMENT '备注' AFTER amount;
197
+ ```
198
+
199
+ ## 常见错误
200
+
201
+ | 错误 | 正确做法 |
202
+ |------|---------|
203
+ | 用 VARCHAR 存金额 | 用 BIGINT 存分,或 DECIMAL(10,2) |
204
+ | 字段不加 COMMENT | 所有字段必须有注释 |
205
+ | 表没有主键 | 每张表必须有主键 |
206
+ | 用 UUID 做主键 | 推荐 BIGINT(索引友好) |
207
+ | 逻辑删除值搞反 | 确认项目约定(通用:0=正常, 1=删除) |
208
+ | 大表无索引 | 根据查询模式建立合适索引 |
209
+ | 字段允许 NULL 但业务不允许 | 加 NOT NULL 约束 + DEFAULT 值 |
210
+ | 直接物理删除数据 | 使用逻辑删除,保留数据可追溯 |
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: dev
3
+ description: |
4
+ 当需要从零开始开发新功能、完整开发流程时自动使用此 Skill。
5
+
6
+ 触发场景:
7
+ - 需要从零开始开发一个新功能
8
+ - 需要设计数据库表并生成代码
9
+ - 需要完整的开发流程引导
10
+ - 需要配置代码生成器并生成后端代码
11
+
12
+ 触发词:开发功能、dev、新功能、功能开发、从零开发、完整开发、开发新模块
13
+ ---
14
+
15
+ # /dev - 开发新功能(RuoYi-Vue-Plus 纯后端版)
16
+
17
+ 智能代码生成器配置助手,专为 RuoYi-Vue-Plus 三层架构(Controller→Service→Mapper)设计。
18
+
19
+ ## 🎯 核心优势
20
+ - ✅ **纯后端专注**:无前端,专注后端 CRUD 代码生成
21
+ - ✅ **包名适配**:`org.dromara.*`
22
+ - ✅ **智能推断**:模块 → 表前缀 → 包名 → 图标自动识别
23
+ - ✅ **全自动配置**:代码生成器配置完整(gen_table + gen_table_column)
24
+ - ✅ **菜单权限**:自动生成完整的菜单和权限配置
25
+
26
+ ## 🚀 执行流程
27
+
28
+ ### 第一步:需求确认
29
+
30
+ ```
31
+ 请告诉我要开发的功能:
32
+
33
+ 1. **功能名称**?(如:广告管理、反馈管理)
34
+ 2. **所属模块**?(system/business/其他)
35
+ ```
36
+
37
+ **自动推断**:
38
+
39
+ | 模块 | 表前缀 | 包名 | 上级菜单 |
40
+ |------|--------|------|---------|
41
+ | system | `sys_` | `org.dromara.system` | 系统管理 |
42
+ | business | `b_` | `org.dromara.business` | 业务管理 |
43
+ | 其他(如 demo) | `demo_` | `org.dromara.demo` | [模块]管理 |
44
+
45
+ ---
46
+
47
+ ### 第二步:功能重复检查(强制执行)⭐⭐⭐⭐⭐
48
+
49
+ **⚠️ 重要**:检查功能是否已存在,避免重复开发
50
+
51
+ ```bash
52
+ # 1. 检查后端代码
53
+ Grep pattern: "[功能名]Service" path: ruoyi-modules/ output_mode: files_with_matches
54
+ Grep pattern: "[功能名]Controller" path: ruoyi-modules/ output_mode: files_with_matches
55
+
56
+ # 2. 检查数据库表
57
+ SHOW TABLES LIKE '[表前缀]%';
58
+
59
+ # 3. 检查菜单
60
+ SELECT menu_name FROM sys_menu WHERE menu_name LIKE '%[功能名]%';
61
+ ```
62
+
63
+ ---
64
+
65
+ ### 第三步:数据库现状分析(自动执行)
66
+
67
+ 从 `ruoyi-admin/src/main/resources/application-dev.yml` 动态读取数据库配置。
68
+
69
+ ---
70
+
71
+ ### 第四步:智能表结构设计
72
+
73
+ #### 智能字段命名和推断
74
+
75
+ | 字段后缀 | 推断结果 | 控件类型 | 查询方式 |
76
+ |---------|---------|---------|---------|
77
+ | `xxx_name` | 名称 | input | LIKE |
78
+ | `xxx_title` | 标题 | input | LIKE |
79
+ | `xxx_content` | 内容 | editor | 富文本 |
80
+ | `status` | 状态 | select | EQ + sys_normal_disable |
81
+ | `xxx_type` | 分类 | select | EQ + 自定义字典 |
82
+ | `is_xxx` | 是否 | radio | EQ + sys_boolean_flag |
83
+ | `xxx_amount` / `xxx_price` | 金额 | numberInput | EQ |
84
+ | `xxx_time` / `xxx_date` | 时间 | datetime | BETWEEN |
85
+
86
+ #### 标准表结构模板
87
+
88
+ ```sql
89
+ CREATE TABLE [表前缀]_[功能名] (
90
+ id BIGINT(20) NOT NULL COMMENT '主键ID',
91
+ tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
92
+
93
+ -- 业务字段
94
+ xxx_name VARCHAR(100) NOT NULL COMMENT '名称',
95
+ xxx_type CHAR(1) DEFAULT '1' COMMENT '类型',
96
+ status CHAR(1) DEFAULT '1' COMMENT '状态(0停用 1正常)',
97
+
98
+ -- 审计字段
99
+ create_by BIGINT(20) DEFAULT NULL COMMENT '创建人',
100
+ create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
101
+ update_by BIGINT(20) DEFAULT NULL COMMENT '更新人',
102
+ update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
103
+ remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
104
+ del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志',
105
+
106
+ PRIMARY KEY (id)
107
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='xxx表';
108
+ ```
109
+
110
+ ---
111
+
112
+ ### 第五步:生成方案并确认(仅此一次确认)
113
+
114
+ ```markdown
115
+ ## 📋 代码生成方案
116
+
117
+ ### 基本配置
118
+ - **功能名称**:广告管理
119
+ - **模块**:business
120
+ - **表名**:b_ad
121
+ - **Java类名**:Ad
122
+ - **包名**:org.dromara.business
123
+ - **接口路径**:/business/ad
124
+
125
+ ### 菜单配置
126
+ - **上级菜单**:业务管理 (menu_id: 1001)
127
+ - **菜单顺序**:20
128
+ - **菜单图标**:ad (自动匹配)
129
+
130
+ **确认开始生成?**
131
+ ```
132
+
133
+ ---
134
+
135
+ ### 第六步:自动执行生成(无需确认)
136
+
137
+ 用户确认后,AI 自动执行:
138
+ 1. 建表 SQL
139
+ 2. 创建字典(如需要)
140
+ 3. 生成代码生成器配置 SQL
141
+
142
+ ---
143
+
144
+ ### 第七步:完成报告
145
+
146
+ ```markdown
147
+ ## 🎉 代码生成方案配置完成!
148
+
149
+ ### 已完成
150
+ - ✅ 数据库表创建:b_ad
151
+ - ✅ 业务字典创建:b_ad_type(3 个字典项)
152
+ - ✅ 菜单配置:广告管理(自动导入启用)
153
+ - ✅ 代码生成配置:表 + 11 个字段
154
+
155
+ ## 🚀 下一步:前往代码生成器生成代码
156
+
157
+ 1. **登录系统后台**:http://localhost:8080
158
+ 2. **导航**:系统工具 → 代码生成
159
+ 3. **查找表**:找到 `b_ad` 表
160
+ 4. **生成代码**:点击【生成代码】按钮
161
+ 5. **重启服务**:代码生成后需重启后端服务
162
+
163
+ ### 生成后的文件结构
164
+
165
+ \`\`\`
166
+ ruoyi-system/
167
+ ├── controller/business/AdController.java
168
+ ├── domain/Ad.java
169
+ ├── domain/bo/AdBo.java
170
+ ├── domain/vo/AdVo.java
171
+ ├── mapper/AdMapper.java
172
+ ├── service/IAdService.java
173
+ └── service/impl/AdServiceImpl.java
174
+ \`\`\`
175
+ ```
176
+
177
+ ---
178
+
179
+ ## ⚠️ AI 执行规则
180
+
181
+ 1. ✅ **仅后端**:三层架构(Controller→Service→Mapper)
182
+ 2. ✅ **包名**:必须是 `org.dromara.*`
183
+ 3. ✅ **一次确认**:第五步确认后全自动执行
184
+ 4. ✅ **tenant_id**:框架自动处理,所有权限配置为 0
185
+ 5. ✅ **检查功能重复**:禁止重复开发相同功能
186
+ 6. ✅ **智能字段推断**:根据字段名后缀自动推断控件和查询方式
187
+ 7. ✅ **字典智能处理**:检查字典存在性,不存在则创建
@@ -0,0 +1,310 @@
1
+ ---
2
+ name: error-handler
3
+ description: |
4
+ 通用异常处理指南。涵盖自定义业务异常、全局异常处理器、参数校验等。
5
+ 触发场景:异常设计、错误处理、参数校验、全局异常捕获。
6
+ 触发词:异常处理、错误处理、参数校验、validation、异常捕获。
7
+ 注意:如果项目有专属技能(如 `leniu-error-handler`),优先使用专属版本。
8
+ ---
9
+
10
+ # 异常处理指南
11
+
12
+ > 通用模板。如果项目有专属技能(如 `leniu-error-handler`),优先使用。
13
+
14
+ ## 核心规范
15
+
16
+ ### 异常分层设计
17
+
18
+ ```
19
+ RuntimeException
20
+ └── BusinessException # 业务异常基类
21
+ ├── NotFoundException # 资源不存在 (404)
22
+ ├── ForbiddenException # 无权限 (403)
23
+ ├── BadRequestException # 参数错误 (400)
24
+ └── ConflictException # 数据冲突 (409)
25
+ ```
26
+
27
+ ### 异常处理原则
28
+
29
+ 1. **业务异常用自定义异常类**,不要直接抛 `RuntimeException`
30
+ 2. **全局统一捕获**,通过 `@RestControllerAdvice` 处理
31
+ 3. **区分异常层级**:Controller 层不 try-catch(交给全局处理器),Service 层只捕获需要转换的异常
32
+ 4. **异常信息面向用户**:不暴露堆栈、SQL 等技术细节
33
+ 5. **日志记录完整**:异常日志包含完整上下文和堆栈
34
+
35
+ ## 代码示例
36
+
37
+ ### 1. 自定义业务异常
38
+
39
+ ```java
40
+ package [你的包名].exception;
41
+
42
+ import lombok.Getter;
43
+
44
+ @Getter
45
+ public class BusinessException extends RuntimeException {
46
+
47
+ private final int code;
48
+
49
+ public BusinessException(String message) {
50
+ super(message);
51
+ this.code = 500;
52
+ }
53
+
54
+ public BusinessException(int code, String message) {
55
+ super(message);
56
+ this.code = code;
57
+ }
58
+
59
+ public BusinessException(int code, String message, Throwable cause) {
60
+ super(message, cause);
61
+ this.code = code;
62
+ }
63
+ }
64
+ ```
65
+
66
+ ```java
67
+ package [你的包名].exception;
68
+
69
+ public class NotFoundException extends BusinessException {
70
+
71
+ public NotFoundException(String message) {
72
+ super(404, message);
73
+ }
74
+
75
+ public static NotFoundException of(String resource, Object id) {
76
+ return new NotFoundException(resource + " 不存在: " + id);
77
+ }
78
+ }
79
+ ```
80
+
81
+ ### 2. 全局异常处理器
82
+
83
+ ```java
84
+ package [你的包名].handler;
85
+
86
+ import [你的包名].exception.BusinessException;
87
+ import [你的包名].exception.NotFoundException;
88
+ import jakarta.validation.ConstraintViolation;
89
+ import jakarta.validation.ConstraintViolationException;
90
+ import lombok.extern.slf4j.Slf4j;
91
+ import org.springframework.http.HttpStatus;
92
+ import org.springframework.http.ResponseEntity;
93
+ import org.springframework.validation.FieldError;
94
+ import org.springframework.web.bind.MethodArgumentNotValidException;
95
+ import org.springframework.web.bind.MissingServletRequestParameterException;
96
+ import org.springframework.web.bind.annotation.ExceptionHandler;
97
+ import org.springframework.web.bind.annotation.RestControllerAdvice;
98
+
99
+ import java.util.Map;
100
+ import java.util.stream.Collectors;
101
+
102
+ @Slf4j
103
+ @RestControllerAdvice
104
+ public class GlobalExceptionHandler {
105
+
106
+ /**
107
+ * 业务异常
108
+ */
109
+ @ExceptionHandler(BusinessException.class)
110
+ public ResponseEntity<Result<Void>> handleBusinessException(BusinessException e) {
111
+ log.warn("业务异常: {}", e.getMessage());
112
+ return ResponseEntity
113
+ .status(HttpStatus.BAD_REQUEST)
114
+ .body(Result.fail(e.getCode(), e.getMessage()));
115
+ }
116
+
117
+ /**
118
+ * 资源不存在
119
+ */
120
+ @ExceptionHandler(NotFoundException.class)
121
+ public ResponseEntity<Result<Void>> handleNotFoundException(NotFoundException e) {
122
+ log.warn("资源不存在: {}", e.getMessage());
123
+ return ResponseEntity
124
+ .status(HttpStatus.NOT_FOUND)
125
+ .body(Result.fail(404, e.getMessage()));
126
+ }
127
+
128
+ /**
129
+ * @RequestBody 参数校验失败
130
+ */
131
+ @ExceptionHandler(MethodArgumentNotValidException.class)
132
+ public ResponseEntity<Result<Map<String, String>>> handleValidationException(
133
+ MethodArgumentNotValidException e) {
134
+ Map<String, String> errors = e.getBindingResult().getFieldErrors().stream()
135
+ .collect(Collectors.toMap(
136
+ FieldError::getField,
137
+ fe -> fe.getDefaultMessage() != null ? fe.getDefaultMessage() : "校验失败",
138
+ (v1, v2) -> v1
139
+ ));
140
+ log.warn("参数校验失败: {}", errors);
141
+ return ResponseEntity
142
+ .status(HttpStatus.BAD_REQUEST)
143
+ .body(Result.fail(400, "参数校验失败"));
144
+ }
145
+
146
+ /**
147
+ * @RequestParam / @PathVariable 校验失败
148
+ */
149
+ @ExceptionHandler(ConstraintViolationException.class)
150
+ public ResponseEntity<Result<Void>> handleConstraintViolation(ConstraintViolationException e) {
151
+ String message = e.getConstraintViolations().stream()
152
+ .map(ConstraintViolation::getMessage)
153
+ .collect(Collectors.joining("; "));
154
+ log.warn("约束校验失败: {}", message);
155
+ return ResponseEntity
156
+ .status(HttpStatus.BAD_REQUEST)
157
+ .body(Result.fail(400, message));
158
+ }
159
+
160
+ /**
161
+ * 缺少请求参数
162
+ */
163
+ @ExceptionHandler(MissingServletRequestParameterException.class)
164
+ public ResponseEntity<Result<Void>> handleMissingParam(MissingServletRequestParameterException e) {
165
+ log.warn("缺少请求参数: {}", e.getParameterName());
166
+ return ResponseEntity
167
+ .status(HttpStatus.BAD_REQUEST)
168
+ .body(Result.fail(400, "缺少参数: " + e.getParameterName()));
169
+ }
170
+
171
+ /**
172
+ * 兜底:未知异常
173
+ */
174
+ @ExceptionHandler(Exception.class)
175
+ public ResponseEntity<Result<Void>> handleException(Exception e) {
176
+ log.error("系统异常", e);
177
+ return ResponseEntity
178
+ .status(HttpStatus.INTERNAL_SERVER_ERROR)
179
+ .body(Result.fail(500, "系统繁忙,请稍后重试"));
180
+ }
181
+ }
182
+ ```
183
+
184
+ ### 3. 参数校验(jakarta.validation)
185
+
186
+ ```java
187
+ package [你的包名].dto;
188
+
189
+ import jakarta.validation.constraints.*;
190
+ import lombok.Data;
191
+
192
+ @Data
193
+ public class UserCreateDTO {
194
+
195
+ @NotBlank(message = "用户名不能为空")
196
+ @Size(min = 2, max = 32, message = "用户名长度 2-32 位")
197
+ private String username;
198
+
199
+ @NotBlank(message = "邮箱不能为空")
200
+ @Email(message = "邮箱格式不正确")
201
+ private String email;
202
+
203
+ @NotNull(message = "年龄不能为空")
204
+ @Min(value = 1, message = "年龄最小为 1")
205
+ @Max(value = 150, message = "年龄最大为 150")
206
+ private Integer age;
207
+
208
+ @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
209
+ private String phone;
210
+ }
211
+ ```
212
+
213
+ **Controller 中使用**:
214
+ ```java
215
+ @PostMapping
216
+ public ResponseEntity<Result<Long>> create(@Valid @RequestBody UserCreateDTO dto) {
217
+ return ResponseEntity.ok(Result.ok(userService.create(dto)));
218
+ }
219
+ ```
220
+
221
+ ### 4. 分组校验
222
+
223
+ ```java
224
+ public interface CreateGroup {}
225
+ public interface UpdateGroup {}
226
+
227
+ @Data
228
+ public class UserDTO {
229
+
230
+ @Null(groups = CreateGroup.class, message = "创建时不能指定 ID")
231
+ @NotNull(groups = UpdateGroup.class, message = "更新时必须指定 ID")
232
+ private Long id;
233
+
234
+ @NotBlank(groups = {CreateGroup.class, UpdateGroup.class})
235
+ private String username;
236
+ }
237
+
238
+ // Controller 使用
239
+ @PostMapping
240
+ public Result<Long> create(@Validated(CreateGroup.class) @RequestBody UserDTO dto) { ... }
241
+
242
+ @PutMapping("/{id}")
243
+ public Result<Void> update(@Validated(UpdateGroup.class) @RequestBody UserDTO dto) { ... }
244
+ ```
245
+
246
+ ### 5. Service 层异常使用
247
+
248
+ ```java
249
+ @Service
250
+ public class UserServiceImpl implements IUserService {
251
+
252
+ @Override
253
+ public UserVO getById(Long id) {
254
+ User user = userMapper.selectById(id);
255
+ if (user == null) {
256
+ throw NotFoundException.of("用户", id);
257
+ }
258
+ // ... 转换为 VO
259
+ return userVO;
260
+ }
261
+
262
+ @Override
263
+ public void updateEmail(Long id, String email) {
264
+ // 检查邮箱是否已被使用
265
+ User existing = userMapper.selectByEmail(email);
266
+ if (existing != null && !existing.getId().equals(id)) {
267
+ throw new BusinessException(409, "邮箱已被其他用户使用");
268
+ }
269
+ // ... 更新逻辑
270
+ }
271
+ }
272
+ ```
273
+
274
+ ### 6. 日志规范
275
+
276
+ ```java
277
+ @Slf4j
278
+ @Service
279
+ public class OrderServiceImpl {
280
+
281
+ // 使用占位符(性能更好)
282
+ log.info("创建订单: orderNo={}, amount={}", dto.getOrderNo(), dto.getAmount());
283
+
284
+ // 异常日志带堆栈(第三个参数传异常对象)
285
+ log.error("处理失败: {}", e.getMessage(), e);
286
+
287
+ // 事务方法:所有异常都回滚
288
+ @Transactional(rollbackFor = Exception.class)
289
+ public void createOrder(OrderCreateDTO dto) {
290
+ log.info("开始创建订单, orderNo={}", dto.getOrderNo());
291
+ // ... 业务逻辑
292
+ log.info("订单创建成功, id={}", order.getId());
293
+ }
294
+ }
295
+ ```
296
+
297
+ ## 常见错误
298
+
299
+ | 错误 | 正确做法 |
300
+ |------|---------|
301
+ | 抛 `RuntimeException("xxx")` | 使用自定义业务异常类 |
302
+ | Controller 里 try-catch 所有异常 | 交给 `@RestControllerAdvice` 统一处理 |
303
+ | 异常信息暴露 SQL / 堆栈 | 对用户返回友好提示,日志记录完整信息 |
304
+ | 用 `javax.validation` 包 | JDK 17+ 使用 `jakarta.validation` |
305
+ | 吞掉异常:`catch (Exception e) {}` | 至少记录日志 `log.error("...", e)` |
306
+ | 所有异常都返回 200 状态码 | 根据异常类型返回对应 HTTP 状态码 |
307
+ | 用 `e.getMessage()` 直接返回给用户 | 第三方异常信息可能包含敏感信息,需要包装 |
308
+ | 校验逻辑写在 Controller 里 | 用 `@Valid` + DTO 注解声明式校验 |
309
+ | 日志用字符串拼接 `"失败:" + msg` | 用占位符 `log.error("失败: {}", msg, e)` |
310
+ | `@Transactional` 不指定回滚 | 加 `rollbackFor = Exception.class` |