code-ai-installer 1.2.0 → 1.3.1

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 -70
  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 +2 -1
  143. package/.agents/google_stitch_skill/agents/claude.json +6 -6
  144. package/.agents/google_stitch_skill/agents/copilot.json +6 -6
  145. package/.agents/google_stitch_skill/agents/gemini.json +6 -6
  146. package/.agents/google_stitch_skill/agents/openai.yaml +2 -1
  147. package/.agents/google_stitch_skill/agents/qwen.json +6 -6
  148. package/.agents/google_stitch_skill/agents/skill.yaml +4 -3
  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 +224 -68
  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 +508 -70
  606. package/locales/en/.agents/google_stitch_skill/agents/claude.json +7 -6
  607. package/locales/en/.agents/google_stitch_skill/agents/copilot.json +7 -6
  608. package/locales/en/.agents/google_stitch_skill/agents/gemini.json +7 -6
  609. package/locales/en/.agents/google_stitch_skill/agents/openai.yaml +3 -1
  610. package/locales/en/.agents/google_stitch_skill/agents/qwen.json +7 -6
  611. package/locales/en/.agents/google_stitch_skill/agents/skill.yaml +5 -3
  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 +278 -51
  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,236 +1,724 @@
1
- ---
2
- name: mongodb_mongoose_best_practices
3
- description: Best practices для MongoDB + Mongoose: схемы, индексы, валидация, транзакции, миграции, производительность, безопасность, тестирование, anti-patterns и примеры.
4
- ---
5
-
6
- # Skill: MongoDB + Mongoose Best Practices
7
-
8
- ## Цель
9
- Помочь проектировать и реализовывать data layer на MongoDB + Mongoose так, чтобы он был:
10
- - предсказуемым (схемы/контракты),
11
- - производительным (индексы/запросы),
12
- - безопасным (валидация/санитайзинг/least privilege),
13
- - поддерживаемым (паттерны, миграции, тесты),
14
- - готовым к росту (шардинг/операции).
15
-
16
- ## Когда использовать
17
- - Backend на Node.js и в проекте используется MongoDB.
18
- - Выбран ORM/ODM: Mongoose.
19
- - Нужны CRUD, поиск, агрегации, связи, транзакции.
20
-
21
- ## Входы
22
- - PRD + acceptance criteria
23
- - API Contracts (payload/filters/sort)
24
- - Data model / Architecture Doc
25
- - NFR: latency/throughput, объёмы, retention, security/compliance
26
-
27
- ## Выход (Deliverables)
28
- - Список коллекций и ключевых документов (схемы)
29
- - Индексы зачем они)
30
- - Правила валидации/санитайзинга на границе
31
- - Стратегия миграций и версионирования схем
32
- - Паттерны запросов и performance notes
33
- - План тестов (unit/integration) для data layer
34
- - Список anti-patterns + “как надо/как не надо”
35
-
36
- ---
37
-
38
- # 1) Проектирование схемы (Schema Design)
39
-
40
- ## 1.1 Embedded vs Referenced
41
- Выбор делай осознанно и фиксируй trade-off:
42
- - **Embed** (вкладывать) если:
43
- - данные маленькие, часто читаются вместе,
44
- - нужны атомарные обновления поддокументов,
45
- - “child” не живёт отдельно.
46
- - **Reference** (ObjectId ссылки) если:
47
- - дочерний объект большой/растёт,
48
- - нужен независимый lifecycle,
49
- - есть шардинг/разные access patterns.
50
-
51
- ⚠️ Ограничение: документ до 16MB. Вкладывать “вечные” массивы (лог, события) — риск.
52
-
53
- ## 1.2 Определяй invariants в схеме
54
- - required, enum, min/max, custom validators
55
- - default значения
56
- - timestamps (createdAt/updatedAt) — почти всегда
57
-
58
- ## 1.3 Версионирование схем
59
- - Добавляй поле `schemaVersion` (если схема эволюционирует активно)
60
- - Новый код должен уметь читать старую версию (переходный период)
61
-
62
- ---
63
-
64
- # 2) Индексы и производительность
65
-
66
- ## 2.1 Правило №1: Индексы под реальные запросы
67
- Индекс — это контракт с access pattern’ом.
68
- Для каждого ключевого endpoint/UX flow:
69
- - фильтр/поиск,
70
- - сортировка,
71
- - пагинация.
72
-
73
- ## 2.2 Типовые индексы
74
- - **compound index** для (filter + sort)
75
- - **unique** для логинов/ключей/slug’ов
76
- - **TTL** для одноразовых токенов/сессий (если подходит)
77
- - **partial index** если индекс нужен не для всех документов
78
- - **text index** осторожно, часто лучше отдельный search (или Atlas Search)
79
-
80
- ## 2.3 Пагинация
81
- - Offset (`skip`) на больших объёмах деградирует.
82
- - Для больших коллекций используй **cursor pagination**:
83
- - по `_id` или `createdAt` (и индекс под это).
84
-
85
- ## 2.4 “Lean reads” и выбор полей
86
- - `.lean()` для read-only (ускоряет, меньше памяти)
87
- - `.select()` — не тащи лишние поля (особенно большие blobs)
88
-
89
- ## 2.5 Избегай N+1
90
- - Либо **embed**, либо batch query по ids,
91
- - `.populate()` использовать аккуратно, понимать cost.
92
-
93
- ---
94
-
95
- # 3) Безопасность
96
-
97
- ## 3.1 NoSQL injection (must)
98
- Опасно принимать фильтры напрямую из пользователя.
99
- - Запрещай “сырой” объект фильтра из body/query.
100
- - Используй allowlist полей и операторов.
101
-
102
- ### Хорошо
103
- - маппинг query params → безопасный filter
104
- - явная валидация Zod/Joi + сборка query
105
-
106
- ### Плохо ❌
107
- - `Model.find(req.query)` / `Model.find(req.body.filter)` без фильтрации
108
-
109
- ## 3.2 Least privilege
110
- - отдельный пользователь БД для приложения,
111
- - минимальные права (readWrite на нужную БД),
112
- - разные creds для env.
113
-
114
- ## 3.3 Secrets
115
- - creds только через env/secret manager
116
- - не логировать connection string
117
-
118
- ---
119
-
120
- # 4) Mongoose: паттерны и конвенции
121
-
122
- ## 4.1 Schema: строгий режим
123
- Рекомендуется:
124
- - `strict: "throw"` для критичных моделей (ловит неожиданные поля)
125
- - `strictQuery: true` (чтобы query не принимали “мусор”)
126
-
127
- ## 4.2 Валидация: где что
128
- - На границе API: Zod/Joi (обязательная)
129
- - В Mongoose schema: инварианты модели (второй рубеж)
130
- Не полагайся только на Mongoose validation для user input.
131
-
132
- ## 4.3 Middleware/hooks: осторожно
133
- - pre/post hooks = “Magic” если их много и они скрывают логику.
134
- - Любой hook обязан быть задокументирован.
135
- - Не класть бизнес-логику в hooks, только технические вещи (timestamps, normalization).
136
-
137
- ## 4.4 Plugin’ы
138
- - `mongoose-lean-virtuals`, `mongoose-delete` и т.п. — использовать осознанно
139
- - Следить за supply-chain (репутация/поддержка)
140
-
141
- ## 4.5 Transactions
142
- Транзакции доступны в replica set.
143
- Используй `session` и `withTransaction` для multi-doc операций.
144
- Но помни: MongoDB любит моделирование, где транзакции нужны редко.
145
-
146
- ---
147
-
148
- # 5) Миграции и эволюция данных
149
-
150
- ## 5.1 Миграции обязательны при изменении модели
151
- Варианты:
152
- - `migrate-mongo`
153
- - свой migration runner (таблица `migrations` в Mongo)
154
-
155
- ## 5.2 Backfill стратегия
156
- - small batches
157
- - id-range/cursor
158
- - retries
159
- - наблюдаемость (сколько осталось)
160
-
161
- ---
162
-
163
- # 6) Обработка ошибок
164
-
165
- ## 6.1 Типовые ошибки
166
- - duplicate key код 409 (если это бизнес-конфликт)
167
- - validation error → 400
168
- - not found → 404
169
- - cast error (ObjectId) → 400
170
- - connection/timeouts 503/500 (в зависимости от политики)
171
-
172
- ## 6.2 Не утекать внутренностями
173
- - не возвращать stack
174
- - не возвращать raw error от Mongo
175
-
176
- ---
177
-
178
- # 7) Тестирование (TDD-friendly)
179
-
180
- ## 7.1 Unit tests
181
- - валидаторы/мапперы/filter builders
182
- - сервисный слой mock repo)
183
-
184
- ## 7.2 Integration tests
185
- - реальная Mongo (Testcontainers/Docker) или MongoMemoryServer (быстрее, но не 100% как прод)
186
- - тесты индексов (unique, TTL логика)
187
- - транзакции (если используете)
188
-
189
- ---
190
-
191
- # 8) Anti-patterns (как P0 риски)
192
-
193
- 🔴 P0:
194
- - Принимать user input как “сырой” Mongo filter (NoSQL injection)
195
- - Отсутствие индексов под ключевые запросы (latency деградирует)
196
- - Слишком много Mongoose hooks (Magic)
197
- - Огромные документы/растущие массивы (16MB риск)
198
- - Попытка заменить схему “динамикой” без строгих правил (Big Ball of Mud в данных)
199
-
200
- 🟠 P1:
201
- - `.populate()` в циклах / N+1
202
- - `skip` пагинация на больших объёмах
203
- - `select *` без `.select()`
204
-
205
- ---
206
-
207
- # 9) Примеры (как надо / как не надо)
208
-
209
- ## 9.1 Safe filter builder (пример)
210
- ### Хорошо: allowlist + явные операторы
211
- - принимаем query params: `status`, `q`, `from`, `to`
212
- - строим filter сами
213
- - запрещаем `$where`, `$expr`, `$regex` без ограничений
214
-
215
- ### ❌ Плохо: прямой find по req.query
216
- - `Model.find(req.query)`
217
-
218
- ## 9.2 Индекс под фильтр + сорт
219
- ### Хорошо
220
- - endpoint: list orders by userId sorted by createdAt desc
221
- - индекс: `{ userId: 1, createdAt: -1 }`
222
-
223
- ### ❌ Плохо
224
- - сортировка по неиндексированному полю на большой коллекции
225
-
226
- ---
227
-
228
- # 10) Чек-лист перед передачей в разработку/ревью
229
- - [ ] Схемы определены (required/enums/defaults/timestamps)
230
- - [ ] Решения embed vs reference задокументированы
231
- - [ ] Индексы определены под ключевые endpoints
232
- - [ ] Пагинация выбрана (cursor для больших коллекций)
233
- - [ ] Нет сырого user-provided фильтра (NoSQL injection)
234
- - [ ] Миграции/бекфил план есть
235
- - [ ] Integration tests есть (DB queries/unique/transactions)
236
- - [ ] Ошибки маппятся безопасно (400/404/409/5xx)
1
+ ---
2
+ name: mongodb_mongoose_best_practices
3
+ description: Best practices для MongoDB + Mongoose схемы, индексы, валидация, транзакции, миграции, производительность, безопасность, тестирование, anti-patterns и примеры.
4
+ ---
5
+
6
+ # Skill: MongoDB + Mongoose Best Practices
7
+
8
+ Конкретные DO/DON'T паттерны для MongoDB + Mongoose: от schema design до тестирования.
9
+
10
+ **Разделы:**
11
+ 1. [Schema Design](#1-schema-design)
12
+ 2. [Mongoose Model Setup](#2-mongoose-model-setup)
13
+ 3. [Индексы](#3-индексы)
14
+ 4. [Query Patterns](#4-query-patterns)
15
+ 5. [Connection и Config](#5-connection)
16
+ 6. [Безопасность](#6-безопасность)
17
+ 7. [Транзакции](#7-транзакции)
18
+ 8. [Миграции](#8-миграции)
19
+ 9. [Обработка ошибок](#9-обработка-ошибок)
20
+ 10. [Тестирование](#10-тестирование)
21
+ 11. [Anti-patterns](#11-anti-patterns)
22
+
23
+ ---
24
+
25
+ ## 1. Schema Design
26
+
27
+ ### Embedded vs Referenced
28
+
29
+ | Критерий | Embed ✅ | Reference ✅ |
30
+ |---------|---------|-------------|
31
+ | Читаются вместе | Да | Нет |
32
+ | Child живёт отдельно | Нет | Да |
33
+ | Размер child | Маленький, bounded | Большой или растущий |
34
+ | Атомарные обновления child | Нужны | Не критично |
35
+ | Много children | < 50 | Unbounded |
36
+
37
+ > [!WARNING]
38
+ > Документ MongoDB 16MB. Никогда не embed unbounded массивы (логи, события, комментарии).
39
+
40
+ ### DO: embed — bounded subdocuments
41
+
42
+ ```js
43
+ // Embed: settings — всегда читаются вместе с installation, bounded
44
+ const installationSchema = new Schema({
45
+ appInstanceId: { type: String, required: true, unique: true },
46
+ settings: {
47
+ overlay: {
48
+ title: { type: String, default: 'Special Offer!' },
49
+ text: { type: String, default: 'Get your discount' },
50
+ backgroundColor: { type: String, default: '#1a1a2e' },
51
+ },
52
+ cta: {
53
+ text: { type: String, default: 'Get Coupon' },
54
+ action: { type: String, enum: ['copy', 'redirect', 'link'], default: 'copy' },
55
+ },
56
+ timer: {
57
+ enabled: { type: Boolean, default: true },
58
+ minutes: { type: Number, min: 0, max: 60, default: 10 },
59
+ seconds: { type: Number, min: 0, max: 59, default: 0 },
60
+ },
61
+ },
62
+ });
63
+ ```
64
+
65
+ ### ✅ DO: reference — independent lifecycle, unbounded
66
+
67
+ ```js
68
+ // Reference: coupons — independent lifecycle, many per installation
69
+ const couponSchema = new Schema({
70
+ appInstanceId: { type: String, required: true, index: true },
71
+ code: { type: String, required: true, uppercase: true, trim: true },
72
+ discount: { type: Number, required: true, min: 1, max: 100 },
73
+ type: { type: String, enum: ['percent', 'fixed'], default: 'percent' },
74
+ active: { type: Boolean, default: true },
75
+ }, { timestamps: true });
76
+
77
+ // Compound index для основного query pattern
78
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 2. Mongoose Model Setup
84
+
85
+ ### DO: strict schema с validators
86
+
87
+ ```js
88
+ // models/Coupon.js
89
+ import { Schema, model } from 'mongoose';
90
+
91
+ const couponSchema = new Schema(
92
+ {
93
+ appInstanceId: {
94
+ type: String,
95
+ required: [true, 'appInstanceId is required'],
96
+ index: true,
97
+ },
98
+ code: {
99
+ type: String,
100
+ required: [true, 'Coupon code is required'],
101
+ minlength: [3, 'Code must be at least 3 characters'],
102
+ maxlength: [20, 'Code must be at most 20 characters'],
103
+ uppercase: true,
104
+ trim: true,
105
+ },
106
+ discount: {
107
+ type: Number,
108
+ required: true,
109
+ min: [1, 'Discount must be at least 1'],
110
+ max: [100, 'Discount cannot exceed 100'],
111
+ },
112
+ type: {
113
+ type: String,
114
+ enum: {
115
+ values: ['percent', 'fixed'],
116
+ message: '{VALUE} is not a valid discount type',
117
+ },
118
+ default: 'percent',
119
+ },
120
+ active: {
121
+ type: Boolean,
122
+ default: true,
123
+ },
124
+ usageCount: {
125
+ type: Number,
126
+ default: 0,
127
+ min: 0,
128
+ },
129
+ },
130
+ {
131
+ timestamps: true, // ✅ Автоматические createdAt, updatedAt
132
+ strict: 'throw', // Кидать ошибку на неизвестные поля
133
+ strictQuery: true, // Не принимать неизвестные query params
134
+ versionKey: '__v', // Optimistic concurrency
135
+ }
136
+ );
137
+
138
+ // Compound unique index
139
+ couponSchema.index({ appInstanceId: 1, code: 1 }, { unique: true });
140
+
141
+ // Index для основного query: active coupons sorted by date
142
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
143
+
144
+ export const Coupon = model('Coupon', couponSchema);
145
+ ```
146
+
147
+ ### ✅ DO: toJSON transform (скрывать internal fields)
148
+
149
+ ```js
150
+ couponSchema.set('toJSON', {
151
+ transform: (_doc, ret) => {
152
+ ret.id = ret._id.toString();
153
+ delete ret._id;
154
+ delete ret.__v;
155
+ return ret;
156
+ },
157
+ });
158
+ ```
159
+
160
+ ### ❌ DON'T: schema как `Schema.Types.Mixed`
161
+
162
+ ```js
163
+ // Mixed = no validation, no autocomplete, data chaos
164
+ const badSchema = new Schema({
165
+ settings: Schema.Types.Mixed, // любые данные
166
+ data: {}, // тоже Mixed
167
+ });
168
+
169
+ // Явная типизация
170
+ const goodSchema = new Schema({
171
+ settings: {
172
+ title: { type: String, default: '' },
173
+ enabled: { type: Boolean, default: true },
174
+ },
175
+ });
176
+ ```
177
+
178
+ ---
179
+
180
+ ## 3. Индексы
181
+
182
+ ### DO: индексы под реальные query patterns
183
+
184
+ ```js
185
+ // Типичные индексы для Smart Cart Rescue:
186
+
187
+ // 1. Unique lookup
188
+ couponSchema.index({ appInstanceId: 1, code: 1 }, { unique: true });
189
+
190
+ // 2. List + filter + sort
191
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
192
+
193
+ // 3. TTL — автоудаление (для temporary tokens)
194
+ tokenSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
195
+
196
+ // 4. Partial index индексировать только active coupons
197
+ couponSchema.index(
198
+ { appInstanceId: 1, createdAt: -1 },
199
+ { partialFilterExpression: { active: true } }
200
+ );
201
+
202
+ // 5. Text search
203
+ couponSchema.index({ code: 'text', 'metadata.description': 'text' });
204
+ ```
205
+
206
+ ### Правила индексов
207
+
208
+ | Правило | Объяснение |
209
+ |---------|-----------|
210
+ | **ESR** | Equality Sort → Range (порядок полей в compound index) |
211
+ | Не больше 5-7 индексов | Каждый индекс = overhead на write |
212
+ | `explain()` для проверки | `Model.find().explain('executionStats')` |
213
+ | Unique для бизнес-ключей | `{ appInstanceId, code }` unique |
214
+ | TTL для expirable data | Tokens, sessions, temp files |
215
+
216
+ ### ✅ DO: проверять query plan
217
+
218
+ ```js
219
+ // Проверить что индекс используется
220
+ const explanation = await Coupon.find({ appInstanceId: 'abc', active: true })
221
+ .sort({ createdAt: -1 })
222
+ .explain('executionStats');
223
+
224
+ console.log(explanation.executionStats.executionStages);
225
+ // Должно быть IXSCAN, не COLLSCAN
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 4. Query Patterns
231
+
232
+ ### DO: lean() для read-only
233
+
234
+ ```js
235
+ // lean() возвращает plain JS objects, не Mongoose documents
236
+ // ~5x быстрее, меньше памяти, идеально для API responses
237
+ const coupons = await Coupon
238
+ .find({ appInstanceId, active: true })
239
+ .sort({ createdAt: -1 })
240
+ .limit(20)
241
+ .select('code discount type active createdAt') // ✅ только нужные поля
242
+ .lean(); // ✅ plain objects
243
+ ```
244
+
245
+ ### ✅ DO: cursor pagination (для больших коллекций)
246
+
247
+ ```js
248
+ /**
249
+ * Cursor-based пагинация (вместо skip/limit на больших коллекциях).
250
+ * @param {string} appInstanceId
251
+ * @param {{ cursor?: string, limit?: number }} opts
252
+ * @returns {Promise<{ data: Coupon[], nextCursor: string | null }>}
253
+ */
254
+ async function listCoupons(appInstanceId, { cursor, limit = 20 }) {
255
+ const query = { appInstanceId, active: true };
256
+
257
+ // Cursor = ID последнего элемента предыдущей страницы
258
+ if (cursor) {
259
+ query._id = { $lt: cursor };
260
+ }
261
+
262
+ const data = await Coupon
263
+ .find(query)
264
+ .sort({ _id: -1 })
265
+ .limit(limit + 1) // +1 чтобы понять есть ли nextPage
266
+ .lean();
267
+
268
+ const hasMore = data.length > limit;
269
+ if (hasMore) data.pop();
270
+
271
+ return {
272
+ data,
273
+ nextCursor: hasMore ? data[data.length - 1]._id.toString() : null,
274
+ };
275
+ }
276
+ ```
277
+
278
+ ### ✅ DO: safe filter builder (NoSQL injection prevention)
279
+
280
+ ```js
281
+ /**
282
+ * Строит безопасный MongoDB фильтр из query params.
283
+ * Whitelist-подход: только разрешённые поля и операторы.
284
+ * @param {string} appInstanceId
285
+ * @param {{ status?: string, q?: string, from?: string, to?: string }} query
286
+ * @returns {object} MongoDB filter.
287
+ */
288
+ function buildCouponFilter(appInstanceId, query) {
289
+ const filter = { appInstanceId };
290
+
291
+ // Status (whitelist enum)
292
+ if (query.status === 'active') filter.active = true;
293
+ if (query.status === 'inactive') filter.active = false;
294
+
295
+ // Search (safe: escape regex special chars)
296
+ if (query.q) {
297
+ filter.code = { $regex: escapeRegex(query.q), $options: 'i' };
298
+ }
299
+
300
+ // Date range
301
+ if (query.from || query.to) {
302
+ filter.createdAt = {};
303
+ if (query.from) filter.createdAt.$gte = new Date(query.from);
304
+ if (query.to) filter.createdAt.$lte = new Date(query.to);
305
+ }
306
+
307
+ return filter;
308
+ }
309
+
310
+ /**
311
+ * Экранирует спецсимволы regex для безопасного использования в MongoDB $regex.
312
+ * @param {string} str
313
+ * @returns {string}
314
+ */
315
+ function escapeRegex(str) {
316
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
317
+ }
318
+ ```
319
+
320
+ ### ❌ DON'T: прямой find по req.body/query
321
+
322
+ ```js
323
+ // ❌ NoSQL injection — пользователь может передать { $ne: "" }
324
+ const results = await Coupon.find(req.query); // ❌
325
+ const results = await Coupon.find(req.body.filter); // ❌
326
+ const user = await User.findOne({ email: req.body.email }); // ❌ если email = { $gt: "" }
327
+
328
+ // ✅ Явное приведение типов
329
+ const user = await User.findOne({ email: String(req.body.email) });
330
+ ```
331
+
332
+ ---
333
+
334
+ ## 5. Connection
335
+
336
+ ### ✅ DO: connection с retry и pooling
337
+
338
+ ```js
339
+ // db/connection.js
340
+ import mongoose from 'mongoose';
341
+ import { config } from '../config/env.js';
342
+ import { logger } from '../utils/logger.js';
343
+
344
+ /**
345
+ * Подключается к MongoDB с retry и конфигурацией pool.
346
+ * @returns {Promise<mongoose.Connection>}
347
+ */
348
+ export async function connectDb() {
349
+ const MAX_RETRIES = 5;
350
+ const RETRY_DELAY_MS = 3000;
351
+
352
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
353
+ try {
354
+ await mongoose.connect(config.DATABASE_URL, {
355
+ maxPoolSize: 10, // ✅ Connection pooling
356
+ minPoolSize: 2,
357
+ serverSelectionTimeoutMS: 5000,
358
+ socketTimeoutMS: 45000,
359
+ heartbeatFrequencyMS: 10000,
360
+ });
361
+
362
+ logger.info('MongoDB connected');
363
+
364
+ // ✅ Connection event handlers
365
+ mongoose.connection.on('error', (err) => {
366
+ logger.error({ err }, 'MongoDB connection error');
367
+ });
368
+
369
+ mongoose.connection.on('disconnected', () => {
370
+ logger.warn('MongoDB disconnected');
371
+ });
372
+
373
+ return mongoose.connection;
374
+
375
+ } catch (err) {
376
+ logger.warn({ attempt, maxRetries: MAX_RETRIES, err: err.message },
377
+ 'MongoDB connection failed, retrying...');
378
+
379
+ if (attempt === MAX_RETRIES) {
380
+ logger.fatal({ err }, 'MongoDB connection failed after all retries');
381
+ throw err;
382
+ }
383
+
384
+ await new Promise((r) => setTimeout(r, RETRY_DELAY_MS * attempt));
385
+ }
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Graceful disconnect.
391
+ */
392
+ export async function disconnectDb() {
393
+ await mongoose.disconnect();
394
+ logger.info('MongoDB disconnected gracefully');
395
+ }
396
+ ```
397
+
398
+ ---
399
+
400
+ ## 6. Безопасность
401
+
402
+ ### Чеклист
403
+
404
+ | Правило | Как |
405
+ |---------|-----|
406
+ | **NoSQL injection** | Safe filter builder (whitelist полей + типов) |
407
+ | **Least privilege** | Отдельный DB user с readWrite на нужную DB |
408
+ | **Secrets** | Connection string через env, не в коде |
409
+ | **strict: "throw"** | Ловит неожиданные поля в documents |
410
+ | **strictQuery: true** | Ловит неизвестные query params |
411
+ | **Не логировать connection string** | pino redact для `*.DATABASE_URL` |
412
+
413
+ ---
414
+
415
+ ## 7. Транзакции
416
+
417
+ ### ✅ DO: withTransaction для multi-doc операций
418
+
419
+ ```js
420
+ /**
421
+ * Применяет купон к заказу атомарно (списание + запись использования).
422
+ * Требует replica set.
423
+ */
424
+ async function applyCoupon(orderId, couponId) {
425
+ const session = await mongoose.startSession();
426
+
427
+ try {
428
+ const result = await session.withTransaction(async () => {
429
+ // 1. Проверить купон
430
+ const coupon = await Coupon.findById(couponId).session(session);
431
+ if (!coupon || !coupon.active) {
432
+ throw new AppError('Coupon not available', 400);
433
+ }
434
+
435
+ // 2. Применить к заказу
436
+ const order = await Order.findByIdAndUpdate(
437
+ orderId,
438
+ {
439
+ $set: { couponId, discount: coupon.discount },
440
+ $inc: { total: -coupon.discount },
441
+ },
442
+ { session, new: true }
443
+ );
444
+
445
+ // 3. Увеличить usage count
446
+ await Coupon.findByIdAndUpdate(
447
+ couponId,
448
+ { $inc: { usageCount: 1 } },
449
+ { session }
450
+ );
451
+
452
+ return order;
453
+ });
454
+
455
+ return result;
456
+ } finally {
457
+ await session.endSession();
458
+ }
459
+ }
460
+ ```
461
+
462
+ > [!TIP]
463
+ > MongoDB любит моделирование, где транзакции нужны редко. Если транзакция нужна часто — пересмотри schema design (может стоит embed).
464
+
465
+ ---
466
+
467
+ ## 8. Миграции
468
+
469
+ ### ✅ DO: migrate-mongo
470
+
471
+ ```bash
472
+ npm install --save-dev migrate-mongo
473
+ npx migrate-mongo init
474
+ ```
475
+
476
+ ```js
477
+ // migrations/20260313_add_template_field.js
478
+
479
+ /**
480
+ * Добавляет поле templateId ко всем settings.
481
+ */
482
+ module.exports = {
483
+ async up(db) {
484
+ await db.collection('settings').updateMany(
485
+ { templateId: { $exists: false } },
486
+ { $set: { templateId: 'glassmorphism' } }
487
+ );
488
+ },
489
+
490
+ async down(db) {
491
+ await db.collection('settings').updateMany(
492
+ {},
493
+ { $unset: { templateId: '' } }
494
+ );
495
+ },
496
+ };
497
+ ```
498
+
499
+ ### Backfill стратегия (для больших коллекций)
500
+
501
+ ```js
502
+ /**
503
+ * Batch backfill — обрабатывает документы порциями.
504
+ * @param {Collection} collection
505
+ * @param {object} filter
506
+ * @param {object} update
507
+ * @param {number} batchSize
508
+ */
509
+ async function batchBackfill(collection, filter, update, batchSize = 500) {
510
+ let processed = 0;
511
+ let cursor = null;
512
+
513
+ while (true) {
514
+ const query = { ...filter };
515
+ if (cursor) query._id = { $gt: cursor };
516
+
517
+ const docs = await collection
518
+ .find(query)
519
+ .sort({ _id: 1 })
520
+ .limit(batchSize)
521
+ .toArray();
522
+
523
+ if (docs.length === 0) break;
524
+
525
+ const ids = docs.map((d) => d._id);
526
+ await collection.updateMany({ _id: { $in: ids } }, update);
527
+
528
+ cursor = ids[ids.length - 1];
529
+ processed += docs.length;
530
+
531
+ logger.info({ processed }, 'Backfill progress');
532
+ }
533
+
534
+ logger.info({ total: processed }, 'Backfill complete');
535
+ }
536
+ ```
537
+
538
+ ---
539
+
540
+ ## 9. Обработка ошибок
541
+
542
+ ### ✅ DO: маппинг Mongoose ошибок → HTTP
543
+
544
+ ```js
545
+ /**
546
+ * Маппит Mongoose ошибки в AppError для централизованного error handler.
547
+ * @param {Error} err
548
+ * @returns {AppError}
549
+ */
550
+ function mapMongooseError(err) {
551
+ // Duplicate key (unique constraint violation)
552
+ if (err.code === 11000) {
553
+ const field = Object.keys(err.keyPattern || {})[0] || 'field';
554
+ return new AppError(`Duplicate value for ${field}`, 409);
555
+ }
556
+
557
+ // Validation error
558
+ if (err.name === 'ValidationError') {
559
+ const details = Object.values(err.errors).map((e) => ({
560
+ field: e.path,
561
+ message: e.message,
562
+ }));
563
+ return new AppError('Validation failed', 400, details);
564
+ }
565
+
566
+ // CastError (invalid ObjectId)
567
+ if (err.name === 'CastError') {
568
+ return new AppError(`Invalid ${err.path}: ${err.value}`, 400);
569
+ }
570
+
571
+ // VersionError (optimistic concurrency)
572
+ if (err.name === 'VersionError') {
573
+ return new AppError('Document was modified by another request', 409);
574
+ }
575
+
576
+ // Unknown → 500 (log full error, return generic message)
577
+ return new AppError('Internal server error', 500);
578
+ }
579
+ ```
580
+
581
+ ### Error mapping table
582
+
583
+ | Mongoose Error | HTTP Code | AppError |
584
+ |----------------|-----------|---------|
585
+ | `code: 11000` (duplicate) | 409 | ConflictError |
586
+ | `ValidationError` | 400 | ValidationError |
587
+ | `CastError` (bad ObjectId) | 400 | ValidationError |
588
+ | `VersionError` | 409 | ConflictError |
589
+ | Document not found | 404 | NotFoundError |
590
+ | Connection timeout | 503 | AppError |
591
+
592
+ ---
593
+
594
+ ## 10. Тестирование
595
+
596
+ ### ✅ DO: MongoMemoryServer для integration tests
597
+
598
+ ```js
599
+ // tests/setup.js
600
+ import { MongoMemoryServer } from 'mongodb-memory-server';
601
+ import mongoose from 'mongoose';
602
+
603
+ let mongoServer;
604
+
605
+ /**
606
+ * Запускает in-memory MongoDB перед тестами.
607
+ */
608
+ export async function setupTestDb() {
609
+ mongoServer = await MongoMemoryServer.create();
610
+ const uri = mongoServer.getUri();
611
+ await mongoose.connect(uri);
612
+ }
613
+
614
+ /**
615
+ * Очищает все коллекции между тестами.
616
+ */
617
+ export async function clearTestDb() {
618
+ const collections = mongoose.connection.collections;
619
+ for (const key in collections) {
620
+ await collections[key].deleteMany({});
621
+ }
622
+ }
623
+
624
+ /**
625
+ * Останавливает in-memory MongoDB после тестов.
626
+ */
627
+ export async function teardownTestDb() {
628
+ await mongoose.disconnect();
629
+ await mongoServer.stop();
630
+ }
631
+ ```
632
+
633
+ ```js
634
+ // tests/coupon.repo.test.js
635
+ import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
636
+ import { setupTestDb, clearTestDb, teardownTestDb } from './setup.js';
637
+ import { Coupon } from '../models/Coupon.js';
638
+
639
+ describe('Coupon Model', () => {
640
+ beforeAll(setupTestDb);
641
+ afterEach(clearTestDb);
642
+ afterAll(teardownTestDb);
643
+
644
+ it('should create a coupon with defaults', async () => {
645
+ const coupon = await Coupon.create({
646
+ appInstanceId: 'test-app',
647
+ code: 'save20',
648
+ discount: 20,
649
+ });
650
+
651
+ expect(coupon.code).toBe('SAVE20'); // uppercase transform
652
+ expect(coupon.active).toBe(true); // default
653
+ expect(coupon.type).toBe('percent'); // default
654
+ expect(coupon.createdAt).toBeDefined(); // timestamps
655
+ });
656
+
657
+ it('should enforce unique (appInstanceId, code)', async () => {
658
+ await Coupon.create({ appInstanceId: 'app1', code: 'TEST', discount: 10 });
659
+
660
+ await expect(
661
+ Coupon.create({ appInstanceId: 'app1', code: 'TEST', discount: 20 })
662
+ ).rejects.toThrow(/duplicate key/i);
663
+ });
664
+
665
+ it('should validate discount range', async () => {
666
+ await expect(
667
+ Coupon.create({ appInstanceId: 'app1', code: 'BAD', discount: 150 })
668
+ ).rejects.toThrow(/cannot exceed 100/i);
669
+ });
670
+
671
+ it('should query active coupons sorted by date', async () => {
672
+ await Coupon.create({ appInstanceId: 'app1', code: 'OLD', discount: 5 });
673
+ await Coupon.create({ appInstanceId: 'app1', code: 'NEW', discount: 10 });
674
+ await Coupon.create({ appInstanceId: 'app1', code: 'OFF', discount: 15, active: false });
675
+
676
+ const active = await Coupon
677
+ .find({ appInstanceId: 'app1', active: true })
678
+ .sort({ createdAt: -1 })
679
+ .lean();
680
+
681
+ expect(active).toHaveLength(2);
682
+ expect(active[0].code).toBe('NEW');
683
+ });
684
+ });
685
+ ```
686
+
687
+ ---
688
+
689
+ ## 11. Anti-patterns
690
+
691
+ | ❌ Anti-pattern | ✅ Решение |
692
+ |----------------|-----------|
693
+ | `Schema.Types.Mixed` | Явная типизация полей |
694
+ | `Model.find(req.query)` | Safe filter builder (whitelist) |
695
+ | `skip()` на больших коллекциях | Cursor pagination (`_id` / `createdAt`) |
696
+ | Нет `.lean()` для API responses | `.lean()` + `.select()` для read-only |
697
+ | `.populate()` в циклах (N+1) | Batch query по IDs / embed |
698
+ | Бизнес-логика в Mongoose hooks | Hooks = только техническое (timestamps, normalization) |
699
+ | Unbounded embed arrays | Reference + separate collection |
700
+ | Нет индексов под query patterns | `explain()` → IXSCAN, не COLLSCAN |
701
+ | `strict: false` | `strict: 'throw'` + `strictQuery: true` |
702
+ | Connection string в коде | Env vars + Zod validation |
703
+
704
+ ---
705
+
706
+ ## Чеклист
707
+
708
+ - [ ] Schemas с required/enum/min/max/defaults/timestamps
709
+ - [ ] Embed vs reference — осознанный выбор, задокументирован
710
+ - [ ] Индексы под ключевые query patterns
711
+ - [ ] Пагинация: cursor для больших коллекций
712
+ - [ ] Safe filter builder (нет raw user input в find)
713
+ - [ ] Connection с retry и pooling
714
+ - [ ] Mongoose errors → HTTP codes mapping
715
+ - [ ] Integration tests (MongoMemoryServer)
716
+ - [ ] Миграции для schema changes
717
+
718
+ ---
719
+
720
+ ## См. также
721
+ - `$node_express_beast_practices` — Express архитектура и service layer
722
+ - `$security_baseline_dev` — NoSQL injection prevention
723
+ - `$testing_strategy_js` — testing strategy
724
+ - `$observability_logging` — structured logging