code-ai-installer 1.2.0 → 1.3.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 (925) hide show
  1. package/.agents/a11y_baseline/SKILL.md +260 -41
  2. package/.agents/a11y_baseline/agents/claude.json +2 -2
  3. package/.agents/a11y_baseline/agents/copilot.json +2 -2
  4. package/.agents/a11y_baseline/agents/gemini.json +2 -2
  5. package/.agents/a11y_baseline/agents/openai.yaml +1 -1
  6. package/.agents/a11y_baseline/agents/qwen.json +2 -2
  7. package/.agents/a11y_baseline/agents/skill.yaml +2 -2
  8. package/.agents/adr_log/SKILL.md +369 -69
  9. package/.agents/adr_log/agents/claude.json +2 -2
  10. package/.agents/adr_log/agents/copilot.json +2 -2
  11. package/.agents/adr_log/agents/gemini.json +2 -2
  12. package/.agents/adr_log/agents/openai.yaml +1 -1
  13. package/.agents/adr_log/agents/qwen.json +2 -2
  14. package/.agents/adr_log/agents/skill.yaml +2 -2
  15. package/.agents/api_contract_compliance_review/SKILL.md +224 -18
  16. package/.agents/api_contract_compliance_review/agents/claude.json +2 -2
  17. package/.agents/api_contract_compliance_review/agents/copilot.json +2 -2
  18. package/.agents/api_contract_compliance_review/agents/gemini.json +2 -2
  19. package/.agents/api_contract_compliance_review/agents/openai.yaml +1 -1
  20. package/.agents/api_contract_compliance_review/agents/qwen.json +2 -2
  21. package/.agents/api_contract_compliance_review/agents/skill.yaml +2 -2
  22. package/.agents/api_contracts/SKILL.md +329 -42
  23. package/.agents/api_contracts/agents/claude.json +2 -2
  24. package/.agents/api_contracts/agents/copilot.json +2 -2
  25. package/.agents/api_contracts/agents/gemini.json +2 -2
  26. package/.agents/api_contracts/agents/openai.yaml +1 -1
  27. package/.agents/api_contracts/agents/qwen.json +2 -2
  28. package/.agents/api_contracts/agents/skill.yaml +2 -2
  29. package/.agents/architecture_compliance_review/SKILL.md +213 -17
  30. package/.agents/architecture_compliance_review/agents/claude.json +2 -2
  31. package/.agents/architecture_compliance_review/agents/copilot.json +2 -2
  32. package/.agents/architecture_compliance_review/agents/gemini.json +2 -2
  33. package/.agents/architecture_compliance_review/agents/openai.yaml +1 -1
  34. package/.agents/architecture_compliance_review/agents/qwen.json +2 -2
  35. package/.agents/architecture_compliance_review/agents/skill.yaml +2 -2
  36. package/.agents/architecture_doc/SKILL.md +384 -92
  37. package/.agents/architecture_doc/agents/claude.json +2 -2
  38. package/.agents/architecture_doc/agents/copilot.json +2 -2
  39. package/.agents/architecture_doc/agents/gemini.json +2 -2
  40. package/.agents/architecture_doc/agents/openai.yaml +1 -1
  41. package/.agents/architecture_doc/agents/qwen.json +2 -2
  42. package/.agents/architecture_doc/agents/skill.yaml +2 -2
  43. package/.agents/board/SKILL.md +232 -43
  44. package/.agents/board/agents/claude.json +2 -2
  45. package/.agents/board/agents/copilot.json +2 -2
  46. package/.agents/board/agents/gemini.json +2 -2
  47. package/.agents/board/agents/openai.yaml +1 -1
  48. package/.agents/board/agents/qwen.json +2 -2
  49. package/.agents/board/agents/skill.yaml +2 -2
  50. package/.agents/cloud_infrastructure_security/SKILL.md +277 -68
  51. package/.agents/cloud_infrastructure_security/agents/claude.json +2 -2
  52. package/.agents/cloud_infrastructure_security/agents/copilot.json +2 -2
  53. package/.agents/cloud_infrastructure_security/agents/gemini.json +2 -2
  54. package/.agents/cloud_infrastructure_security/agents/openai.yaml +1 -1
  55. package/.agents/cloud_infrastructure_security/agents/qwen.json +2 -2
  56. package/.agents/cloud_infrastructure_security/agents/skill.yaml +2 -2
  57. package/.agents/code_review_checklist/SKILL.md +200 -47
  58. package/.agents/code_review_checklist/agents/claude.json +2 -2
  59. package/.agents/code_review_checklist/agents/copilot.json +2 -2
  60. package/.agents/code_review_checklist/agents/gemini.json +2 -2
  61. package/.agents/code_review_checklist/agents/openai.yaml +1 -1
  62. package/.agents/code_review_checklist/agents/qwen.json +2 -2
  63. package/.agents/code_review_checklist/agents/skill.yaml +2 -2
  64. package/.agents/current_state_analysis/SKILL.md +225 -44
  65. package/.agents/current_state_analysis/agents/claude.json +2 -2
  66. package/.agents/current_state_analysis/agents/copilot.json +2 -2
  67. package/.agents/current_state_analysis/agents/gemini.json +2 -2
  68. package/.agents/current_state_analysis/agents/openai.yaml +1 -1
  69. package/.agents/current_state_analysis/agents/qwen.json +2 -2
  70. package/.agents/current_state_analysis/agents/skill.yaml +2 -2
  71. package/.agents/data_model/SKILL.md +285 -40
  72. package/.agents/data_model/agents/claude.json +2 -2
  73. package/.agents/data_model/agents/copilot.json +2 -2
  74. package/.agents/data_model/agents/gemini.json +2 -2
  75. package/.agents/data_model/agents/openai.yaml +1 -1
  76. package/.agents/data_model/agents/qwen.json +2 -2
  77. package/.agents/data_model/agents/skill.yaml +2 -2
  78. package/.agents/dependency_supply_chain_review/SKILL.md +300 -20
  79. package/.agents/dependency_supply_chain_review/agents/claude.json +2 -2
  80. package/.agents/dependency_supply_chain_review/agents/copilot.json +2 -2
  81. package/.agents/dependency_supply_chain_review/agents/gemini.json +2 -2
  82. package/.agents/dependency_supply_chain_review/agents/openai.yaml +1 -1
  83. package/.agents/dependency_supply_chain_review/agents/qwen.json +2 -2
  84. package/.agents/dependency_supply_chain_review/agents/skill.yaml +2 -2
  85. package/.agents/deployment_ci_plan/SKILL.md +410 -51
  86. package/.agents/deployment_ci_plan/agents/claude.json +3 -2
  87. package/.agents/deployment_ci_plan/agents/copilot.json +3 -2
  88. package/.agents/deployment_ci_plan/agents/gemini.json +3 -2
  89. package/.agents/deployment_ci_plan/agents/openai.yaml +1 -1
  90. package/.agents/deployment_ci_plan/agents/qwen.json +3 -2
  91. package/.agents/deployment_ci_plan/agents/skill.yaml +2 -1
  92. package/.agents/design_intake/SKILL.md +225 -71
  93. package/.agents/design_intake/agents/claude.json +2 -2
  94. package/.agents/design_intake/agents/copilot.json +2 -2
  95. package/.agents/design_intake/agents/gemini.json +2 -2
  96. package/.agents/design_intake/agents/openai.yaml +1 -1
  97. package/.agents/design_intake/agents/qwen.json +2 -2
  98. package/.agents/design_intake/agents/skill.yaml +2 -2
  99. package/.agents/design_parity_review/SKILL.md +216 -73
  100. package/.agents/design_systems/SKILL.md +432 -15
  101. package/.agents/design_systems/agents/claude.json +2 -2
  102. package/.agents/design_systems/agents/copilot.json +2 -2
  103. package/.agents/design_systems/agents/gemini.json +2 -2
  104. package/.agents/design_systems/agents/openai.yaml +1 -1
  105. package/.agents/design_systems/agents/qwen.json +2 -2
  106. package/.agents/design_systems/agents/skill.yaml +2 -2
  107. package/.agents/dev_reference_snippets/SKILL.md +305 -117
  108. package/.agents/dev_reference_snippets/agents/claude.json +2 -2
  109. package/.agents/dev_reference_snippets/agents/copilot.json +2 -2
  110. package/.agents/dev_reference_snippets/agents/gemini.json +2 -2
  111. package/.agents/dev_reference_snippets/agents/openai.yaml +1 -1
  112. package/.agents/dev_reference_snippets/agents/qwen.json +2 -2
  113. package/.agents/dev_reference_snippets/agents/skill.yaml +2 -2
  114. package/.agents/docker_kubernetes_architecture/SKILL.md +480 -145
  115. package/.agents/docker_kubernetes_architecture/agents/claude.json +2 -2
  116. package/.agents/docker_kubernetes_architecture/agents/copilot.json +2 -2
  117. package/.agents/docker_kubernetes_architecture/agents/gemini.json +2 -2
  118. package/.agents/docker_kubernetes_architecture/agents/openai.yaml +1 -1
  119. package/.agents/docker_kubernetes_architecture/agents/qwen.json +2 -2
  120. package/.agents/docker_kubernetes_architecture/agents/skill.yaml +2 -2
  121. package/.agents/es2025_beast_practices/SKILL.md +433 -8
  122. package/.agents/es2025_beast_practices/agents/claude.json +2 -2
  123. package/.agents/es2025_beast_practices/agents/copilot.json +2 -2
  124. package/.agents/es2025_beast_practices/agents/gemini.json +2 -2
  125. package/.agents/es2025_beast_practices/agents/openai.yaml +1 -1
  126. package/.agents/es2025_beast_practices/agents/qwen.json +2 -2
  127. package/.agents/es2025_beast_practices/agents/skill.yaml +2 -2
  128. package/.agents/gates/SKILL.md +134 -35
  129. package/.agents/gates/agents/claude.json +2 -2
  130. package/.agents/gates/agents/copilot.json +2 -2
  131. package/.agents/gates/agents/gemini.json +2 -2
  132. package/.agents/gates/agents/openai.yaml +1 -1
  133. package/.agents/gates/agents/qwen.json +2 -2
  134. package/.agents/gates/agents/skill.yaml +2 -2
  135. package/.agents/go_beast_practices/SKILL.md +557 -23
  136. package/.agents/go_beast_practices/agents/claude.json +2 -2
  137. package/.agents/go_beast_practices/agents/copilot.json +2 -2
  138. package/.agents/go_beast_practices/agents/gemini.json +2 -2
  139. package/.agents/go_beast_practices/agents/openai.yaml +1 -1
  140. package/.agents/go_beast_practices/agents/qwen.json +2 -2
  141. package/.agents/go_beast_practices/agents/skill.yaml +2 -2
  142. package/.agents/google_stitch_skill/SKILL.md +1 -1
  143. package/.agents/google_stitch_skill/agents/claude.json +5 -6
  144. package/.agents/google_stitch_skill/agents/copilot.json +5 -6
  145. package/.agents/google_stitch_skill/agents/gemini.json +5 -6
  146. package/.agents/google_stitch_skill/agents/openai.yaml +1 -1
  147. package/.agents/google_stitch_skill/agents/qwen.json +5 -6
  148. package/.agents/google_stitch_skill/agents/skill.yaml +4 -5
  149. package/.agents/handoff/SKILL.md +212 -52
  150. package/.agents/handoff/agents/claude.json +2 -2
  151. package/.agents/handoff/agents/copilot.json +2 -2
  152. package/.agents/handoff/agents/gemini.json +2 -2
  153. package/.agents/handoff/agents/openai.yaml +1 -1
  154. package/.agents/handoff/agents/qwen.json +2 -2
  155. package/.agents/handoff/agents/skill.yaml +2 -2
  156. package/.agents/k8s_manifests_conventions/SKILL.md +548 -176
  157. package/.agents/k8s_manifests_conventions/agents/claude.json +2 -2
  158. package/.agents/k8s_manifests_conventions/agents/copilot.json +2 -2
  159. package/.agents/k8s_manifests_conventions/agents/gemini.json +2 -2
  160. package/.agents/k8s_manifests_conventions/agents/openai.yaml +1 -1
  161. package/.agents/k8s_manifests_conventions/agents/qwen.json +2 -2
  162. package/.agents/k8s_manifests_conventions/agents/skill.yaml +2 -2
  163. package/.agents/memory/SKILL.md +219 -29
  164. package/.agents/memory/agents/claude.json +2 -2
  165. package/.agents/memory/agents/copilot.json +2 -2
  166. package/.agents/memory/agents/gemini.json +2 -2
  167. package/.agents/memory/agents/openai.yaml +1 -1
  168. package/.agents/memory/agents/qwen.json +2 -2
  169. package/.agents/memory/agents/skill.yaml +2 -2
  170. package/.agents/mongodb_mongoose_best_practices/SKILL.md +724 -236
  171. package/.agents/mongodb_mongoose_best_practices/agents/claude.json +2 -2
  172. package/.agents/mongodb_mongoose_best_practices/agents/copilot.json +2 -2
  173. package/.agents/mongodb_mongoose_best_practices/agents/gemini.json +2 -2
  174. package/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +1 -1
  175. package/.agents/mongodb_mongoose_best_practices/agents/qwen.json +2 -2
  176. package/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +2 -2
  177. package/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +671 -59
  178. package/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +2 -2
  179. package/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +2 -2
  180. package/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +2 -2
  181. package/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +1 -1
  182. package/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +2 -2
  183. package/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +2 -2
  184. package/.agents/node_express_beast_practices/SKILL.md +729 -30
  185. package/.agents/node_express_beast_practices/agents/claude.json +1 -1
  186. package/.agents/node_express_beast_practices/agents/copilot.json +1 -1
  187. package/.agents/node_express_beast_practices/agents/gemini.json +1 -1
  188. package/.agents/node_express_beast_practices/agents/openai.yaml +1 -1
  189. package/.agents/node_express_beast_practices/agents/qwen.json +1 -1
  190. package/.agents/node_express_beast_practices/agents/skill.yaml +1 -1
  191. package/.agents/observability_logging/SKILL.md +499 -16
  192. package/.agents/observability_logging/agents/claude.json +2 -2
  193. package/.agents/observability_logging/agents/copilot.json +2 -2
  194. package/.agents/observability_logging/agents/gemini.json +2 -2
  195. package/.agents/observability_logging/agents/openai.yaml +1 -1
  196. package/.agents/observability_logging/agents/qwen.json +2 -2
  197. package/.agents/observability_logging/agents/skill.yaml +2 -2
  198. package/.agents/observability_plan/SKILL.md +279 -38
  199. package/.agents/observability_plan/agents/claude.json +3 -2
  200. package/.agents/observability_plan/agents/copilot.json +3 -2
  201. package/.agents/observability_plan/agents/gemini.json +3 -2
  202. package/.agents/observability_plan/agents/openai.yaml +1 -1
  203. package/.agents/observability_plan/agents/qwen.json +3 -2
  204. package/.agents/observability_plan/agents/skill.yaml +2 -1
  205. package/.agents/observability_review/SKILL.md +254 -20
  206. package/.agents/observability_review/agents/claude.json +2 -2
  207. package/.agents/observability_review/agents/copilot.json +2 -2
  208. package/.agents/observability_review/agents/gemini.json +2 -2
  209. package/.agents/observability_review/agents/openai.yaml +1 -1
  210. package/.agents/observability_review/agents/qwen.json +2 -2
  211. package/.agents/observability_review/agents/skill.yaml +2 -2
  212. package/.agents/performance_review_baseline/SKILL.md +239 -17
  213. package/.agents/performance_review_baseline/agents/claude.json +2 -2
  214. package/.agents/performance_review_baseline/agents/copilot.json +2 -2
  215. package/.agents/performance_review_baseline/agents/gemini.json +2 -2
  216. package/.agents/performance_review_baseline/agents/openai.yaml +1 -1
  217. package/.agents/performance_review_baseline/agents/qwen.json +2 -2
  218. package/.agents/performance_review_baseline/agents/skill.yaml +2 -2
  219. package/.agents/pm_backlog/SKILL.md +250 -32
  220. package/.agents/pm_backlog/agents/claude.json +2 -2
  221. package/.agents/pm_backlog/agents/copilot.json +2 -2
  222. package/.agents/pm_backlog/agents/gemini.json +2 -2
  223. package/.agents/pm_backlog/agents/openai.yaml +1 -1
  224. package/.agents/pm_backlog/agents/qwen.json +2 -2
  225. package/.agents/pm_backlog/agents/skill.yaml +2 -2
  226. package/.agents/pm_interview/SKILL.md +197 -56
  227. package/.agents/pm_interview/agents/claude.json +2 -2
  228. package/.agents/pm_interview/agents/copilot.json +2 -2
  229. package/.agents/pm_interview/agents/gemini.json +2 -2
  230. package/.agents/pm_interview/agents/openai.yaml +1 -1
  231. package/.agents/pm_interview/agents/qwen.json +2 -2
  232. package/.agents/pm_interview/agents/skill.yaml +2 -2
  233. package/.agents/pm_prd/SKILL.md +215 -56
  234. package/.agents/pm_prd/agents/claude.json +2 -2
  235. package/.agents/pm_prd/agents/copilot.json +2 -2
  236. package/.agents/pm_prd/agents/gemini.json +2 -2
  237. package/.agents/pm_prd/agents/openai.yaml +1 -1
  238. package/.agents/pm_prd/agents/qwen.json +2 -2
  239. package/.agents/pm_prd/agents/skill.yaml +2 -2
  240. package/.agents/qa_api_contract_tests/SKILL.md +207 -16
  241. package/.agents/qa_api_contract_tests/agents/claude.json +2 -2
  242. package/.agents/qa_api_contract_tests/agents/copilot.json +2 -2
  243. package/.agents/qa_api_contract_tests/agents/gemini.json +2 -2
  244. package/.agents/qa_api_contract_tests/agents/openai.yaml +1 -1
  245. package/.agents/qa_api_contract_tests/agents/qwen.json +2 -2
  246. package/.agents/qa_api_contract_tests/agents/skill.yaml +2 -2
  247. package/.agents/qa_manual_run/SKILL.md +209 -16
  248. package/.agents/qa_manual_run/agents/claude.json +2 -2
  249. package/.agents/qa_manual_run/agents/copilot.json +2 -2
  250. package/.agents/qa_manual_run/agents/gemini.json +2 -2
  251. package/.agents/qa_manual_run/agents/openai.yaml +1 -1
  252. package/.agents/qa_manual_run/agents/qwen.json +2 -2
  253. package/.agents/qa_manual_run/agents/skill.yaml +2 -2
  254. package/.agents/qa_regression_baseline/SKILL.md +217 -0
  255. package/.agents/qa_regression_baseline/agents/claude.json +19 -0
  256. package/.agents/qa_regression_baseline/agents/copilot.json +19 -0
  257. package/.agents/qa_regression_baseline/agents/gemini.json +19 -0
  258. package/.agents/qa_regression_baseline/agents/openai.yaml +8 -0
  259. package/.agents/qa_regression_baseline/agents/qwen.json +19 -0
  260. package/.agents/qa_regression_baseline/agents/skill.yaml +23 -0
  261. package/.agents/qa_security_smoke_tests/SKILL.md +188 -14
  262. package/.agents/qa_security_smoke_tests/agents/claude.json +2 -2
  263. package/.agents/qa_security_smoke_tests/agents/copilot.json +2 -2
  264. package/.agents/qa_security_smoke_tests/agents/gemini.json +2 -2
  265. package/.agents/qa_security_smoke_tests/agents/openai.yaml +1 -1
  266. package/.agents/qa_security_smoke_tests/agents/qwen.json +2 -2
  267. package/.agents/qa_security_smoke_tests/agents/skill.yaml +2 -2
  268. package/.agents/qa_test_plan/SKILL.md +203 -20
  269. package/.agents/qa_test_plan/agents/claude.json +2 -2
  270. package/.agents/qa_test_plan/agents/copilot.json +2 -2
  271. package/.agents/qa_test_plan/agents/gemini.json +2 -2
  272. package/.agents/qa_test_plan/agents/openai.yaml +1 -1
  273. package/.agents/qa_test_plan/agents/qwen.json +2 -2
  274. package/.agents/qa_test_plan/agents/skill.yaml +2 -2
  275. package/.agents/qa_ui_a11y_smoke/SKILL.md +230 -12
  276. package/.agents/qa_ui_a11y_smoke/agents/claude.json +2 -2
  277. package/.agents/qa_ui_a11y_smoke/agents/copilot.json +2 -2
  278. package/.agents/qa_ui_a11y_smoke/agents/gemini.json +2 -2
  279. package/.agents/qa_ui_a11y_smoke/agents/openai.yaml +1 -1
  280. package/.agents/qa_ui_a11y_smoke/agents/qwen.json +2 -2
  281. package/.agents/qa_ui_a11y_smoke/agents/skill.yaml +2 -2
  282. package/.agents/react_15_3_wix_iframe/SKILL.md +411 -12
  283. package/.agents/react_15_3_wix_iframe/agents/claude.json +2 -2
  284. package/.agents/react_15_3_wix_iframe/agents/copilot.json +2 -2
  285. package/.agents/react_15_3_wix_iframe/agents/gemini.json +2 -2
  286. package/.agents/react_15_3_wix_iframe/agents/openai.yaml +1 -1
  287. package/.agents/react_15_3_wix_iframe/agents/qwen.json +2 -2
  288. package/.agents/react_15_3_wix_iframe/agents/skill.yaml +2 -2
  289. package/.agents/react_beast_practices/SKILL.md +285 -18
  290. package/.agents/react_beast_practices/agents/claude.json +2 -2
  291. package/.agents/react_beast_practices/agents/copilot.json +2 -2
  292. package/.agents/react_beast_practices/agents/gemini.json +2 -2
  293. package/.agents/react_beast_practices/agents/openai.yaml +1 -1
  294. package/.agents/react_beast_practices/agents/qwen.json +2 -2
  295. package/.agents/react_beast_practices/agents/skill.yaml +2 -2
  296. package/.agents/release_gate/SKILL.md +213 -77
  297. package/.agents/release_gate/agents/claude.json +2 -2
  298. package/.agents/release_gate/agents/copilot.json +2 -2
  299. package/.agents/release_gate/agents/gemini.json +2 -2
  300. package/.agents/release_gate/agents/openai.yaml +1 -1
  301. package/.agents/release_gate/agents/qwen.json +2 -2
  302. package/.agents/release_gate/agents/skill.yaml +2 -2
  303. package/.agents/release_gate_checklist_template/SKILL.md +182 -68
  304. package/.agents/review_reference_snippets/SKILL.md +116 -0
  305. package/.agents/security_baseline_dev/SKILL.md +496 -16
  306. package/.agents/security_baseline_dev/agents/claude.json +2 -2
  307. package/.agents/security_baseline_dev/agents/copilot.json +2 -2
  308. package/.agents/security_baseline_dev/agents/gemini.json +2 -2
  309. package/.agents/security_baseline_dev/agents/openai.yaml +1 -1
  310. package/.agents/security_baseline_dev/agents/qwen.json +2 -2
  311. package/.agents/security_baseline_dev/agents/skill.yaml +2 -2
  312. package/.agents/security_review/SKILL.md +277 -55
  313. package/.agents/security_review_baseline/SKILL.md +119 -25
  314. package/.agents/security_review_baseline/agents/claude.json +2 -2
  315. package/.agents/security_review_baseline/agents/copilot.json +2 -2
  316. package/.agents/security_review_baseline/agents/gemini.json +2 -2
  317. package/.agents/security_review_baseline/agents/openai.yaml +1 -1
  318. package/.agents/security_review_baseline/agents/qwen.json +2 -2
  319. package/.agents/security_review_baseline/agents/skill.yaml +2 -2
  320. package/.agents/state_rtk_beast_practices/SKILL.md +735 -15
  321. package/.agents/state_rtk_beast_practices/agents/claude.json +2 -2
  322. package/.agents/state_rtk_beast_practices/agents/copilot.json +2 -2
  323. package/.agents/state_rtk_beast_practices/agents/gemini.json +2 -2
  324. package/.agents/state_rtk_beast_practices/agents/openai.yaml +1 -1
  325. package/.agents/state_rtk_beast_practices/agents/qwen.json +2 -2
  326. package/.agents/state_rtk_beast_practices/agents/skill.yaml +2 -2
  327. package/.agents/state_zustand_beast_practices/SKILL.md +808 -11
  328. package/.agents/state_zustand_beast_practices/agents/claude.json +2 -2
  329. package/.agents/state_zustand_beast_practices/agents/copilot.json +2 -2
  330. package/.agents/state_zustand_beast_practices/agents/gemini.json +2 -2
  331. package/.agents/state_zustand_beast_practices/agents/openai.yaml +1 -1
  332. package/.agents/state_zustand_beast_practices/agents/qwen.json +2 -2
  333. package/.agents/state_zustand_beast_practices/agents/skill.yaml +2 -2
  334. package/.agents/styling_css_stack/SKILL.md +558 -12
  335. package/.agents/styling_css_stack/agents/claude.json +2 -2
  336. package/.agents/styling_css_stack/agents/copilot.json +2 -2
  337. package/.agents/styling_css_stack/agents/gemini.json +2 -2
  338. package/.agents/styling_css_stack/agents/openai.yaml +1 -1
  339. package/.agents/styling_css_stack/agents/qwen.json +2 -2
  340. package/.agents/styling_css_stack/agents/skill.yaml +2 -2
  341. package/.agents/system_design_checklist/SKILL.md +207 -48
  342. package/.agents/system_design_checklist/agents/claude.json +3 -2
  343. package/.agents/system_design_checklist/agents/copilot.json +3 -2
  344. package/.agents/system_design_checklist/agents/gemini.json +3 -2
  345. package/.agents/system_design_checklist/agents/openai.yaml +1 -1
  346. package/.agents/system_design_checklist/agents/qwen.json +3 -2
  347. package/.agents/system_design_checklist/agents/skill.yaml +2 -1
  348. package/.agents/tailwind_beast_practices/SKILL.md +512 -0
  349. package/.agents/tailwind_beast_practices/agents/claude.json +18 -0
  350. package/.agents/tailwind_beast_practices/agents/copilot.json +18 -0
  351. package/.agents/tailwind_beast_practices/agents/gemini.json +18 -0
  352. package/.agents/tailwind_beast_practices/agents/openai.yaml +8 -0
  353. package/.agents/tailwind_beast_practices/agents/qwen.json +18 -0
  354. package/.agents/tailwind_beast_practices/agents/skill.yaml +22 -0
  355. package/.agents/tanstack_beast_practices/SKILL.md +465 -11
  356. package/.agents/tanstack_beast_practices/agents/claude.json +2 -2
  357. package/.agents/tanstack_beast_practices/agents/copilot.json +2 -2
  358. package/.agents/tanstack_beast_practices/agents/gemini.json +2 -2
  359. package/.agents/tanstack_beast_practices/agents/openai.yaml +1 -1
  360. package/.agents/tanstack_beast_practices/agents/qwen.json +2 -2
  361. package/.agents/tanstack_beast_practices/agents/skill.yaml +2 -2
  362. package/.agents/tdd_workflow/SKILL.md +441 -22
  363. package/.agents/tdd_workflow/agents/claude.json +2 -2
  364. package/.agents/tdd_workflow/agents/copilot.json +2 -2
  365. package/.agents/tdd_workflow/agents/gemini.json +2 -2
  366. package/.agents/tdd_workflow/agents/openai.yaml +1 -1
  367. package/.agents/tdd_workflow/agents/qwen.json +2 -2
  368. package/.agents/tdd_workflow/agents/skill.yaml +2 -2
  369. package/.agents/testing_strategy_js/SKILL.md +636 -30
  370. package/.agents/testing_strategy_js/agents/claude.json +2 -2
  371. package/.agents/testing_strategy_js/agents/copilot.json +2 -2
  372. package/.agents/testing_strategy_js/agents/gemini.json +2 -2
  373. package/.agents/testing_strategy_js/agents/openai.yaml +1 -1
  374. package/.agents/testing_strategy_js/agents/qwen.json +2 -2
  375. package/.agents/testing_strategy_js/agents/skill.yaml +2 -2
  376. package/.agents/tests_quality_review/SKILL.md +279 -18
  377. package/.agents/tests_quality_review/agents/claude.json +2 -2
  378. package/.agents/tests_quality_review/agents/copilot.json +2 -2
  379. package/.agents/tests_quality_review/agents/gemini.json +2 -2
  380. package/.agents/tests_quality_review/agents/openai.yaml +1 -1
  381. package/.agents/tests_quality_review/agents/qwen.json +2 -2
  382. package/.agents/tests_quality_review/agents/skill.yaml +2 -2
  383. package/.agents/threat_model_baseline/SKILL.md +210 -57
  384. package/.agents/threat_model_baseline/agents/claude.json +2 -2
  385. package/.agents/threat_model_baseline/agents/copilot.json +2 -2
  386. package/.agents/threat_model_baseline/agents/gemini.json +2 -2
  387. package/.agents/threat_model_baseline/agents/openai.yaml +1 -1
  388. package/.agents/threat_model_baseline/agents/qwen.json +2 -2
  389. package/.agents/threat_model_baseline/agents/skill.yaml +2 -2
  390. package/.agents/tooling_bun_biome/SKILL.md +539 -17
  391. package/.agents/tooling_bun_biome/agents/claude.json +2 -2
  392. package/.agents/tooling_bun_biome/agents/copilot.json +2 -2
  393. package/.agents/tooling_bun_biome/agents/gemini.json +2 -2
  394. package/.agents/tooling_bun_biome/agents/openai.yaml +1 -1
  395. package/.agents/tooling_bun_biome/agents/qwen.json +2 -2
  396. package/.agents/tooling_bun_biome/agents/skill.yaml +2 -2
  397. package/.agents/typescript_beast_practices/SKILL.md +427 -8
  398. package/.agents/typescript_beast_practices/agents/claude.json +2 -2
  399. package/.agents/typescript_beast_practices/agents/copilot.json +2 -2
  400. package/.agents/typescript_beast_practices/agents/gemini.json +2 -2
  401. package/.agents/typescript_beast_practices/agents/openai.yaml +1 -1
  402. package/.agents/typescript_beast_practices/agents/qwen.json +2 -2
  403. package/.agents/typescript_beast_practices/agents/skill.yaml +2 -2
  404. package/.agents/ui_a11y_smoke_review/SKILL.md +195 -15
  405. package/.agents/ui_a11y_smoke_review/agents/claude.json +2 -2
  406. package/.agents/ui_a11y_smoke_review/agents/copilot.json +2 -2
  407. package/.agents/ui_a11y_smoke_review/agents/gemini.json +2 -2
  408. package/.agents/ui_a11y_smoke_review/agents/openai.yaml +1 -1
  409. package/.agents/ui_a11y_smoke_review/agents/qwen.json +2 -2
  410. package/.agents/ui_a11y_smoke_review/agents/skill.yaml +2 -2
  411. package/.agents/ui_inventory/SKILL.md +277 -50
  412. package/.agents/ui_inventory/agents/claude.json +2 -2
  413. package/.agents/ui_inventory/agents/copilot.json +2 -2
  414. package/.agents/ui_inventory/agents/gemini.json +2 -2
  415. package/.agents/ui_inventory/agents/openai.yaml +1 -1
  416. package/.agents/ui_inventory/agents/qwen.json +2 -2
  417. package/.agents/ui_inventory/agents/skill.yaml +2 -2
  418. package/.agents/ux_discovery/SKILL.md +214 -48
  419. package/.agents/ux_discovery/agents/claude.json +2 -2
  420. package/.agents/ux_discovery/agents/copilot.json +2 -2
  421. package/.agents/ux_discovery/agents/gemini.json +2 -2
  422. package/.agents/ux_discovery/agents/openai.yaml +1 -1
  423. package/.agents/ux_discovery/agents/qwen.json +2 -2
  424. package/.agents/ux_discovery/agents/skill.yaml +2 -2
  425. package/.agents/ux_spec/SKILL.md +282 -56
  426. package/.agents/ux_spec/agents/claude.json +2 -2
  427. package/.agents/ux_spec/agents/copilot.json +2 -2
  428. package/.agents/ux_spec/agents/gemini.json +2 -2
  429. package/.agents/ux_spec/agents/openai.yaml +1 -1
  430. package/.agents/ux_spec/agents/qwen.json +2 -2
  431. package/.agents/ux_spec/agents/skill.yaml +2 -2
  432. package/.agents/wix_iframe_sdk/SKILL.md +277 -48
  433. package/.agents/wix_iframe_sdk/agents/claude.json +2 -2
  434. package/.agents/wix_iframe_sdk/agents/copilot.json +2 -2
  435. package/.agents/wix_iframe_sdk/agents/gemini.json +2 -2
  436. package/.agents/wix_iframe_sdk/agents/openai.yaml +1 -1
  437. package/.agents/wix_iframe_sdk/agents/qwen.json +2 -2
  438. package/.agents/wix_iframe_sdk/agents/skill.yaml +2 -2
  439. package/.agents/wix_self_hosted_embedded_script/SKILL.md +605 -82
  440. package/.agents/wix_self_hosted_embedded_script/agents/claude.json +2 -2
  441. package/.agents/wix_self_hosted_embedded_script/agents/copilot.json +2 -2
  442. package/.agents/wix_self_hosted_embedded_script/agents/gemini.json +2 -2
  443. package/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +1 -1
  444. package/.agents/wix_self_hosted_embedded_script/agents/qwen.json +2 -2
  445. package/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +2 -2
  446. package/AGENTS.yaml +2 -0
  447. package/agents/conductor.md +50 -0
  448. package/agents/devops.md +31 -1
  449. package/agents/orchestrator.claude.json +2 -0
  450. package/agents/orchestrator.copilot.json +2 -0
  451. package/agents/orchestrator.gemini.json +2 -0
  452. package/agents/orchestrator.openai.yaml +2 -0
  453. package/agents/orchestrator.qwen.json +2 -0
  454. package/agents/reviewer.md +0 -1
  455. package/agents/senior_full_stack.md +1 -0
  456. package/agents/tester.md +1 -1
  457. package/agents/ux_ui_designer.md +2 -2
  458. package/locales/en/.agents/a11y_baseline/SKILL.md +260 -41
  459. package/locales/en/.agents/a11y_baseline/agents/claude.json +3 -2
  460. package/locales/en/.agents/a11y_baseline/agents/copilot.json +3 -2
  461. package/locales/en/.agents/a11y_baseline/agents/gemini.json +3 -2
  462. package/locales/en/.agents/a11y_baseline/agents/openai.yaml +1 -1
  463. package/locales/en/.agents/a11y_baseline/agents/qwen.json +3 -2
  464. package/locales/en/.agents/a11y_baseline/agents/skill.yaml +2 -1
  465. package/locales/en/.agents/adr_log/SKILL.md +330 -30
  466. package/locales/en/.agents/adr_log/agents/claude.json +5 -5
  467. package/locales/en/.agents/adr_log/agents/copilot.json +5 -5
  468. package/locales/en/.agents/adr_log/agents/gemini.json +5 -5
  469. package/locales/en/.agents/adr_log/agents/openai.yaml +3 -3
  470. package/locales/en/.agents/adr_log/agents/qwen.json +5 -5
  471. package/locales/en/.agents/adr_log/agents/skill.yaml +5 -5
  472. package/locales/en/.agents/api_contract_compliance_review/SKILL.md +218 -12
  473. package/locales/en/.agents/api_contract_compliance_review/agents/claude.json +2 -2
  474. package/locales/en/.agents/api_contract_compliance_review/agents/copilot.json +2 -2
  475. package/locales/en/.agents/api_contract_compliance_review/agents/gemini.json +2 -2
  476. package/locales/en/.agents/api_contract_compliance_review/agents/openai.yaml +1 -1
  477. package/locales/en/.agents/api_contract_compliance_review/agents/qwen.json +2 -2
  478. package/locales/en/.agents/api_contract_compliance_review/agents/skill.yaml +2 -2
  479. package/locales/en/.agents/api_contracts/SKILL.md +323 -36
  480. package/locales/en/.agents/api_contracts/agents/claude.json +2 -2
  481. package/locales/en/.agents/api_contracts/agents/copilot.json +2 -2
  482. package/locales/en/.agents/api_contracts/agents/gemini.json +2 -2
  483. package/locales/en/.agents/api_contracts/agents/openai.yaml +1 -1
  484. package/locales/en/.agents/api_contracts/agents/qwen.json +2 -2
  485. package/locales/en/.agents/api_contracts/agents/skill.yaml +2 -2
  486. package/locales/en/.agents/architecture_compliance_review/SKILL.md +206 -10
  487. package/locales/en/.agents/architecture_compliance_review/agents/claude.json +5 -4
  488. package/locales/en/.agents/architecture_compliance_review/agents/copilot.json +5 -4
  489. package/locales/en/.agents/architecture_compliance_review/agents/gemini.json +5 -4
  490. package/locales/en/.agents/architecture_compliance_review/agents/openai.yaml +3 -3
  491. package/locales/en/.agents/architecture_compliance_review/agents/qwen.json +5 -4
  492. package/locales/en/.agents/architecture_compliance_review/agents/skill.yaml +5 -4
  493. package/locales/en/.agents/architecture_doc/SKILL.md +374 -82
  494. package/locales/en/.agents/architecture_doc/agents/claude.json +2 -2
  495. package/locales/en/.agents/architecture_doc/agents/copilot.json +2 -2
  496. package/locales/en/.agents/architecture_doc/agents/gemini.json +2 -2
  497. package/locales/en/.agents/architecture_doc/agents/openai.yaml +1 -1
  498. package/locales/en/.agents/architecture_doc/agents/qwen.json +2 -2
  499. package/locales/en/.agents/architecture_doc/agents/skill.yaml +2 -2
  500. package/locales/en/.agents/board/SKILL.md +232 -43
  501. package/locales/en/.agents/board/agents/claude.json +2 -2
  502. package/locales/en/.agents/board/agents/copilot.json +2 -2
  503. package/locales/en/.agents/board/agents/gemini.json +2 -2
  504. package/locales/en/.agents/board/agents/openai.yaml +1 -1
  505. package/locales/en/.agents/board/agents/qwen.json +2 -2
  506. package/locales/en/.agents/board/agents/skill.yaml +2 -2
  507. package/locales/en/.agents/cloud_infrastructure_security/SKILL.md +277 -68
  508. package/locales/en/.agents/cloud_infrastructure_security/agents/claude.json +5 -4
  509. package/locales/en/.agents/cloud_infrastructure_security/agents/copilot.json +5 -4
  510. package/locales/en/.agents/cloud_infrastructure_security/agents/gemini.json +5 -4
  511. package/locales/en/.agents/cloud_infrastructure_security/agents/openai.yaml +3 -3
  512. package/locales/en/.agents/cloud_infrastructure_security/agents/qwen.json +5 -4
  513. package/locales/en/.agents/cloud_infrastructure_security/agents/skill.yaml +5 -4
  514. package/locales/en/.agents/code_review_checklist/SKILL.md +194 -41
  515. package/locales/en/.agents/code_review_checklist/agents/claude.json +2 -2
  516. package/locales/en/.agents/code_review_checklist/agents/copilot.json +2 -2
  517. package/locales/en/.agents/code_review_checklist/agents/gemini.json +2 -2
  518. package/locales/en/.agents/code_review_checklist/agents/openai.yaml +1 -1
  519. package/locales/en/.agents/code_review_checklist/agents/qwen.json +2 -2
  520. package/locales/en/.agents/code_review_checklist/agents/skill.yaml +2 -2
  521. package/locales/en/.agents/current_state_analysis/SKILL.md +225 -44
  522. package/locales/en/.agents/current_state_analysis/agents/claude.json +5 -4
  523. package/locales/en/.agents/current_state_analysis/agents/copilot.json +5 -4
  524. package/locales/en/.agents/current_state_analysis/agents/gemini.json +5 -4
  525. package/locales/en/.agents/current_state_analysis/agents/openai.yaml +3 -3
  526. package/locales/en/.agents/current_state_analysis/agents/qwen.json +5 -4
  527. package/locales/en/.agents/current_state_analysis/agents/skill.yaml +5 -4
  528. package/locales/en/.agents/data_model/SKILL.md +277 -32
  529. package/locales/en/.agents/data_model/agents/claude.json +2 -2
  530. package/locales/en/.agents/data_model/agents/copilot.json +2 -2
  531. package/locales/en/.agents/data_model/agents/gemini.json +2 -2
  532. package/locales/en/.agents/data_model/agents/openai.yaml +1 -1
  533. package/locales/en/.agents/data_model/agents/qwen.json +2 -2
  534. package/locales/en/.agents/data_model/agents/skill.yaml +2 -2
  535. package/locales/en/.agents/dependency_supply_chain_review/SKILL.md +291 -11
  536. package/locales/en/.agents/dependency_supply_chain_review/agents/claude.json +5 -4
  537. package/locales/en/.agents/dependency_supply_chain_review/agents/copilot.json +5 -4
  538. package/locales/en/.agents/dependency_supply_chain_review/agents/gemini.json +5 -4
  539. package/locales/en/.agents/dependency_supply_chain_review/agents/openai.yaml +3 -3
  540. package/locales/en/.agents/dependency_supply_chain_review/agents/qwen.json +5 -4
  541. package/locales/en/.agents/dependency_supply_chain_review/agents/skill.yaml +5 -4
  542. package/locales/en/.agents/deployment_ci_plan/SKILL.md +404 -45
  543. package/locales/en/.agents/deployment_ci_plan/agents/claude.json +2 -2
  544. package/locales/en/.agents/deployment_ci_plan/agents/copilot.json +2 -2
  545. package/locales/en/.agents/deployment_ci_plan/agents/gemini.json +2 -2
  546. package/locales/en/.agents/deployment_ci_plan/agents/openai.yaml +1 -1
  547. package/locales/en/.agents/deployment_ci_plan/agents/qwen.json +2 -2
  548. package/locales/en/.agents/deployment_ci_plan/agents/skill.yaml +2 -2
  549. package/locales/en/.agents/design_intake/SKILL.md +221 -67
  550. package/locales/en/.agents/design_intake/agents/claude.json +4 -5
  551. package/locales/en/.agents/design_intake/agents/copilot.json +4 -5
  552. package/locales/en/.agents/design_intake/agents/gemini.json +4 -5
  553. package/locales/en/.agents/design_intake/agents/openai.yaml +3 -3
  554. package/locales/en/.agents/design_intake/agents/qwen.json +4 -5
  555. package/locales/en/.agents/design_intake/agents/skill.yaml +4 -5
  556. package/locales/en/.agents/design_parity_review/SKILL.md +216 -60
  557. package/locales/en/.agents/design_parity_review/agents/claude.json +2 -3
  558. package/locales/en/.agents/design_parity_review/agents/copilot.json +2 -3
  559. package/locales/en/.agents/design_parity_review/agents/gemini.json +2 -3
  560. package/locales/en/.agents/design_parity_review/agents/openai.yaml +2 -2
  561. package/locales/en/.agents/design_parity_review/agents/qwen.json +2 -3
  562. package/locales/en/.agents/design_parity_review/agents/skill.yaml +2 -3
  563. package/locales/en/.agents/design_systems/SKILL.md +432 -15
  564. package/locales/en/.agents/design_systems/agents/claude.json +2 -2
  565. package/locales/en/.agents/design_systems/agents/copilot.json +2 -2
  566. package/locales/en/.agents/design_systems/agents/gemini.json +2 -2
  567. package/locales/en/.agents/design_systems/agents/openai.yaml +1 -1
  568. package/locales/en/.agents/design_systems/agents/qwen.json +2 -2
  569. package/locales/en/.agents/design_systems/agents/skill.yaml +2 -2
  570. package/locales/en/.agents/dev_reference_snippets/SKILL.md +585 -397
  571. package/locales/en/.agents/dev_reference_snippets/agents/claude.json +2 -2
  572. package/locales/en/.agents/dev_reference_snippets/agents/copilot.json +2 -2
  573. package/locales/en/.agents/dev_reference_snippets/agents/gemini.json +2 -2
  574. package/locales/en/.agents/dev_reference_snippets/agents/openai.yaml +1 -1
  575. package/locales/en/.agents/dev_reference_snippets/agents/qwen.json +2 -2
  576. package/locales/en/.agents/dev_reference_snippets/agents/skill.yaml +2 -2
  577. package/locales/en/.agents/docker_kubernetes_architecture/SKILL.md +473 -137
  578. package/locales/en/.agents/docker_kubernetes_architecture/agents/claude.json +5 -4
  579. package/locales/en/.agents/docker_kubernetes_architecture/agents/copilot.json +5 -4
  580. package/locales/en/.agents/docker_kubernetes_architecture/agents/gemini.json +5 -4
  581. package/locales/en/.agents/docker_kubernetes_architecture/agents/openai.yaml +3 -3
  582. package/locales/en/.agents/docker_kubernetes_architecture/agents/qwen.json +5 -4
  583. package/locales/en/.agents/docker_kubernetes_architecture/agents/skill.yaml +5 -4
  584. package/locales/en/.agents/es2025_beast_practices/SKILL.md +440 -15
  585. package/locales/en/.agents/es2025_beast_practices/agents/claude.json +4 -4
  586. package/locales/en/.agents/es2025_beast_practices/agents/copilot.json +4 -4
  587. package/locales/en/.agents/es2025_beast_practices/agents/gemini.json +4 -4
  588. package/locales/en/.agents/es2025_beast_practices/agents/openai.yaml +3 -3
  589. package/locales/en/.agents/es2025_beast_practices/agents/qwen.json +4 -4
  590. package/locales/en/.agents/es2025_beast_practices/agents/skill.yaml +4 -4
  591. package/locales/en/.agents/gates/SKILL.md +128 -29
  592. package/locales/en/.agents/gates/agents/claude.json +2 -2
  593. package/locales/en/.agents/gates/agents/copilot.json +2 -2
  594. package/locales/en/.agents/gates/agents/gemini.json +2 -2
  595. package/locales/en/.agents/gates/agents/openai.yaml +1 -1
  596. package/locales/en/.agents/gates/agents/qwen.json +2 -2
  597. package/locales/en/.agents/gates/agents/skill.yaml +2 -2
  598. package/locales/en/.agents/go_beast_practices/SKILL.md +557 -23
  599. package/locales/en/.agents/go_beast_practices/agents/claude.json +5 -4
  600. package/locales/en/.agents/go_beast_practices/agents/copilot.json +5 -4
  601. package/locales/en/.agents/go_beast_practices/agents/gemini.json +5 -4
  602. package/locales/en/.agents/go_beast_practices/agents/openai.yaml +3 -3
  603. package/locales/en/.agents/go_beast_practices/agents/qwen.json +5 -4
  604. package/locales/en/.agents/go_beast_practices/agents/skill.yaml +5 -4
  605. package/locales/en/.agents/google_stitch_skill/SKILL.md +507 -71
  606. package/locales/en/.agents/google_stitch_skill/agents/claude.json +5 -6
  607. package/locales/en/.agents/google_stitch_skill/agents/copilot.json +5 -6
  608. package/locales/en/.agents/google_stitch_skill/agents/gemini.json +5 -6
  609. package/locales/en/.agents/google_stitch_skill/agents/openai.yaml +1 -1
  610. package/locales/en/.agents/google_stitch_skill/agents/qwen.json +5 -6
  611. package/locales/en/.agents/google_stitch_skill/agents/skill.yaml +4 -5
  612. package/locales/en/.agents/handoff/SKILL.md +206 -46
  613. package/locales/en/.agents/handoff/agents/claude.json +5 -5
  614. package/locales/en/.agents/handoff/agents/copilot.json +5 -5
  615. package/locales/en/.agents/handoff/agents/gemini.json +5 -5
  616. package/locales/en/.agents/handoff/agents/openai.yaml +3 -3
  617. package/locales/en/.agents/handoff/agents/qwen.json +5 -5
  618. package/locales/en/.agents/handoff/agents/skill.yaml +5 -5
  619. package/locales/en/.agents/k8s_manifests_conventions/SKILL.md +540 -167
  620. package/locales/en/.agents/k8s_manifests_conventions/agents/claude.json +2 -2
  621. package/locales/en/.agents/k8s_manifests_conventions/agents/copilot.json +2 -2
  622. package/locales/en/.agents/k8s_manifests_conventions/agents/gemini.json +2 -2
  623. package/locales/en/.agents/k8s_manifests_conventions/agents/openai.yaml +1 -1
  624. package/locales/en/.agents/k8s_manifests_conventions/agents/qwen.json +2 -2
  625. package/locales/en/.agents/k8s_manifests_conventions/agents/skill.yaml +2 -2
  626. package/locales/en/.agents/memory/SKILL.md +211 -21
  627. package/locales/en/.agents/memory/agents/claude.json +5 -4
  628. package/locales/en/.agents/memory/agents/copilot.json +5 -4
  629. package/locales/en/.agents/memory/agents/gemini.json +5 -4
  630. package/locales/en/.agents/memory/agents/openai.yaml +3 -3
  631. package/locales/en/.agents/memory/agents/qwen.json +5 -4
  632. package/locales/en/.agents/memory/agents/skill.yaml +5 -4
  633. package/locales/en/.agents/mongodb_mongoose_best_practices/SKILL.md +669 -178
  634. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/claude.json +4 -5
  635. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/copilot.json +4 -5
  636. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/gemini.json +4 -5
  637. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +3 -3
  638. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/qwen.json +4 -5
  639. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +4 -5
  640. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +669 -57
  641. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +5 -5
  642. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +5 -5
  643. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +5 -5
  644. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +3 -3
  645. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +5 -5
  646. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +5 -5
  647. package/locales/en/.agents/node_express_beast_practices/SKILL.md +718 -19
  648. package/locales/en/.agents/node_express_beast_practices/agents/claude.json +1 -1
  649. package/locales/en/.agents/node_express_beast_practices/agents/copilot.json +1 -1
  650. package/locales/en/.agents/node_express_beast_practices/agents/gemini.json +1 -1
  651. package/locales/en/.agents/node_express_beast_practices/agents/openai.yaml +1 -1
  652. package/locales/en/.agents/node_express_beast_practices/agents/qwen.json +1 -1
  653. package/locales/en/.agents/node_express_beast_practices/agents/skill.yaml +1 -1
  654. package/locales/en/.agents/observability_logging/SKILL.md +499 -16
  655. package/locales/en/.agents/observability_logging/agents/claude.json +4 -4
  656. package/locales/en/.agents/observability_logging/agents/copilot.json +4 -4
  657. package/locales/en/.agents/observability_logging/agents/gemini.json +4 -4
  658. package/locales/en/.agents/observability_logging/agents/openai.yaml +3 -3
  659. package/locales/en/.agents/observability_logging/agents/qwen.json +4 -4
  660. package/locales/en/.agents/observability_logging/agents/skill.yaml +4 -4
  661. package/locales/en/.agents/observability_plan/SKILL.md +273 -32
  662. package/locales/en/.agents/observability_plan/agents/claude.json +6 -4
  663. package/locales/en/.agents/observability_plan/agents/copilot.json +6 -4
  664. package/locales/en/.agents/observability_plan/agents/gemini.json +6 -4
  665. package/locales/en/.agents/observability_plan/agents/openai.yaml +3 -3
  666. package/locales/en/.agents/observability_plan/agents/qwen.json +6 -4
  667. package/locales/en/.agents/observability_plan/agents/skill.yaml +5 -3
  668. package/locales/en/.agents/observability_review/SKILL.md +245 -11
  669. package/locales/en/.agents/observability_review/agents/claude.json +6 -4
  670. package/locales/en/.agents/observability_review/agents/copilot.json +6 -4
  671. package/locales/en/.agents/observability_review/agents/gemini.json +6 -4
  672. package/locales/en/.agents/observability_review/agents/openai.yaml +3 -3
  673. package/locales/en/.agents/observability_review/agents/qwen.json +6 -4
  674. package/locales/en/.agents/observability_review/agents/skill.yaml +5 -3
  675. package/locales/en/.agents/performance_review_baseline/SKILL.md +232 -10
  676. package/locales/en/.agents/performance_review_baseline/agents/claude.json +5 -4
  677. package/locales/en/.agents/performance_review_baseline/agents/copilot.json +5 -4
  678. package/locales/en/.agents/performance_review_baseline/agents/gemini.json +5 -4
  679. package/locales/en/.agents/performance_review_baseline/agents/openai.yaml +3 -3
  680. package/locales/en/.agents/performance_review_baseline/agents/qwen.json +5 -4
  681. package/locales/en/.agents/performance_review_baseline/agents/skill.yaml +5 -4
  682. package/locales/en/.agents/pm_backlog/SKILL.md +239 -21
  683. package/locales/en/.agents/pm_backlog/agents/claude.json +2 -2
  684. package/locales/en/.agents/pm_backlog/agents/copilot.json +2 -2
  685. package/locales/en/.agents/pm_backlog/agents/gemini.json +2 -2
  686. package/locales/en/.agents/pm_backlog/agents/openai.yaml +1 -1
  687. package/locales/en/.agents/pm_backlog/agents/qwen.json +2 -2
  688. package/locales/en/.agents/pm_backlog/agents/skill.yaml +2 -2
  689. package/locales/en/.agents/pm_interview/SKILL.md +178 -37
  690. package/locales/en/.agents/pm_interview/agents/claude.json +5 -4
  691. package/locales/en/.agents/pm_interview/agents/copilot.json +5 -4
  692. package/locales/en/.agents/pm_interview/agents/gemini.json +5 -4
  693. package/locales/en/.agents/pm_interview/agents/openai.yaml +3 -3
  694. package/locales/en/.agents/pm_interview/agents/qwen.json +5 -4
  695. package/locales/en/.agents/pm_interview/agents/skill.yaml +5 -4
  696. package/locales/en/.agents/pm_prd/SKILL.md +197 -38
  697. package/locales/en/.agents/pm_prd/agents/claude.json +2 -2
  698. package/locales/en/.agents/pm_prd/agents/copilot.json +2 -2
  699. package/locales/en/.agents/pm_prd/agents/gemini.json +2 -2
  700. package/locales/en/.agents/pm_prd/agents/openai.yaml +1 -1
  701. package/locales/en/.agents/pm_prd/agents/qwen.json +2 -2
  702. package/locales/en/.agents/pm_prd/agents/skill.yaml +2 -2
  703. package/locales/en/.agents/qa_api_contract_tests/SKILL.md +207 -16
  704. package/locales/en/.agents/qa_api_contract_tests/agents/claude.json +2 -2
  705. package/locales/en/.agents/qa_api_contract_tests/agents/copilot.json +2 -2
  706. package/locales/en/.agents/qa_api_contract_tests/agents/gemini.json +2 -2
  707. package/locales/en/.agents/qa_api_contract_tests/agents/openai.yaml +1 -1
  708. package/locales/en/.agents/qa_api_contract_tests/agents/qwen.json +2 -2
  709. package/locales/en/.agents/qa_api_contract_tests/agents/skill.yaml +2 -2
  710. package/locales/en/.agents/qa_browser_testing/SKILL.md +254 -86
  711. package/locales/en/.agents/qa_e2e_playwright/SKILL.md +313 -116
  712. package/locales/en/.agents/qa_manual_run/SKILL.md +202 -9
  713. package/locales/en/.agents/qa_manual_run/agents/claude.json +2 -2
  714. package/locales/en/.agents/qa_manual_run/agents/copilot.json +2 -2
  715. package/locales/en/.agents/qa_manual_run/agents/gemini.json +2 -2
  716. package/locales/en/.agents/qa_manual_run/agents/openai.yaml +1 -1
  717. package/locales/en/.agents/qa_manual_run/agents/qwen.json +2 -2
  718. package/locales/en/.agents/qa_manual_run/agents/skill.yaml +2 -2
  719. package/locales/en/.agents/qa_regression_baseline/SKILL.md +217 -0
  720. package/locales/en/.agents/qa_regression_baseline/agents/claude.json +19 -0
  721. package/locales/en/.agents/qa_regression_baseline/agents/copilot.json +19 -0
  722. package/locales/en/.agents/qa_regression_baseline/agents/gemini.json +19 -0
  723. package/locales/en/.agents/qa_regression_baseline/agents/openai.yaml +8 -0
  724. package/locales/en/.agents/qa_regression_baseline/agents/qwen.json +19 -0
  725. package/locales/en/.agents/qa_regression_baseline/agents/skill.yaml +23 -0
  726. package/locales/en/.agents/qa_security_smoke_tests/SKILL.md +182 -8
  727. package/locales/en/.agents/qa_security_smoke_tests/agents/claude.json +2 -2
  728. package/locales/en/.agents/qa_security_smoke_tests/agents/copilot.json +2 -2
  729. package/locales/en/.agents/qa_security_smoke_tests/agents/gemini.json +2 -2
  730. package/locales/en/.agents/qa_security_smoke_tests/agents/openai.yaml +1 -1
  731. package/locales/en/.agents/qa_security_smoke_tests/agents/qwen.json +2 -2
  732. package/locales/en/.agents/qa_security_smoke_tests/agents/skill.yaml +2 -2
  733. package/locales/en/.agents/qa_test_plan/SKILL.md +197 -14
  734. package/locales/en/.agents/qa_test_plan/agents/claude.json +2 -2
  735. package/locales/en/.agents/qa_test_plan/agents/copilot.json +2 -2
  736. package/locales/en/.agents/qa_test_plan/agents/gemini.json +2 -2
  737. package/locales/en/.agents/qa_test_plan/agents/openai.yaml +1 -1
  738. package/locales/en/.agents/qa_test_plan/agents/qwen.json +2 -2
  739. package/locales/en/.agents/qa_test_plan/agents/skill.yaml +2 -2
  740. package/locales/en/.agents/qa_ui_a11y_smoke/SKILL.md +224 -6
  741. package/locales/en/.agents/qa_ui_a11y_smoke/agents/claude.json +5 -4
  742. package/locales/en/.agents/qa_ui_a11y_smoke/agents/copilot.json +5 -4
  743. package/locales/en/.agents/qa_ui_a11y_smoke/agents/gemini.json +5 -4
  744. package/locales/en/.agents/qa_ui_a11y_smoke/agents/openai.yaml +3 -3
  745. package/locales/en/.agents/qa_ui_a11y_smoke/agents/qwen.json +5 -4
  746. package/locales/en/.agents/qa_ui_a11y_smoke/agents/skill.yaml +5 -4
  747. package/locales/en/.agents/react_15_3_wix_iframe/SKILL.md +419 -20
  748. package/locales/en/.agents/react_15_3_wix_iframe/agents/claude.json +2 -2
  749. package/locales/en/.agents/react_15_3_wix_iframe/agents/copilot.json +2 -2
  750. package/locales/en/.agents/react_15_3_wix_iframe/agents/gemini.json +2 -2
  751. package/locales/en/.agents/react_15_3_wix_iframe/agents/openai.yaml +1 -1
  752. package/locales/en/.agents/react_15_3_wix_iframe/agents/qwen.json +2 -2
  753. package/locales/en/.agents/react_15_3_wix_iframe/agents/skill.yaml +2 -2
  754. package/locales/en/.agents/react_beast_practices/SKILL.md +285 -18
  755. package/locales/en/.agents/react_beast_practices/agents/claude.json +4 -4
  756. package/locales/en/.agents/react_beast_practices/agents/copilot.json +4 -4
  757. package/locales/en/.agents/react_beast_practices/agents/gemini.json +4 -4
  758. package/locales/en/.agents/react_beast_practices/agents/openai.yaml +3 -3
  759. package/locales/en/.agents/react_beast_practices/agents/qwen.json +4 -4
  760. package/locales/en/.agents/react_beast_practices/agents/skill.yaml +4 -4
  761. package/locales/en/.agents/release_gate/SKILL.md +205 -69
  762. package/locales/en/.agents/release_gate/agents/claude.json +5 -4
  763. package/locales/en/.agents/release_gate/agents/copilot.json +5 -4
  764. package/locales/en/.agents/release_gate/agents/gemini.json +5 -4
  765. package/locales/en/.agents/release_gate/agents/openai.yaml +3 -3
  766. package/locales/en/.agents/release_gate/agents/qwen.json +5 -4
  767. package/locales/en/.agents/release_gate/agents/skill.yaml +5 -4
  768. package/locales/en/.agents/release_gate_checklist_template/SKILL.md +175 -61
  769. package/locales/en/.agents/review_reference_snippets/SKILL.md +163 -46
  770. package/locales/en/.agents/security_baseline_dev/SKILL.md +496 -16
  771. package/locales/en/.agents/security_baseline_dev/agents/claude.json +2 -2
  772. package/locales/en/.agents/security_baseline_dev/agents/copilot.json +2 -2
  773. package/locales/en/.agents/security_baseline_dev/agents/gemini.json +2 -2
  774. package/locales/en/.agents/security_baseline_dev/agents/openai.yaml +1 -1
  775. package/locales/en/.agents/security_baseline_dev/agents/qwen.json +2 -2
  776. package/locales/en/.agents/security_baseline_dev/agents/skill.yaml +2 -2
  777. package/locales/en/.agents/security_review/SKILL.md +277 -55
  778. package/locales/en/.agents/security_review_baseline/SKILL.md +111 -17
  779. package/locales/en/.agents/security_review_baseline/agents/claude.json +2 -2
  780. package/locales/en/.agents/security_review_baseline/agents/copilot.json +2 -2
  781. package/locales/en/.agents/security_review_baseline/agents/gemini.json +2 -2
  782. package/locales/en/.agents/security_review_baseline/agents/openai.yaml +1 -1
  783. package/locales/en/.agents/security_review_baseline/agents/qwen.json +2 -2
  784. package/locales/en/.agents/security_review_baseline/agents/skill.yaml +2 -2
  785. package/locales/en/.agents/state_rtk_beast_practices/SKILL.md +735 -15
  786. package/locales/en/.agents/state_rtk_beast_practices/agents/claude.json +2 -2
  787. package/locales/en/.agents/state_rtk_beast_practices/agents/copilot.json +2 -2
  788. package/locales/en/.agents/state_rtk_beast_practices/agents/gemini.json +2 -2
  789. package/locales/en/.agents/state_rtk_beast_practices/agents/openai.yaml +1 -1
  790. package/locales/en/.agents/state_rtk_beast_practices/agents/qwen.json +2 -2
  791. package/locales/en/.agents/state_rtk_beast_practices/agents/skill.yaml +2 -2
  792. package/locales/en/.agents/state_zustand_beast_practices/SKILL.md +808 -11
  793. package/locales/en/.agents/state_zustand_beast_practices/agents/claude.json +2 -2
  794. package/locales/en/.agents/state_zustand_beast_practices/agents/copilot.json +2 -2
  795. package/locales/en/.agents/state_zustand_beast_practices/agents/gemini.json +2 -2
  796. package/locales/en/.agents/state_zustand_beast_practices/agents/openai.yaml +1 -1
  797. package/locales/en/.agents/state_zustand_beast_practices/agents/qwen.json +2 -2
  798. package/locales/en/.agents/state_zustand_beast_practices/agents/skill.yaml +2 -2
  799. package/locales/en/.agents/styling_css_stack/SKILL.md +558 -12
  800. package/locales/en/.agents/styling_css_stack/agents/claude.json +5 -5
  801. package/locales/en/.agents/styling_css_stack/agents/copilot.json +5 -5
  802. package/locales/en/.agents/styling_css_stack/agents/gemini.json +5 -5
  803. package/locales/en/.agents/styling_css_stack/agents/openai.yaml +3 -3
  804. package/locales/en/.agents/styling_css_stack/agents/qwen.json +5 -5
  805. package/locales/en/.agents/styling_css_stack/agents/skill.yaml +5 -5
  806. package/locales/en/.agents/system_design_checklist/SKILL.md +199 -40
  807. package/locales/en/.agents/system_design_checklist/agents/claude.json +3 -2
  808. package/locales/en/.agents/system_design_checklist/agents/copilot.json +3 -2
  809. package/locales/en/.agents/system_design_checklist/agents/gemini.json +3 -2
  810. package/locales/en/.agents/system_design_checklist/agents/openai.yaml +1 -1
  811. package/locales/en/.agents/system_design_checklist/agents/qwen.json +3 -2
  812. package/locales/en/.agents/system_design_checklist/agents/skill.yaml +2 -1
  813. package/locales/en/.agents/tailwind_beast_practices/SKILL.md +512 -0
  814. package/locales/en/.agents/tailwind_beast_practices/agents/claude.json +18 -0
  815. package/locales/en/.agents/tailwind_beast_practices/agents/copilot.json +18 -0
  816. package/locales/en/.agents/tailwind_beast_practices/agents/gemini.json +18 -0
  817. package/locales/en/.agents/tailwind_beast_practices/agents/openai.yaml +8 -0
  818. package/locales/en/.agents/tailwind_beast_practices/agents/qwen.json +18 -0
  819. package/locales/en/.agents/tailwind_beast_practices/agents/skill.yaml +22 -0
  820. package/locales/en/.agents/tanstack_beast_practices/SKILL.md +473 -19
  821. package/locales/en/.agents/tanstack_beast_practices/agents/claude.json +2 -2
  822. package/locales/en/.agents/tanstack_beast_practices/agents/copilot.json +2 -2
  823. package/locales/en/.agents/tanstack_beast_practices/agents/gemini.json +2 -2
  824. package/locales/en/.agents/tanstack_beast_practices/agents/openai.yaml +1 -1
  825. package/locales/en/.agents/tanstack_beast_practices/agents/qwen.json +2 -2
  826. package/locales/en/.agents/tanstack_beast_practices/agents/skill.yaml +2 -2
  827. package/locales/en/.agents/tdd_workflow/SKILL.md +453 -34
  828. package/locales/en/.agents/tdd_workflow/agents/claude.json +2 -2
  829. package/locales/en/.agents/tdd_workflow/agents/copilot.json +2 -2
  830. package/locales/en/.agents/tdd_workflow/agents/gemini.json +2 -2
  831. package/locales/en/.agents/tdd_workflow/agents/openai.yaml +1 -1
  832. package/locales/en/.agents/tdd_workflow/agents/qwen.json +2 -2
  833. package/locales/en/.agents/tdd_workflow/agents/skill.yaml +2 -2
  834. package/locales/en/.agents/testing_strategy_js/SKILL.md +636 -30
  835. package/locales/en/.agents/testing_strategy_js/agents/claude.json +2 -2
  836. package/locales/en/.agents/testing_strategy_js/agents/copilot.json +2 -2
  837. package/locales/en/.agents/testing_strategy_js/agents/gemini.json +2 -2
  838. package/locales/en/.agents/testing_strategy_js/agents/openai.yaml +1 -1
  839. package/locales/en/.agents/testing_strategy_js/agents/qwen.json +2 -2
  840. package/locales/en/.agents/testing_strategy_js/agents/skill.yaml +2 -2
  841. package/locales/en/.agents/tests_quality_review/SKILL.md +279 -18
  842. package/locales/en/.agents/tests_quality_review/agents/claude.json +2 -2
  843. package/locales/en/.agents/tests_quality_review/agents/copilot.json +2 -2
  844. package/locales/en/.agents/tests_quality_review/agents/gemini.json +2 -2
  845. package/locales/en/.agents/tests_quality_review/agents/openai.yaml +1 -1
  846. package/locales/en/.agents/tests_quality_review/agents/qwen.json +2 -2
  847. package/locales/en/.agents/tests_quality_review/agents/skill.yaml +2 -2
  848. package/locales/en/.agents/threat_model_baseline/SKILL.md +202 -49
  849. package/locales/en/.agents/threat_model_baseline/agents/claude.json +2 -2
  850. package/locales/en/.agents/threat_model_baseline/agents/copilot.json +2 -2
  851. package/locales/en/.agents/threat_model_baseline/agents/gemini.json +2 -2
  852. package/locales/en/.agents/threat_model_baseline/agents/openai.yaml +1 -1
  853. package/locales/en/.agents/threat_model_baseline/agents/qwen.json +2 -2
  854. package/locales/en/.agents/threat_model_baseline/agents/skill.yaml +2 -2
  855. package/locales/en/.agents/tooling_bun_biome/SKILL.md +531 -9
  856. package/locales/en/.agents/tooling_bun_biome/agents/claude.json +5 -5
  857. package/locales/en/.agents/tooling_bun_biome/agents/copilot.json +5 -5
  858. package/locales/en/.agents/tooling_bun_biome/agents/gemini.json +5 -5
  859. package/locales/en/.agents/tooling_bun_biome/agents/openai.yaml +3 -3
  860. package/locales/en/.agents/tooling_bun_biome/agents/qwen.json +5 -5
  861. package/locales/en/.agents/tooling_bun_biome/agents/skill.yaml +5 -5
  862. package/locales/en/.agents/typescript_beast_practices/SKILL.md +434 -15
  863. package/locales/en/.agents/typescript_beast_practices/agents/claude.json +2 -2
  864. package/locales/en/.agents/typescript_beast_practices/agents/copilot.json +2 -2
  865. package/locales/en/.agents/typescript_beast_practices/agents/gemini.json +2 -2
  866. package/locales/en/.agents/typescript_beast_practices/agents/openai.yaml +1 -1
  867. package/locales/en/.agents/typescript_beast_practices/agents/qwen.json +2 -2
  868. package/locales/en/.agents/typescript_beast_practices/agents/skill.yaml +2 -2
  869. package/locales/en/.agents/ui_a11y_smoke_review/SKILL.md +189 -9
  870. package/locales/en/.agents/ui_a11y_smoke_review/agents/claude.json +5 -5
  871. package/locales/en/.agents/ui_a11y_smoke_review/agents/copilot.json +5 -5
  872. package/locales/en/.agents/ui_a11y_smoke_review/agents/gemini.json +5 -5
  873. package/locales/en/.agents/ui_a11y_smoke_review/agents/openai.yaml +3 -3
  874. package/locales/en/.agents/ui_a11y_smoke_review/agents/qwen.json +5 -5
  875. package/locales/en/.agents/ui_a11y_smoke_review/agents/skill.yaml +5 -5
  876. package/locales/en/.agents/ui_inventory/SKILL.md +271 -44
  877. package/locales/en/.agents/ui_inventory/agents/claude.json +2 -2
  878. package/locales/en/.agents/ui_inventory/agents/copilot.json +2 -2
  879. package/locales/en/.agents/ui_inventory/agents/gemini.json +2 -2
  880. package/locales/en/.agents/ui_inventory/agents/openai.yaml +1 -1
  881. package/locales/en/.agents/ui_inventory/agents/qwen.json +2 -2
  882. package/locales/en/.agents/ui_inventory/agents/skill.yaml +2 -2
  883. package/locales/en/.agents/ux_discovery/SKILL.md +199 -33
  884. package/locales/en/.agents/ux_discovery/agents/claude.json +2 -2
  885. package/locales/en/.agents/ux_discovery/agents/copilot.json +2 -2
  886. package/locales/en/.agents/ux_discovery/agents/gemini.json +2 -2
  887. package/locales/en/.agents/ux_discovery/agents/openai.yaml +1 -1
  888. package/locales/en/.agents/ux_discovery/agents/qwen.json +2 -2
  889. package/locales/en/.agents/ux_discovery/agents/skill.yaml +2 -2
  890. package/locales/en/.agents/ux_spec/SKILL.md +276 -50
  891. package/locales/en/.agents/ux_spec/agents/claude.json +2 -2
  892. package/locales/en/.agents/ux_spec/agents/copilot.json +2 -2
  893. package/locales/en/.agents/ux_spec/agents/gemini.json +2 -2
  894. package/locales/en/.agents/ux_spec/agents/openai.yaml +1 -1
  895. package/locales/en/.agents/ux_spec/agents/qwen.json +2 -2
  896. package/locales/en/.agents/ux_spec/agents/skill.yaml +2 -2
  897. package/locales/en/.agents/wix_iframe_sdk/SKILL.md +271 -42
  898. package/locales/en/.agents/wix_iframe_sdk/agents/claude.json +4 -5
  899. package/locales/en/.agents/wix_iframe_sdk/agents/copilot.json +4 -5
  900. package/locales/en/.agents/wix_iframe_sdk/agents/gemini.json +4 -5
  901. package/locales/en/.agents/wix_iframe_sdk/agents/openai.yaml +3 -3
  902. package/locales/en/.agents/wix_iframe_sdk/agents/qwen.json +4 -5
  903. package/locales/en/.agents/wix_iframe_sdk/agents/skill.yaml +4 -5
  904. package/locales/en/.agents/wix_self_hosted_embedded_script/SKILL.md +611 -88
  905. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/claude.json +2 -2
  906. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/copilot.json +2 -2
  907. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/gemini.json +2 -2
  908. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +1 -1
  909. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/qwen.json +2 -2
  910. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +2 -2
  911. package/locales/en/AGENTS.yaml +2 -0
  912. package/locales/en/agents/architect.md +1 -1
  913. package/locales/en/agents/conductor.md +50 -0
  914. package/locales/en/agents/devops.md +34 -0
  915. package/locales/en/agents/orchestrator.claude.json +2 -0
  916. package/locales/en/agents/orchestrator.copilot.json +2 -0
  917. package/locales/en/agents/orchestrator.gemini.json +2 -0
  918. package/locales/en/agents/orchestrator.openai.yaml +2 -0
  919. package/locales/en/agents/orchestrator.qwen.json +2 -0
  920. package/locales/en/agents/product_manager.md +1 -5
  921. package/locales/en/agents/reviewer.md +69 -64
  922. package/locales/en/agents/senior_full_stack.md +2 -2
  923. package/locales/en/agents/tester.md +50 -11
  924. package/locales/en/agents/ux_ui_designer.md +3 -5
  925. package/package.json +1 -1
@@ -1,15 +1,735 @@
1
- ---
2
- name: state_rtk_beast_practices
3
- description: Redux Toolkit: предсказуемый state для сложных приложений, slices, async thunks, нормализация, селекторы, тестируемость.
4
- ---
5
-
6
- # Skill: RTK Beast Practices
7
-
8
- ## Когда выбирать RTK
9
- - Сложные домены, много событий, сложная синхронизация UI/данных
10
-
11
- ## Правила
12
- - slices по доменам
13
- - нормализация сущностей
14
- - селекторы и мемоизация
15
- - side effects — через thunks/мидлвары, не в компонентах
1
+ ---
2
+ name: state_rtk_beast_practices
3
+ description: Redux Toolkit предсказуемый state для сложных приложений. createSlice, createAsyncThunk, createEntityAdapter, createSelector, RTK Query, middleware, TypeScript типизация, тестирование. Активируй при создании нового slice, рефакторинге Redux, или при вопросах «как правильно организовать RTK».
4
+ ---
5
+
6
+ # Skill: RTK Beast Practices
7
+
8
+ Конкретные DO/DON'T паттерны для Redux Toolkit — от архитектуры slices до тестирования.
9
+
10
+ **Разделы:**
11
+ 1. [Когда RTK vs Zustand](#1-когда-rtk-vs-zustand)
12
+ 2. [createSlice: архитектура](#2-createslice-архитектура)
13
+ 3. [createAsyncThunk: async operations](#3-createasyncthunk)
14
+ 4. [createEntityAdapter: нормализация](#4-createentityadapter)
15
+ 5. [Селекторы и createSelector](#5-селекторы)
16
+ 6. [RTK Query: server state](#6-rtk-query)
17
+ 7. [TypeScript типизация](#7-typescript)
18
+ 8. [Тестирование](#8-тестирование)
19
+ 9. [Anti-patterns](#9-anti-patterns)
20
+
21
+ ---
22
+
23
+ ## 1. Когда RTK vs Zustand
24
+
25
+ | Критерий | RTK ✅ | Zustand ✅ |
26
+ |---------|--------|-----------|
27
+ | Сложные домены с множеством событий | ✅ | ⚠️ Возможно, но сложнее |
28
+ | Нормализация сущностей (entities) | ✅ `createEntityAdapter` | ❌ Вручную |
29
+ | Middleware (logging, analytics, undo) | ✅ Встроенный | ⚠️ Базовый |
30
+ | DevTools | ✅ Redux DevTools (полный) | ✅ Redux DevTools (базовый) |
31
+ | Server state кэширование | ✅ RTK Query | ❌ Вручную или TanStack Query |
32
+ | Небольшой проект, мало state | ❌ Оверкилл | ✅ Минимальный boilerplate |
33
+ | Размер бандла | ⚠️ ~11KB | ✅ ~1KB |
34
+ | Learning curve | ⚠️ Средняя | ✅ Низкая |
35
+
36
+ > [!TIP]
37
+ > **Простое правило:** Zustand для простого client state, RTK для сложных доменов с нормализацией и middleware. RTK Query заменяет TanStack Query в RTK-экосистеме.
38
+
39
+ ---
40
+
41
+ ## 2. createSlice: архитектура
42
+
43
+ ### ✅ DO: один slice на домен (bounded context)
44
+
45
+ ```js
46
+ // features/coupons/couponsSlice.js
47
+ import { createSlice } from '@reduxjs/toolkit';
48
+
49
+ const INITIAL_STATE = {
50
+ items: [],
51
+ selectedId: null,
52
+ status: 'idle', // 'idle' | 'loading' | 'succeeded' | 'failed'
53
+ error: null,
54
+ };
55
+
56
+ const couponsSlice = createSlice({
57
+ name: 'coupons',
58
+ initialState: INITIAL_STATE,
59
+ reducers: {
60
+ /**
61
+ * Выбирает купон по ID.
62
+ * @param {Object} state - текущее состояние.
63
+ * @param {{ payload: string }} action - ID купона.
64
+ */
65
+ couponSelected(state, action) {
66
+ state.selectedId = action.payload;
67
+ },
68
+
69
+ /**
70
+ * Деактивирует купон по ID.
71
+ * @param {Object} state - текущее состояние.
72
+ * @param {{ payload: string }} action - ID купона.
73
+ */
74
+ couponDeactivated(state, action) {
75
+ const coupon = state.items.find((c) => c.id === action.payload);
76
+ if (coupon) coupon.active = false; // ✅ Мутация OK внутри createSlice (Immer)
77
+ },
78
+
79
+ /** Сбрасывает slice к начальному состоянию. */
80
+ couponsReset() {
81
+ return INITIAL_STATE;
82
+ },
83
+ },
84
+ });
85
+
86
+ export const { couponSelected, couponDeactivated, couponsReset } = couponsSlice.actions;
87
+ export default couponsSlice.reducer;
88
+ ```
89
+
90
+ ### ✅ DO: Naming convention для actions
91
+
92
+ ```js
93
+ // Формат: [noun][PastTenseVerb]
94
+ // Описывает ЧТО ПРОИЗОШЛО, а не что делать
95
+
96
+ // ✅ Events (что произошло)
97
+ couponSelected // купон выбран
98
+ couponDeactivated // купон деактивирован
99
+ templateLoaded // шаблон загружен
100
+ formSubmitted // форма отправлена
101
+
102
+ // ❌ Commands (что делать) — менее предсказуемо
103
+ selectCoupon // императивный стиль
104
+ deactivateCoupon
105
+ loadTemplate
106
+ ```
107
+
108
+ ### ✅ DO: prepare callback для формирования payload
109
+
110
+ ```js
111
+ const couponsSlice = createSlice({
112
+ name: 'coupons',
113
+ initialState,
114
+ reducers: {
115
+ /**
116
+ * Добавляет новый купон с автоматическим ID и timestamp.
117
+ * @param {Object} state - текущее состояние.
118
+ * @param {{ payload: { id: string, createdAt: string, code: string, discount: number } }} action
119
+ */
120
+ couponAdded: {
121
+ reducer(state, action) {
122
+ state.items.push(action.payload);
123
+ },
124
+ // ✅ prepare отделяет логику создания payload от reducer
125
+ prepare(code, discount) {
126
+ return {
127
+ payload: {
128
+ id: crypto.randomUUID(),
129
+ createdAt: new Date().toISOString(),
130
+ code,
131
+ discount,
132
+ },
133
+ };
134
+ },
135
+ },
136
+ },
137
+ });
138
+
139
+ // Использование:
140
+ dispatch(couponAdded('SAVE20', 20));
141
+ // payload: { id: 'abc...', createdAt: '2026-...', code: 'SAVE20', discount: 20 }
142
+ ```
143
+
144
+ ### Структура директорий
145
+
146
+ ```
147
+ src/
148
+ ├── app/
149
+ │ ├── store.js # configureStore
150
+ │ └── hooks.js # useAppDispatch, useAppSelector
151
+ ├── features/
152
+ │ ├── coupons/
153
+ │ │ ├── couponsSlice.js
154
+ │ │ ├── couponsSlice.test.js
155
+ │ │ ├── couponsSelectors.js
156
+ │ │ └── CouponList.jsx
157
+ │ └── templates/
158
+ │ ├── templatesSlice.js
159
+ │ ├── templatesSlice.test.js
160
+ │ └── TemplateEditor.jsx
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 3. createAsyncThunk
166
+
167
+ ### ✅ DO: async operations через createAsyncThunk
168
+
169
+ ```js
170
+ import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
171
+
172
+ /**
173
+ * Загружает список купонов с сервера.
174
+ * @returns {Promise<Coupon[]>} массив купонов.
175
+ */
176
+ export const fetchCoupons = createAsyncThunk(
177
+ 'coupons/fetchCoupons',
178
+ async (_, { rejectWithValue }) => {
179
+ try {
180
+ const res = await fetch('/api/coupons');
181
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
182
+ return await res.json();
183
+ } catch (err) {
184
+ return rejectWithValue(err.message);
185
+ }
186
+ }
187
+ );
188
+
189
+ /**
190
+ * Удаляет купон по ID.
191
+ * @param {string} couponId - ID купона для удаления.
192
+ * @returns {Promise<string>} ID удалённого купона.
193
+ */
194
+ export const deleteCoupon = createAsyncThunk(
195
+ 'coupons/deleteCoupon',
196
+ async (couponId, { rejectWithValue }) => {
197
+ try {
198
+ const res = await fetch(`/api/coupons/${couponId}`, { method: 'DELETE' });
199
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
200
+ return couponId; // ✅ Возвращаем ID для удаления из state
201
+ } catch (err) {
202
+ return rejectWithValue(err.message);
203
+ }
204
+ }
205
+ );
206
+
207
+ const couponsSlice = createSlice({
208
+ name: 'coupons',
209
+ initialState: { items: [], status: 'idle', error: null },
210
+ reducers: {},
211
+ extraReducers: (builder) => {
212
+ builder
213
+ // fetchCoupons
214
+ .addCase(fetchCoupons.pending, (state) => {
215
+ state.status = 'loading';
216
+ state.error = null;
217
+ })
218
+ .addCase(fetchCoupons.fulfilled, (state, action) => {
219
+ state.status = 'succeeded';
220
+ state.items = action.payload;
221
+ })
222
+ .addCase(fetchCoupons.rejected, (state, action) => {
223
+ state.status = 'failed';
224
+ state.error = action.payload ?? action.error.message;
225
+ })
226
+ // deleteCoupon
227
+ .addCase(deleteCoupon.fulfilled, (state, action) => {
228
+ state.items = state.items.filter((c) => c.id !== action.payload);
229
+ });
230
+ },
231
+ });
232
+ ```
233
+
234
+ ### ✅ DO: условные thunks с condition
235
+
236
+ ```js
237
+ export const fetchCouponsIfNeeded = createAsyncThunk(
238
+ 'coupons/fetchCoupons',
239
+ async () => {
240
+ const res = await fetch('/api/coupons');
241
+ return res.json();
242
+ },
243
+ {
244
+ // ✅ Не запускаем повторно если уже загружено
245
+ condition: (_, { getState }) => {
246
+ const { status } = getState().coupons;
247
+ return status === 'idle'; // Запускаем только из idle
248
+ },
249
+ }
250
+ );
251
+ ```
252
+
253
+ ### ✅ DO: thunk с доступом к другим slices
254
+
255
+ ```js
256
+ export const applyCouponToOrder = createAsyncThunk(
257
+ 'coupons/applyCouponToOrder',
258
+ async ({ couponId, orderId }, { getState, rejectWithValue }) => {
259
+ const coupon = getState().coupons.items.find((c) => c.id === couponId);
260
+ if (!coupon?.active) {
261
+ return rejectWithValue('Coupon is inactive');
262
+ }
263
+
264
+ const res = await fetch(`/api/orders/${orderId}/apply-coupon`, {
265
+ method: 'POST',
266
+ body: JSON.stringify({ couponId }),
267
+ headers: { 'Content-Type': 'application/json' },
268
+ });
269
+ return res.json();
270
+ }
271
+ );
272
+ ```
273
+
274
+ ---
275
+
276
+ ## 4. createEntityAdapter
277
+
278
+ ### ✅ DO: нормализация для коллекций сущностей
279
+
280
+ ```js
281
+ import { createSlice, createEntityAdapter } from '@reduxjs/toolkit';
282
+
283
+ // ✅ EntityAdapter: автоматические ids[] и entities{} + CRUD операции
284
+ const couponsAdapter = createEntityAdapter({
285
+ sortComparer: (a, b) => a.code.localeCompare(b.code), // сортировка по коду
286
+ });
287
+
288
+ const couponsSlice = createSlice({
289
+ name: 'coupons',
290
+ initialState: couponsAdapter.getInitialState({
291
+ status: 'idle',
292
+ error: null,
293
+ }),
294
+ // initialState = { ids: [], entities: {}, status: 'idle', error: null }
295
+
296
+ reducers: {
297
+ couponAdded: couponsAdapter.addOne,
298
+ couponUpdated: couponsAdapter.updateOne,
299
+ couponRemoved: couponsAdapter.removeOne,
300
+ couponsReceived: couponsAdapter.setAll,
301
+ },
302
+ extraReducers: (builder) => {
303
+ builder
304
+ .addCase(fetchCoupons.fulfilled, (state, action) => {
305
+ couponsAdapter.setAll(state, action.payload);
306
+ state.status = 'succeeded';
307
+ });
308
+ },
309
+ });
310
+
311
+ // ✅ Автоматические селекторы
312
+ export const {
313
+ selectAll: selectAllCoupons, // все купоны как массив
314
+ selectById: selectCouponById, // купон по ID
315
+ selectIds: selectCouponIds, // массив ID
316
+ selectTotal: selectTotalCoupons, // количество
317
+ selectEntities: selectCouponEntities, // словарь
318
+ } = couponsAdapter.getSelectors((state) => state.coupons);
319
+ ```
320
+
321
+ ### Dispatch примеры
322
+
323
+ ```js
324
+ // Добавить
325
+ dispatch(couponAdded({ id: '1', code: 'SAVE10', discount: 10, active: true }));
326
+
327
+ // Обновить (partial update)
328
+ dispatch(couponUpdated({ id: '1', changes: { active: false } }));
329
+
330
+ // Удалить
331
+ dispatch(couponRemoved('1'));
332
+
333
+ // Загрузить все
334
+ dispatch(couponsReceived(couponsFromApi));
335
+ ```
336
+
337
+ ---
338
+
339
+ ## 5. Селекторы
340
+
341
+ ### ✅ DO: createSelector для мемоизированных derived данных
342
+
343
+ ```js
344
+ import { createSelector } from '@reduxjs/toolkit';
345
+
346
+ // Базовый селектор
347
+ const selectCouponsState = (state) => state.coupons;
348
+
349
+ // ✅ Мемоизированный: пересчитывается только при изменении `items`
350
+ export const selectActiveCoupons = createSelector(
351
+ [selectAllCoupons],
352
+ (coupons) => coupons.filter((c) => c.active)
353
+ );
354
+
355
+ export const selectCouponStats = createSelector(
356
+ [selectAllCoupons],
357
+ (coupons) => ({
358
+ total: coupons.length,
359
+ active: coupons.filter((c) => c.active).length,
360
+ inactive: coupons.filter((c) => !c.active).length,
361
+ totalDiscount: coupons.reduce((sum, c) => sum + c.discount, 0),
362
+ })
363
+ );
364
+
365
+ // ✅ Параметризованный селектор
366
+ export const selectCouponsByType = createSelector(
367
+ [selectAllCoupons, (_, type) => type],
368
+ (coupons, type) => coupons.filter((c) => c.type === type)
369
+ );
370
+
371
+ // Использование: selectCouponsByType(state, 'percent')
372
+ ```
373
+
374
+ ### ❌ DON'T: вычисления в компоненте без мемоизации
375
+
376
+ ```js
377
+ // ❌ Фильтрация вызывается при КАЖДОМ рендере — новый массив → ререндер дочерних
378
+ function ActiveCoupons() {
379
+ const coupons = useSelector((state) => state.coupons.items);
380
+ const active = coupons.filter((c) => c.active); // ❌ каждый раз новый массив
381
+ return <List items={active} />;
382
+ }
383
+
384
+ // ✅ С мемоизированным селектором — один и тот же массив если данные не менялись
385
+ function ActiveCoupons() {
386
+ const active = useSelector(selectActiveCoupons);
387
+ return <List items={active} />;
388
+ }
389
+ ```
390
+
391
+ ---
392
+
393
+ ## 6. RTK Query
394
+
395
+ ### ✅ DO: RTK Query для server state
396
+
397
+ ```js
398
+ // features/api/apiSlice.js
399
+ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
400
+
401
+ export const apiSlice = createApi({
402
+ reducerPath: 'api',
403
+ baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
404
+ tagTypes: ['Coupon', 'Template'],
405
+ endpoints: (builder) => ({
406
+
407
+ /**
408
+ * Получить все купоны.
409
+ */
410
+ getCoupons: builder.query({
411
+ query: () => '/coupons',
412
+ providesTags: (result) =>
413
+ result
414
+ ? [
415
+ ...result.map(({ id }) => ({ type: 'Coupon', id })),
416
+ { type: 'Coupon', id: 'LIST' },
417
+ ]
418
+ : [{ type: 'Coupon', id: 'LIST' }],
419
+ }),
420
+
421
+ /**
422
+ * Создать новый купон.
423
+ */
424
+ addCoupon: builder.mutation({
425
+ query: (coupon) => ({
426
+ url: '/coupons',
427
+ method: 'POST',
428
+ body: coupon,
429
+ }),
430
+ invalidatesTags: [{ type: 'Coupon', id: 'LIST' }],
431
+ }),
432
+
433
+ /**
434
+ * Удалить купон.
435
+ */
436
+ deleteCoupon: builder.mutation({
437
+ query: (id) => ({
438
+ url: `/coupons/${id}`,
439
+ method: 'DELETE',
440
+ }),
441
+ invalidatesTags: (_, __, id) => [
442
+ { type: 'Coupon', id },
443
+ { type: 'Coupon', id: 'LIST' },
444
+ ],
445
+ }),
446
+ }),
447
+ });
448
+
449
+ export const {
450
+ useGetCouponsQuery,
451
+ useAddCouponMutation,
452
+ useDeleteCouponMutation,
453
+ } = apiSlice;
454
+ ```
455
+
456
+ ### Использование в компоненте
457
+
458
+ ```jsx
459
+ function CouponList() {
460
+ const { data: coupons, isLoading, error } = useGetCouponsQuery();
461
+ const [deleteCoupon] = useDeleteCouponMutation();
462
+
463
+ if (isLoading) return <Spinner />;
464
+ if (error) return <Error message={error.message} />;
465
+
466
+ return (
467
+ <ul>
468
+ {coupons.map((c) => (
469
+ <li key={c.id}>
470
+ {c.code} — {c.discount}%
471
+ <button onClick={() => deleteCoupon(c.id)}>Delete</button>
472
+ </li>
473
+ ))}
474
+ </ul>
475
+ );
476
+ }
477
+ ```
478
+
479
+ ---
480
+
481
+ ## 7. TypeScript
482
+
483
+ ### ✅ DO: типизированные hooks
484
+
485
+ ```ts
486
+ // app/hooks.ts
487
+ import { useDispatch, useSelector } from 'react-redux';
488
+ import type { AppDispatch, RootState } from './store';
489
+
490
+ export const useAppDispatch = useDispatch.withTypes<AppDispatch>();
491
+ export const useAppSelector = useSelector.withTypes<RootState>();
492
+ ```
493
+
494
+ ### ✅ DO: типизированный store
495
+
496
+ ```ts
497
+ // app/store.ts
498
+ import { configureStore } from '@reduxjs/toolkit';
499
+ import couponsReducer from '../features/coupons/couponsSlice';
500
+ import { apiSlice } from '../features/api/apiSlice';
501
+
502
+ export const store = configureStore({
503
+ reducer: {
504
+ coupons: couponsReducer,
505
+ [apiSlice.reducerPath]: apiSlice.reducer,
506
+ },
507
+ middleware: (getDefaultMiddleware) =>
508
+ getDefaultMiddleware().concat(apiSlice.middleware),
509
+ });
510
+
511
+ export type RootState = ReturnType<typeof store.getState>;
512
+ export type AppDispatch = typeof store.dispatch;
513
+ ```
514
+
515
+ ### ✅ DO: типизированный slice
516
+
517
+ ```ts
518
+ interface CouponState {
519
+ items: Coupon[];
520
+ selectedId: string | null;
521
+ status: 'idle' | 'loading' | 'succeeded' | 'failed';
522
+ error: string | null;
523
+ }
524
+
525
+ const initialState: CouponState = {
526
+ items: [],
527
+ selectedId: null,
528
+ status: 'idle',
529
+ error: null,
530
+ };
531
+
532
+ const couponsSlice = createSlice({
533
+ name: 'coupons',
534
+ initialState,
535
+ reducers: {
536
+ couponSelected(state, action: PayloadAction<string>) {
537
+ state.selectedId = action.payload;
538
+ },
539
+ },
540
+ });
541
+ ```
542
+
543
+ ---
544
+
545
+ ## 8. Тестирование
546
+
547
+ ### ✅ DO: тестировать reducer напрямую
548
+
549
+ ```js
550
+ import { describe, it, expect } from 'vitest';
551
+ import reducer, { couponSelected, couponDeactivated, couponsReset } from './couponsSlice';
552
+
553
+ describe('couponsSlice reducer', () => {
554
+ const initialState = { items: [], selectedId: null, status: 'idle', error: null };
555
+
556
+ it('should return initial state', () => {
557
+ expect(reducer(undefined, { type: 'unknown' })).toEqual(initialState);
558
+ });
559
+
560
+ it('should select coupon', () => {
561
+ const state = reducer(initialState, couponSelected('c-1'));
562
+ expect(state.selectedId).toBe('c-1');
563
+ });
564
+
565
+ it('should deactivate coupon by id', () => {
566
+ const state = {
567
+ ...initialState,
568
+ items: [{ id: 'c-1', code: 'X', active: true }],
569
+ };
570
+
571
+ const next = reducer(state, couponDeactivated('c-1'));
572
+ expect(next.items[0].active).toBe(false);
573
+ });
574
+
575
+ it('should reset to initial state', () => {
576
+ const dirty = { items: [{ id: '1' }], selectedId: '1', status: 'failed', error: 'err' };
577
+ expect(reducer(dirty, couponsReset())).toEqual(initialState);
578
+ });
579
+ });
580
+ ```
581
+
582
+ ### ✅ DO: тестировать async thunks
583
+
584
+ ```js
585
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
586
+ import { configureStore } from '@reduxjs/toolkit';
587
+ import reducer, { fetchCoupons } from './couponsSlice';
588
+
589
+ describe('fetchCoupons thunk', () => {
590
+ let store;
591
+
592
+ beforeEach(() => {
593
+ store = configureStore({ reducer: { coupons: reducer } });
594
+ global.fetch = vi.fn();
595
+ });
596
+
597
+ it('should fetch and store coupons on success', async () => {
598
+ const mockCoupons = [{ id: '1', code: 'A', active: true }];
599
+ fetch.mockResolvedValue({ ok: true, json: () => Promise.resolve(mockCoupons) });
600
+
601
+ await store.dispatch(fetchCoupons());
602
+
603
+ const state = store.getState().coupons;
604
+ expect(state.status).toBe('succeeded');
605
+ expect(state.items).toEqual(mockCoupons);
606
+ expect(state.error).toBeNull();
607
+ });
608
+
609
+ it('should set error on failure', async () => {
610
+ fetch.mockResolvedValue({ ok: false, status: 500 });
611
+
612
+ await store.dispatch(fetchCoupons());
613
+
614
+ const state = store.getState().coupons;
615
+ expect(state.status).toBe('failed');
616
+ expect(state.error).toMatch(/500/);
617
+ });
618
+ });
619
+ ```
620
+
621
+ ### ✅ DO: тестировать селекторы
622
+
623
+ ```js
624
+ import { selectActiveCoupons, selectCouponStats } from './couponsSelectors';
625
+
626
+ describe('coupon selectors', () => {
627
+ const state = {
628
+ coupons: {
629
+ ids: ['1', '2', '3'],
630
+ entities: {
631
+ '1': { id: '1', code: 'A', active: true, discount: 10 },
632
+ '2': { id: '2', code: 'B', active: false, discount: 20 },
633
+ '3': { id: '3', code: 'C', active: true, discount: 15 },
634
+ },
635
+ },
636
+ };
637
+
638
+ it('should select only active coupons', () => {
639
+ const active = selectActiveCoupons(state);
640
+ expect(active).toHaveLength(2);
641
+ expect(active.every((c) => c.active)).toBe(true);
642
+ });
643
+
644
+ it('should compute stats', () => {
645
+ const stats = selectCouponStats(state);
646
+ expect(stats).toEqual({ total: 3, active: 2, inactive: 1, totalDiscount: 45 });
647
+ });
648
+ });
649
+ ```
650
+
651
+ ---
652
+
653
+ ## 9. Anti-patterns
654
+
655
+ ### ❌ DON'T: мутировать state вне createSlice
656
+
657
+ ```js
658
+ // ❌ Мутация вне Immer — баг
659
+ const newState = state;
660
+ newState.items.push(item); // мутация оригинала!
661
+
662
+ // ✅ Мутация только внутри createSlice reducers (Immer обёрнут)
663
+ reducers: {
664
+ itemAdded(state, action) {
665
+ state.items.push(action.payload); // ✅ OK — Immer proxy
666
+ },
667
+ },
668
+ ```
669
+
670
+ ### ❌ DON'T: dispatch в render
671
+
672
+ ```jsx
673
+ // ❌ Dispatch при каждом рендере — бесконечный цикл
674
+ function CouponList() {
675
+ const dispatch = useDispatch();
676
+ dispatch(fetchCoupons()); // ❌ каждый рендер
677
+
678
+ // ✅ Правильно:
679
+ useEffect(() => {
680
+ dispatch(fetchCoupons());
681
+ }, [dispatch]);
682
+ }
683
+ ```
684
+
685
+ ### ❌ DON'T: хранить не-сериализуемые данные в state
686
+
687
+ ```js
688
+ // ❌ Date, Map, Set, Class instances, Functions — не сериализуемы
689
+ const initialState = {
690
+ createdAt: new Date(), // ❌ Date объект
691
+ cache: new Map(), // ❌ Map
692
+ onClick: () => {}, // ❌ Function
693
+ };
694
+
695
+ // ✅ Только plain objects, arrays, primitives
696
+ const initialState = {
697
+ createdAt: new Date().toISOString(), // ✅ string
698
+ cache: {}, // ✅ plain object
699
+ };
700
+ ```
701
+
702
+ ### ❌ DON'T: вкладывать state глубже 3 уровней
703
+
704
+ ```js
705
+ // ❌ Глубокая вложенность — даже с Immer тяжело читать
706
+ state.orders[0].items[2].variants[0].price = 100;
707
+
708
+ // ✅ Нормализовать через createEntityAdapter
709
+ // orders: { ids, entities }
710
+ // items: { ids, entities }
711
+ // variants: { ids, entities }
712
+ ```
713
+
714
+ ---
715
+
716
+ ## Краткая шпаргалка
717
+
718
+ | Задача | Решение |
719
+ |--------|---------|
720
+ | Создать slice | `createSlice({ name, initialState, reducers, extraReducers })` |
721
+ | Async операция | `createAsyncThunk('name', async (arg, { rejectWithValue }) => ...)` |
722
+ | Нормализация | `createEntityAdapter()` → `getSelectors()` |
723
+ | Мемоизация | `createSelector([inputs], output)` |
724
+ | Server state | RTK Query: `createApi({ endpoints })` |
725
+ | Типизация hooks | `useDispatch.withTypes<AppDispatch>()` |
726
+ | Reset state | `return initialState` в reducer |
727
+ | Тестирование | `reducer(state, action)`, `store.dispatch(thunk())`, `selector(state)` |
728
+
729
+ ---
730
+
731
+ ## См. также
732
+ - `$state_zustand_beast_practices` — Zustand для простого client state
733
+ - `$react_beast_practices` — React-специфичные паттерны
734
+ - `$testing_strategy_js` — стратегия тестирования
735
+ - `$es2025_beast_practices` — современный JavaScript