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,625 @@
1
+ ---
2
+ name: auto-test
3
+ description: |
4
+ API 自动化测试技能。基于 Apifox MCP 读取接口文档,使用 Hurl 生成并执行真实 HTTP 测试,
5
+ 支持单接口测试、单业务组合(CRUD 生命周期)、跨业务串联(多模块流程),生成 HTML/JSON 测试报告。
6
+ 测试失败时自动调用 fix-bug 技能走标准修复流程。
7
+
8
+ 触发场景:
9
+ - 需要对 API 接口进行自动化测试
10
+ - 需要验证接口是否符合文档定义
11
+ - 需要组合多个接口形成业务流程测试
12
+ - 需要生成接口测试报告
13
+ - 开发完成后需要回归测试验证
14
+
15
+ 触发词:自动测试、auto-test、接口测试、API测试、Hurl、测试报告、回归测试
16
+ ---
17
+
18
+ # API 自动化测试(Hurl + Apifox MCP)
19
+
20
+ ## 概述
21
+
22
+ 通过 Apifox MCP 读取接口文档 → AI 生成 Hurl 测试文件 → 执行真实 HTTP 请求 → 生成测试报告 → 失败项**自动调用 `/fix-bug` 走标准修复流程**。
23
+
24
+ **前置依赖**:
25
+ - Hurl CLI(`brew install hurl` / `winget install hurl` / `apt install hurl`)
26
+ - Apifox MCP Server(已配置项目 ID 和 Access Token)
27
+ - 后端服务运行中
28
+
29
+ ## 测试粒度
30
+
31
+ | 粒度 | 说明 | 文件命名 | 示例 |
32
+ |------|------|---------|------|
33
+ | **单接口** | 一个 API 端点的正常+异常场景 | `{接口名}.hurl` | `create-order.hurl` |
34
+ | **单业务组合** | 一个模块的 CRUD 生命周期 | `{模块}-lifecycle.hurl` | `order-lifecycle.hurl` |
35
+ | **跨业务串联** | 多模块联动的完整业务流程 | `{流程名}-flow.hurl` | `menu-order-payment-flow.hurl` |
36
+
37
+ ## 文件结构
38
+
39
+ ```
40
+ tests/hurl/
41
+ ├── env/
42
+ │ ├── dev.env # 开发环境变量
43
+ │ ├── test.env # 测试环境
44
+ │ └── prod.env # 生产环境(只读接口)
45
+ ├── {模块名}/ # 按业务模块组织
46
+ │ ├── {接口名}.hurl # 单接口测试
47
+ │ └── {模块}-lifecycle.hurl # 单业务组合
48
+ ├── flows/ # 跨业务串联
49
+ │ └── {流程名}-flow.hurl
50
+ └── reports/ # 测试报告(gitignore)
51
+ ├── index.html
52
+ └── report.json
53
+ ```
54
+
55
+ ## 系统接口请求响应规范
56
+
57
+ > 详细参考:`references/api-conventions.md`(首次生成测试时必须读取)
58
+
59
+ ### 核心契约速查
60
+
61
+ | 项目 | 规范 |
62
+ |------|------|
63
+ | 请求封装 | `{"content": { ... }}` (LeRequest) |
64
+ | 成功码 | `code == 10000` |
65
+ | 认证头 | `X-Token` + `merchant-id` + `Merchant-Id` |
66
+ | 未授权 | 不带 X-Token → HTTP 401 |
67
+
68
+ ### 返回类型 → data 结构映射
69
+
70
+ | Controller 返回类型 | data 结构 | 断言关键路径 |
71
+ |---------------------|----------|-------------|
72
+ | `Long`(save) | 雪花 ID | `$.data` isInteger |
73
+ | `void`(delete/submit/export) | null | 仅验证 `$.code == 10000` |
74
+ | `XxxVO`(detail) | 对象 | `$.data.id` exists |
75
+ | `PageVO<T>`(设置类 page) | `$.data.records[]` | `$.data.records` isCollection |
76
+ | `ReportBaseTotalVO<T>`(报表 page) | `$.data.resultPage.records[]` + `$.data.totalLine` | 分页 + 合计行 |
77
+
78
+ ### content 传值类型(最易出错)
79
+
80
+ | 场景 | content 类型 | 示例 |
81
+ |------|-------------|------|
82
+ | 分页查询 | 对象 | `{"page":{"current":1,"size":10},"keyword":"xxx"}` |
83
+ | 新增/编辑 | 对象 | `{"name":"xxx","entries":[...]}` |
84
+ | 详情/删除/提交 | **裸 Long** | `{{id}}`(不是 `{"id":{{id}}}`) |
85
+
86
+ > **关键区别**:detail/delete/submit 的 content 是**直接传 ID 值**,不需要包装成对象。
87
+
88
+ ## Hurl 语法速查
89
+
90
+ ### 请求头规范(必须遵守)
91
+
92
+ 每个需要认证的请求必须携带以下 Header:
93
+
94
+ | Header | 来源 | 用途 |
95
+ |--------|------|------|
96
+ | `X-Token` | 环境变量 `{{x_token}}`(配置文件提供) | 认证令牌 |
97
+ | `merchant-id` | 环境变量 `{{merchant_id}}` | 商户路由(数据源切换) |
98
+ | `Merchant-Id` | 环境变量 `{{merchant_id_auth}}` | 商户权限校验 |
99
+
100
+ ### 基础请求 + 断言
101
+
102
+ ```hurl
103
+ # 请求
104
+ POST {{base_url}}/api/v2/web/order/add
105
+ Content-Type: application/json
106
+ X-Token: {{x_token}}
107
+ merchant-id: {{merchant_id}}
108
+ Merchant-Id: {{merchant_id_auth}}
109
+ {
110
+ "content": {
111
+ "menuId": 1001,
112
+ "quantity": 2
113
+ }
114
+ }
115
+
116
+ # 响应断言
117
+ HTTP 200
118
+ [Asserts]
119
+ jsonpath "$.code" == 10000
120
+ jsonpath "$.msg" == "操作成功"
121
+ jsonpath "$.data" isInteger
122
+ ```
123
+
124
+ ### 变量捕获(请求间传递数据)
125
+
126
+ ```hurl
127
+ # 如果需要动态获取 Token,可以通过登录接口捕获
128
+ POST {{base_url}}/api/v2/web/auth/login
129
+ Content-Type: application/json
130
+ {
131
+ "username": "{{username}}",
132
+ "password": "{{password}}"
133
+ }
134
+
135
+ HTTP 200
136
+ [Captures]
137
+ x_token: jsonpath "$.data.token"
138
+ ```
139
+
140
+ > 注意:X-Token 优先使用 env 文件中预配置的值,避免每次都调登录接口。
141
+ > 仅在测试登录流程本身或 Token 过期场景时,才通过登录接口动态获取。
142
+
143
+ ### 常用断言
144
+
145
+ ```hurl
146
+ [Asserts]
147
+ # 状态码
148
+ status == 200
149
+
150
+ # JSON 路径
151
+ jsonpath "$.code" == 10000
152
+ jsonpath "$.data" exists
153
+ jsonpath "$.data" isCollection
154
+ jsonpath "$.data.id" isInteger
155
+ jsonpath "$.data.name" isString
156
+ jsonpath "$.data.list" count > 0
157
+
158
+ # 类型检查
159
+ jsonpath "$.data.price" isFloat
160
+
161
+ # 包含
162
+ jsonpath "$.msg" contains "成功"
163
+
164
+ # 正则
165
+ jsonpath "$.data.phone" matches "^1[3-9]\\d{9}$"
166
+ ```
167
+
168
+ ### 环境变量文件格式
169
+
170
+ ```properties
171
+ # env/dev.env
172
+ base_url=http://192.168.97.235:58300
173
+
174
+ # 认证 Token(X-Token 请求头,配置后所有请求自动携带)
175
+ x_token=你的Token值
176
+
177
+ # 商户路由(merchant-id 请求头,用于数据源切换)
178
+ merchant_id=你的商户ID
179
+
180
+ # 商户权限(Merchant-Id 请求头,用于权限校验)
181
+ merchant_id_auth=你的商户ID
182
+ ```
183
+
184
+ ## 执行命令
185
+
186
+ ```bash
187
+ # 运行单个测试
188
+ hurl --test --variables-file tests/hurl/env/dev.env tests/hurl/order/create-order.hurl
189
+
190
+ # 运行模块所有测试
191
+ hurl --test --variables-file tests/hurl/env/dev.env tests/hurl/order/*.hurl
192
+
193
+ # 运行全部测试 + 生成报告
194
+ hurl --test \
195
+ --variables-file tests/hurl/env/dev.env \
196
+ --report-html tests/hurl/reports \
197
+ --report-json tests/hurl/reports/report.json \
198
+ tests/hurl/**/*.hurl
199
+
200
+ # 传递动态变量(如时间戳避免唯一键冲突)
201
+ TS=$(date +%s) && hurl --test \
202
+ --variables-file tests/hurl/env/dev.env \
203
+ --variable "voucher_type_ts=$TS" \
204
+ --variable "voucher_word_ts=$TS" \
205
+ tests/hurl/finance/*.hurl
206
+
207
+ # 指定超时(毫秒)
208
+ hurl --test --connect-timeout 5000 --max-time 30000 ...
209
+
210
+ # 失败时继续执行(不中断)
211
+ hurl --test --continue-on-error ...
212
+ ```
213
+
214
+ ## 生成测试的流程
215
+
216
+ ### 第一步:读取接口文档
217
+
218
+ 通过 Apifox MCP 读取指定模块的接口列表:
219
+ - 接口路径、HTTP 方法
220
+ - 请求参数(Header、Body、Query)
221
+ - 响应结构(字段名、类型、示例值)
222
+
223
+ ### 第二步:读取 Param/VO 源码(关键!)
224
+
225
+ **必须读取后端源码**以确保测试完整性:
226
+
227
+ 1. **Param 类**:提取所有查询条件字段,确保每个字段都有对应测试用例
228
+ 2. **VO 类**:提取所有响应字段,在断言中验证字段存在性和类型
229
+ 3. **Mapper XML**:理解 SQL 逻辑、JOIN 关系、动态条件
230
+
231
+ ```
232
+ 示例:SubjectDetailParam 有 startDate、endDate、areaId、canteenId、keyword
233
+ → 测试用例必须覆盖:
234
+ - 基础分页查询(startDate + endDate)
235
+ - keyword 搜索(科目编码/名称)
236
+ - 区域+食堂筛选(areaId + canteenId)
237
+ - 单日查询(startDate == endDate)
238
+ - 空结果区间(验证空数组返回)
239
+ - 分页第二页
240
+ - 导出接口
241
+ - 未授权测试
242
+ ```
243
+
244
+ ### 第三步:准备测试数据(先查后用,禁止硬编码)
245
+
246
+ **核心原则:测试数据必须从真实环境动态获取,不能硬编码不存在的 ID 或编码。**
247
+
248
+ ```hurl
249
+ # ✅ 正确:先查询获取真实数据,再用于后续请求
250
+ # 0a. 获取真实食堂 ID
251
+ POST {{base_url}}/api/v2/alloc/canteen/page-canteen
252
+ ...
253
+ [Captures]
254
+ canteen_id: jsonpath "$.data.records[0].canteenId"
255
+ area_id: jsonpath "$.data.records[0].areaId"
256
+
257
+ # 0b. 获取关联表的真实记录
258
+ POST {{base_url}}/report/finance/setting/voucher-type/page
259
+ ...
260
+ [Captures]
261
+ voucher_type_id: jsonpath "$.data.records[0].id"
262
+ ```
263
+
264
+ ```hurl
265
+ # ❌ 错误:硬编码不存在的引用数据
266
+ {
267
+ "content": {
268
+ "costNo": "9999", # 可能不存在
269
+ "voucherTypeId": 1 # 可能不存在
270
+ }
271
+ }
272
+ ```
273
+
274
+ **测试数据准备检查清单**:
275
+ - [ ] 外键引用的 ID 通过查询接口动态获取
276
+ - [ ] 业务编码(如 costNo)使用数据库中已存在的真实记录
277
+ - [ ] 唯一键字段使用时间戳变量避免冲突(`{{xxx_ts}}`)
278
+ - [ ] 创建的测试数据标记 summary 含 `auto-test` 便于识别清理
279
+ - [ ] 测试结束后有清理步骤(删除测试数据)
280
+
281
+ ### 第四步:生成 .hurl 文件
282
+
283
+ #### 4.1 查询条件类型识别与测试策略
284
+
285
+ 读取 Param 类后,**逐字段识别条件类型**,按下表生成对应测试用例:
286
+
287
+ | 条件类型 | 识别特征 | 示例字段 | 必须生成的测试用例 |
288
+ |---------|---------|---------|----------------|
289
+ | **日期范围** | `startDate`/`endDate` 成对 | `startDate`, `endDate` | ① 正常区间 ② 单日(start==end) ③ 跨月区间 ④ 必填时留空(预期报错/空结果) |
290
+ | **关键词搜索** | `keyword`, `name`, `code` 等 | `keyword`, `canteenName` | ① 精确匹配已知值 ② 模糊匹配前缀 ③ 无匹配的乱码(验证空数组) ④ 留空(不过滤,验证正常返回) |
291
+ | **枚举/状态** | 字段类型为枚举或 Integer 语义明确 | `status`, `type`, `mealtype` | ① 每个有效枚举值各一条请求 ② 可选时留空(验证不过滤) |
292
+ | **ID / 外键** | 字段名含 `Id`,关联其他表 | `canteenId`, `areaId` | ① 传有效 ID(有数据,验证过滤生效) ② 留空(不过滤,验证正常返回) ③ 传不存在 ID(验证空结果) |
293
+ | **布尔开关** | boolean / Integer 表示开关 | `isSubmitted`, `isEnabled` | ① `true`/`1` ② `false`/`0` ③ 留空 |
294
+ | **集合/多选** | `List<Integer>`, `List<String>` | `mealtimeTypes`, `statusList` | ① 单项 ② 多项组合 ③ 空列表或留空 |
295
+ | **分页** | `page.current`/`page.size` | `page` | ① 第1页 size=10 ② 第2页(验证翻页) ③ size=1(验证精确分页) |
296
+
297
+ #### 4.2 各条件类型 Hurl 示例
298
+
299
+ **① 日期范围**
300
+ ```hurl
301
+ # TC-DATE-1 正常日期区间
302
+ POST {{base_url}}/api/v2/web/report/subject/page
303
+ ...
304
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31"}}
305
+ HTTP 200
306
+ [Asserts]
307
+ jsonpath "$.code" == 10000
308
+ jsonpath "$.data.resultPage.records" count > 0
309
+
310
+ # TC-DATE-2 单日查询(start == end)
311
+ POST {{base_url}}/api/v2/web/report/subject/page
312
+ ...
313
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-15","endDate":"2024-01-15"}}
314
+ HTTP 200
315
+ [Asserts]
316
+ jsonpath "$.code" == 10000
317
+
318
+ # TC-DATE-3 空区间(故意用无数据的日期)
319
+ POST {{base_url}}/api/v2/web/report/subject/page
320
+ ...
321
+ {"content": {"page":{"current":1,"size":10},"startDate":"2099-01-01","endDate":"2099-01-31"}}
322
+ HTTP 200
323
+ [Asserts]
324
+ jsonpath "$.code" == 10000
325
+ jsonpath "$.data.resultPage.records" count == 0
326
+ ```
327
+
328
+ **② 关键词搜索**
329
+ ```hurl
330
+ # TC-KW-1 精确关键词匹配
331
+ POST {{base_url}}/api/v2/web/report/subject/page
332
+ ...
333
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31","keyword":"{{known_canteen_name}}"}}
334
+ HTTP 200
335
+ [Asserts]
336
+ jsonpath "$.code" == 10000
337
+ jsonpath "$.data.resultPage.records" count > 0
338
+
339
+ # TC-KW-2 无匹配关键词
340
+ POST {{base_url}}/api/v2/web/report/subject/page
341
+ ...
342
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31","keyword":"__NO_MATCH_XYZ__"}}
343
+ HTTP 200
344
+ [Asserts]
345
+ jsonpath "$.code" == 10000
346
+ jsonpath "$.data.resultPage.records" count == 0
347
+
348
+ # TC-KW-3 留空 keyword(不过滤)
349
+ POST {{base_url}}/api/v2/web/report/subject/page
350
+ ...
351
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31"}}
352
+ HTTP 200
353
+ [Asserts]
354
+ jsonpath "$.code" == 10000
355
+ jsonpath "$.data.resultPage.records" isCollection
356
+ ```
357
+
358
+ **③ 枚举/状态**
359
+ ```hurl
360
+ # TC-ENUM-1 状态=1(已提交)
361
+ POST {{base_url}}/api/v2/web/order/page
362
+ ...
363
+ {"content": {"page":{"current":1,"size":10},"status":1}}
364
+ HTTP 200
365
+ [Asserts]
366
+ jsonpath "$.code" == 10000
367
+ jsonpath "$.data.records[0].status" == 1
368
+
369
+ # TC-ENUM-2 状态=2(已完成)
370
+ POST {{base_url}}/api/v2/web/order/page
371
+ ...
372
+ {"content": {"page":{"current":1,"size":10},"status":2}}
373
+ HTTP 200
374
+ [Asserts]
375
+ jsonpath "$.code" == 10000
376
+
377
+ # TC-ENUM-3 不传 status(全部状态)
378
+ POST {{base_url}}/api/v2/web/order/page
379
+ ...
380
+ {"content": {"page":{"current":1,"size":10}}}
381
+ HTTP 200
382
+ [Asserts]
383
+ jsonpath "$.code" == 10000
384
+ ```
385
+
386
+ **④ ID / 外键**
387
+ ```hurl
388
+ # TC-ID-1 传有效 canteenId(有数据,过滤生效)
389
+ POST {{base_url}}/api/v2/web/report/subject/page
390
+ ...
391
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31","canteenId":{{canteen_id}}}}
392
+ HTTP 200
393
+ [Asserts]
394
+ jsonpath "$.code" == 10000
395
+ jsonpath "$.data.resultPage.records" count > 0
396
+ jsonpath "$.data.resultPage.records[0].canteenId" == {{canteen_id}}
397
+
398
+ # TC-ID-2 不传 canteenId(不过滤)
399
+ POST {{base_url}}/api/v2/web/report/subject/page
400
+ ...
401
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31"}}
402
+ HTTP 200
403
+ [Asserts]
404
+ jsonpath "$.code" == 10000
405
+
406
+ # TC-ID-3 传不存在 ID(空结果)
407
+ POST {{base_url}}/api/v2/web/report/subject/page
408
+ ...
409
+ {"content": {"page":{"current":1,"size":10},"startDate":"2024-01-01","endDate":"2024-01-31","canteenId":999999999}}
410
+ HTTP 200
411
+ [Asserts]
412
+ jsonpath "$.code" == 10000
413
+ jsonpath "$.data.resultPage.records" count == 0
414
+ ```
415
+
416
+ **⑤ 集合/多选**
417
+ ```hurl
418
+ # TC-LIST-1 单项
419
+ POST {{base_url}}/api/v2/web/order/page
420
+ ...
421
+ {"content": {"page":{"current":1,"size":10},"mealtimeTypes":[1]}}
422
+ HTTP 200
423
+ [Asserts]
424
+ jsonpath "$.code" == 10000
425
+
426
+ # TC-LIST-2 多项组合
427
+ POST {{base_url}}/api/v2/web/order/page
428
+ ...
429
+ {"content": {"page":{"current":1,"size":10},"mealtimeTypes":[1,2,3]}}
430
+ HTTP 200
431
+ [Asserts]
432
+ jsonpath "$.code" == 10000
433
+ jsonpath "$.data.records" isCollection
434
+
435
+ # TC-LIST-3 空列表(不过滤)
436
+ POST {{base_url}}/api/v2/web/order/page
437
+ ...
438
+ {"content": {"page":{"current":1,"size":10},"mealtimeTypes":[]}}
439
+ HTTP 200
440
+ [Asserts]
441
+ jsonpath "$.code" == 10000
442
+ ```
443
+
444
+ #### 4.3 测试场景清单(完整版)
445
+
446
+ 每个查询接口必须覆盖以下场景,按顺序在同一 `.hurl` 文件中组织:
447
+
448
+ ```
449
+ 必须生成(顺序执行):
450
+ TC-BASE 基础分页查询 — 只传必填参数,验证分页结构 + VO 所有字段存在
451
+ TC-TOTAL 合计行验证 — 如返回类型含 totalLine,验证所有合计字段
452
+ TC-DATE-* 日期条件用例 — 若有 startDate/endDate(见上方策略)
453
+ TC-KW-* 关键词用例 — 若有 keyword 类字段(见上方策略)
454
+ TC-ENUM-* 枚举用例 — 若有状态/类型枚举,每个枚举值各一条
455
+ TC-ID-* 外键 ID 用例 — 若有 xxxId 过滤(见上方策略)
456
+ TC-LIST-* 集合用例 — 若有多选字段(见上方策略)
457
+ TC-PAGE 翻页验证 — current=2,验证翻页正确(total > size 时才有意义)
458
+ TC-EMPTY 空结果验证 — 使用必然无数据的条件,验证 records count == 0
459
+ TC-EXPORT 导出接口 — 验证 code=10000(若有导出接口)
460
+ TC-UNAUTH 未授权 — 不带 X-Token,预期 HTTP 401
461
+ ```
462
+
463
+ > **命名规范**:在 Hurl 文件中用注释标注场景编号,便于报告定位:
464
+ > ```hurl
465
+ > # TC-DATE-1 正常日期区间
466
+ > # TC-KW-2 无匹配关键词
467
+ > ```
468
+
469
+ **数据正确性验证**(不只是结构存在,还要验证值合理):
470
+
471
+ ```hurl
472
+ # ✅ 结构验证 + 数据正确性
473
+ [Asserts]
474
+ jsonpath "$.code" == 10000
475
+ jsonpath "$.data.resultPage.records" isCollection
476
+ jsonpath "$.data.resultPage.records" count > 0
477
+ # VO 字段存在性
478
+ jsonpath "$.data.resultPage.records[0].costNo" isString
479
+ jsonpath "$.data.resultPage.records[0].costTypeName" isString # 关联字段不能为 null
480
+ jsonpath "$.data.resultPage.records[0].debitAmount" exists
481
+ # 合计行数据合理性
482
+ jsonpath "$.data.totalLine.debitAmount" exists
483
+ jsonpath "$.data.totalLine.creditAmount" exists
484
+ ```
485
+
486
+ ### 第五步:执行并生成报告
487
+
488
+ ```bash
489
+ hurl --test \
490
+ --variables-file tests/hurl/env/dev.env \
491
+ --report-html tests/hurl/reports \
492
+ --report-json tests/hurl/reports/report.json \
493
+ --continue-on-error \
494
+ tests/hurl/{模块}/*.hurl
495
+ ```
496
+
497
+ ### 第六步:解析报告
498
+
499
+ 读取 `report.json`,输出摘要:
500
+
501
+ ```markdown
502
+ ## 测试报告摘要
503
+
504
+ | 状态 | 数量 | 占比 |
505
+ |------|------|------|
506
+ | PASS | 15 | 75% |
507
+ | FAIL | 3 | 15% |
508
+ | ERROR| 2 | 10% |
509
+
510
+ ### 失败详情
511
+
512
+ | 文件 | 接口 | 失败原因 |
513
+ |------|------|---------|
514
+ | order/create-order.hurl | POST /api/v2/web/order/add | 预期 code=10000,实际 code=40001 |
515
+ | menu/query-menu.hurl | GET /api/v2/web/menu/get/1 | 预期 HTTP 200,实际 HTTP 500 |
516
+ ```
517
+
518
+ ### 第七步:失败项自动触发 fix-bug 流程
519
+
520
+ **当测试存在失败项时,必须自动调用 `/fix-bug` 走标准修复流程:**
521
+
522
+ ```
523
+ 测试失败 → 分析失败原因 → 分类处理:
524
+
525
+ 1. 测试数据问题(非代码 Bug):
526
+ - 引用数据不存在 → 修正测试用例中的数据
527
+ - 唯一键冲突 → 添加时间戳变量
528
+ - 权限/状态限制 → 调整测试前置条件
529
+
530
+ 2. 后端代码 Bug:
531
+ → 自动调用 Skill(fix-bug) 走标准修复流程
532
+ → 包含:排查报告 → 用户确认 → 修复代码 → 重跑测试验证
533
+
534
+ 3. 接口文档与实现不一致:
535
+ → 输出差异报告,等待用户确认以哪个为准
536
+ ```
537
+
538
+ **fix-bug 自动触发条件**:
539
+ - HTTP 状态码非预期(如 500)
540
+ - 业务码非预期(如 code != 10000)
541
+ - 响应字段缺失或类型不匹配
542
+ - 关联字段为 null(如 costTypeName 为 null 说明 JOIN 失败)
543
+ - 导出数据异常(原始字段暴露、金额未转换等)
544
+
545
+ **Bug 报告格式**(传递给 fix-bug):
546
+
547
+ ```
548
+ Bug 信息:
549
+ - 接口:{METHOD} {URL}
550
+ - 请求参数:{request body}
551
+ - 预期响应:{expected}
552
+ - 实际响应:{actual}
553
+ - Hurl 文件:{file path}
554
+ - 失败断言:{assertion detail}
555
+ - 关联源码:{Controller/Service/Mapper 文件路径}
556
+ ```
557
+
558
+ ## LeRequest 适配
559
+
560
+ leniu 项目的 POST 请求体使用 `LeRequest<T>` 封装:
561
+
562
+ ```hurl
563
+ # ✅ 正确:使用 content 包装 + 三个必要 Header
564
+ POST {{base_url}}/api/v2/web/order/add
565
+ Content-Type: application/json
566
+ X-Token: {{x_token}}
567
+ merchant-id: {{merchant_id}}
568
+ Merchant-Id: {{merchant_id_auth}}
569
+ {
570
+ "content": {
571
+ "menuId": 1001,
572
+ "quantity": 2
573
+ }
574
+ }
575
+
576
+ # ❌ 错误:直接传业务字段 / 缺少 Header
577
+ POST {{base_url}}/api/v2/web/order/add
578
+ {
579
+ "menuId": 1001,
580
+ "quantity": 2
581
+ }
582
+ ```
583
+
584
+ ## 已知陷阱(Lessons Learned)
585
+
586
+ ### 1. del_flag 约定不统一
587
+ leniu 主表用 `2=正常, 1=删除`,但某些设置表(如 `finance_voucher_type`, `finance_voucher_word`)使用 `@TableLogic` 默认值 `0=正常, 1=删除`。**不要盲目统一,要检查每张表的实际约定。**
588
+
589
+ ### 2. 测试数据必须使用真实存在的引用数据
590
+ 关联查询(JOIN)依赖引用数据存在且状态正确。例如:
591
+ - `cost_type` 表的 `state = 1` 才是有效记录
592
+ - `costNo` 必须在 `cost_type` 中存在且 `state = 1`
593
+ - 否则 LEFT JOIN 后关联字段(如 `costTypeName`)为 null
594
+
595
+ ### 3. 导出验证要点
596
+ 导出接口是异步的(返回 void → code=10000),需要额外关注:
597
+ - VO 的 `@ExcelIgnore` 是否正确标记了内部字段
598
+ - `@ExcelProperty(order=N)` 的顺序是否符合产品要求
599
+ - 金额字段是否配置了 `converter = CustomNumberConverter.class`(分→元)
600
+ - 枚举字段是否有对应的描述字段(如 submitStatus → submitStatusDesc)
601
+
602
+ ### 4. 唯一键冲突
603
+ CRUD 生命周期测试中,新增记录的唯一键字段(如 typeCode)需要加时间戳变量:
604
+ ```hurl
605
+ "typeCode": "AT_HURL_{{voucher_type_ts}}"
606
+ ```
607
+ 执行时通过 `--variable "voucher_type_ts=$(date +%s)"` 传入。
608
+
609
+ ### 5. 后端未重启
610
+ 修改后端代码后必须重启服务才能生效。如果测试结果不符合预期,先确认后端是否已重启。
611
+
612
+ ## .gitignore 配置
613
+
614
+ ```gitignore
615
+ # Hurl 测试报告
616
+ tests/hurl/reports/
617
+ ```
618
+
619
+ ## 注意
620
+
621
+ - 测试文件(`.hurl`)需要 Git 管理,报告目录不需要
622
+ - `env/*.env` 中的密码/Token 建议用环境变量替代,不要提交敏感信息
623
+ - 如果是 leniu 项目的 POST 接口,请求体必须用 `{"content": {...}}` 包装
624
+ - 生成测试前确保 Hurl CLI 已安装(`hurl --version`)
625
+ - 与 `test-development` 技能的区别:本技能是真实 HTTP 请求的集成测试,`test-development` 是 JUnit5 单元测试/MockMvc 测试