claude-autopm 2.8.2 → 2.8.4

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 (391) hide show
  1. package/README.md +399 -637
  2. package/install/install.js +15 -5
  3. package/package.json +2 -1
  4. package/packages/plugin-ai/LICENSE +21 -0
  5. package/packages/plugin-ai/README.md +316 -0
  6. package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
  7. package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
  8. package/packages/plugin-ai/agents/gemini-api-expert.md +880 -0
  9. package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
  10. package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
  11. package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
  12. package/packages/plugin-ai/agents/langgraph-workflow-expert.md +520 -0
  13. package/packages/plugin-ai/agents/openai-python-expert.md +1087 -0
  14. package/packages/plugin-ai/commands/a2a-setup.md +886 -0
  15. package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
  16. package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
  17. package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
  18. package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
  19. package/packages/plugin-ai/commands/llm-optimize.md +348 -0
  20. package/packages/plugin-ai/commands/openai-optimize.md +863 -0
  21. package/packages/plugin-ai/commands/rag-optimize.md +841 -0
  22. package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
  23. package/packages/plugin-ai/package.json +66 -0
  24. package/packages/plugin-ai/plugin.json +519 -0
  25. package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
  26. package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
  27. package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
  28. package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
  29. package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
  30. package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
  31. package/packages/plugin-cloud/README.md +268 -0
  32. package/packages/plugin-cloud/agents/README.md +55 -0
  33. package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
  34. package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
  35. package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
  36. package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
  37. package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
  38. package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
  39. package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
  40. package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -0
  41. package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
  42. package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
  43. package/packages/plugin-cloud/commands/infra-deploy.md +38 -0
  44. package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
  45. package/packages/plugin-cloud/commands/ssh-security.md +65 -0
  46. package/packages/plugin-cloud/commands/traefik-setup.md +65 -0
  47. package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
  48. package/packages/plugin-cloud/package.json +64 -0
  49. package/packages/plugin-cloud/plugin.json +338 -0
  50. package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
  51. package/packages/plugin-cloud/rules/infrastructure-pipeline.md +128 -0
  52. package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
  53. package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
  54. package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
  55. package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
  56. package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
  57. package/packages/plugin-core/README.md +274 -0
  58. package/packages/plugin-core/agents/core/agent-manager.md +296 -0
  59. package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
  60. package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
  61. package/packages/plugin-core/agents/core/test-runner.md +200 -0
  62. package/packages/plugin-core/commands/code-rabbit.md +128 -0
  63. package/packages/plugin-core/commands/prompt.md +9 -0
  64. package/packages/plugin-core/commands/re-init.md +9 -0
  65. package/packages/plugin-core/hooks/context7-reminder.md +29 -0
  66. package/packages/plugin-core/hooks/enforce-agents.js +125 -0
  67. package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
  68. package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
  69. package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
  70. package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
  71. package/packages/plugin-core/hooks/test-hook.sh +21 -0
  72. package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
  73. package/packages/plugin-core/package.json +45 -0
  74. package/packages/plugin-core/plugin.json +387 -0
  75. package/packages/plugin-core/rules/agent-coordination.md +549 -0
  76. package/packages/plugin-core/rules/agent-mandatory.md +170 -0
  77. package/packages/plugin-core/rules/ai-integration-patterns.md +219 -0
  78. package/packages/plugin-core/rules/command-pipelines.md +208 -0
  79. package/packages/plugin-core/rules/context-optimization.md +176 -0
  80. package/packages/plugin-core/rules/context7-enforcement.md +327 -0
  81. package/packages/plugin-core/rules/datetime.md +122 -0
  82. package/packages/plugin-core/rules/definition-of-done.md +272 -0
  83. package/packages/plugin-core/rules/development-environments.md +19 -0
  84. package/packages/plugin-core/rules/development-workflow.md +198 -0
  85. package/packages/plugin-core/rules/framework-path-rules.md +180 -0
  86. package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
  87. package/packages/plugin-core/rules/git-strategy.md +237 -0
  88. package/packages/plugin-core/rules/golden-rules.md +181 -0
  89. package/packages/plugin-core/rules/naming-conventions.md +111 -0
  90. package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
  91. package/packages/plugin-core/rules/performance-guidelines.md +403 -0
  92. package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
  93. package/packages/plugin-core/rules/security-checklist.md +318 -0
  94. package/packages/plugin-core/rules/standard-patterns.md +197 -0
  95. package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
  96. package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
  97. package/packages/plugin-core/rules/use-ast-grep.md +113 -0
  98. package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
  99. package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
  100. package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
  101. package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
  102. package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
  103. package/packages/plugin-core/scripts/mcp/add.sh +7 -0
  104. package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
  105. package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
  106. package/packages/plugin-core/scripts/mcp/list.sh +7 -0
  107. package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
  108. package/packages/plugin-data/README.md +315 -0
  109. package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
  110. package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
  111. package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
  112. package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
  113. package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
  114. package/packages/plugin-data/package.json +66 -0
  115. package/packages/plugin-data/plugin.json +294 -0
  116. package/packages/plugin-data/rules/data-quality-standards.md +373 -0
  117. package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
  118. package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
  119. package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
  120. package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
  121. package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
  122. package/packages/plugin-databases/README.md +330 -0
  123. package/packages/plugin-databases/agents/README.md +50 -0
  124. package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
  125. package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
  126. package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
  127. package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
  128. package/packages/plugin-databases/agents/redis-expert.md +74 -0
  129. package/packages/plugin-databases/commands/db-optimize.md +612 -0
  130. package/packages/plugin-databases/package.json +60 -0
  131. package/packages/plugin-databases/plugin.json +237 -0
  132. package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
  133. package/packages/plugin-databases/rules/database-pipeline.md +316 -0
  134. package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
  135. package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
  136. package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
  137. package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
  138. package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
  139. package/packages/plugin-devops/README.md +367 -0
  140. package/packages/plugin-devops/agents/README.md +52 -0
  141. package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
  142. package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
  143. package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
  144. package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
  145. package/packages/plugin-devops/agents/observability-engineer.md +574 -0
  146. package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
  147. package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
  148. package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
  149. package/packages/plugin-devops/commands/docker-optimize.md +493 -0
  150. package/packages/plugin-devops/commands/workflow-create.md +42 -0
  151. package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
  152. package/packages/plugin-devops/package.json +61 -0
  153. package/packages/plugin-devops/plugin.json +302 -0
  154. package/packages/plugin-devops/rules/ci-cd-kubernetes-strategy.md +25 -0
  155. package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
  156. package/packages/plugin-devops/rules/docker-first-development.md +404 -0
  157. package/packages/plugin-devops/rules/github-operations.md +92 -0
  158. package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
  159. package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
  160. package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
  161. package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
  162. package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
  163. package/packages/plugin-frameworks/README.md +309 -0
  164. package/packages/plugin-frameworks/agents/README.md +64 -0
  165. package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
  166. package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
  167. package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
  168. package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
  169. package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
  170. package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
  171. package/packages/plugin-frameworks/commands/app-scaffold.md +50 -0
  172. package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
  173. package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
  174. package/packages/plugin-frameworks/commands/tailwind-system.md +64 -0
  175. package/packages/plugin-frameworks/package.json +59 -0
  176. package/packages/plugin-frameworks/plugin.json +224 -0
  177. package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
  178. package/packages/plugin-frameworks/rules/ui-development-standards.md +281 -0
  179. package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -0
  180. package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
  181. package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
  182. package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
  183. package/packages/plugin-languages/README.md +333 -0
  184. package/packages/plugin-languages/agents/README.md +50 -0
  185. package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
  186. package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
  187. package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
  188. package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
  189. package/packages/plugin-languages/agents/python-backend-expert.md +289 -0
  190. package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
  191. package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
  192. package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
  193. package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
  194. package/packages/plugin-languages/commands/python-optimize.md +593 -0
  195. package/packages/plugin-languages/package.json +65 -0
  196. package/packages/plugin-languages/plugin.json +265 -0
  197. package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
  198. package/packages/plugin-languages/rules/testing-standards.md +768 -0
  199. package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
  200. package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
  201. package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
  202. package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
  203. package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
  204. package/packages/plugin-ml/README.md +430 -0
  205. package/packages/plugin-ml/agents/automl-expert.md +326 -0
  206. package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
  207. package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
  208. package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
  209. package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
  210. package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
  211. package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
  212. package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
  213. package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
  214. package/packages/plugin-ml/agents/time-series-expert.md +303 -0
  215. package/packages/plugin-ml/commands/ml-automl.md +572 -0
  216. package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
  217. package/packages/plugin-ml/package.json +52 -0
  218. package/packages/plugin-ml/plugin.json +338 -0
  219. package/packages/plugin-pm/README.md +368 -0
  220. package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
  221. package/packages/plugin-pm/commands/azure/COMMANDS.md +107 -0
  222. package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
  223. package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
  224. package/packages/plugin-pm/commands/azure/README.md +246 -0
  225. package/packages/plugin-pm/commands/azure/active-work.md +198 -0
  226. package/packages/plugin-pm/commands/azure/aliases.md +143 -0
  227. package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
  228. package/packages/plugin-pm/commands/azure/clean.md +93 -0
  229. package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
  230. package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
  231. package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
  232. package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
  233. package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
  234. package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
  235. package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
  236. package/packages/plugin-pm/commands/azure/help.md +150 -0
  237. package/packages/plugin-pm/commands/azure/import-us.md +269 -0
  238. package/packages/plugin-pm/commands/azure/init.md +211 -0
  239. package/packages/plugin-pm/commands/azure/next-task.md +262 -0
  240. package/packages/plugin-pm/commands/azure/search.md +160 -0
  241. package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
  242. package/packages/plugin-pm/commands/azure/standup.md +260 -0
  243. package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
  244. package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
  245. package/packages/plugin-pm/commands/azure/task-close.md +329 -0
  246. package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
  247. package/packages/plugin-pm/commands/azure/task-list.md +263 -0
  248. package/packages/plugin-pm/commands/azure/task-new.md +84 -0
  249. package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
  250. package/packages/plugin-pm/commands/azure/task-show.md +126 -0
  251. package/packages/plugin-pm/commands/azure/task-start.md +301 -0
  252. package/packages/plugin-pm/commands/azure/task-status.md +65 -0
  253. package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
  254. package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
  255. package/packages/plugin-pm/commands/azure/us-list.md +202 -0
  256. package/packages/plugin-pm/commands/azure/us-new.md +265 -0
  257. package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
  258. package/packages/plugin-pm/commands/azure/us-show.md +188 -0
  259. package/packages/plugin-pm/commands/azure/us-status.md +320 -0
  260. package/packages/plugin-pm/commands/azure/validate.md +86 -0
  261. package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
  262. package/packages/plugin-pm/commands/blocked.md +28 -0
  263. package/packages/plugin-pm/commands/clean.md +119 -0
  264. package/packages/plugin-pm/commands/context-create.md +136 -0
  265. package/packages/plugin-pm/commands/context-prime.md +170 -0
  266. package/packages/plugin-pm/commands/context-update.md +292 -0
  267. package/packages/plugin-pm/commands/context.md +28 -0
  268. package/packages/plugin-pm/commands/epic-close.md +86 -0
  269. package/packages/plugin-pm/commands/epic-decompose.md +370 -0
  270. package/packages/plugin-pm/commands/epic-edit.md +83 -0
  271. package/packages/plugin-pm/commands/epic-list.md +30 -0
  272. package/packages/plugin-pm/commands/epic-merge.md +222 -0
  273. package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
  274. package/packages/plugin-pm/commands/epic-refresh.md +119 -0
  275. package/packages/plugin-pm/commands/epic-show.md +28 -0
  276. package/packages/plugin-pm/commands/epic-split.md +120 -0
  277. package/packages/plugin-pm/commands/epic-start.md +195 -0
  278. package/packages/plugin-pm/commands/epic-status.md +28 -0
  279. package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
  280. package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
  281. package/packages/plugin-pm/commands/epic-sync.md +486 -0
  282. package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
  283. package/packages/plugin-pm/commands/help.md +28 -0
  284. package/packages/plugin-pm/commands/import.md +115 -0
  285. package/packages/plugin-pm/commands/in-progress.md +28 -0
  286. package/packages/plugin-pm/commands/init.md +28 -0
  287. package/packages/plugin-pm/commands/issue-analyze.md +202 -0
  288. package/packages/plugin-pm/commands/issue-close.md +119 -0
  289. package/packages/plugin-pm/commands/issue-edit.md +93 -0
  290. package/packages/plugin-pm/commands/issue-reopen.md +87 -0
  291. package/packages/plugin-pm/commands/issue-show.md +41 -0
  292. package/packages/plugin-pm/commands/issue-start.md +234 -0
  293. package/packages/plugin-pm/commands/issue-status.md +95 -0
  294. package/packages/plugin-pm/commands/issue-sync.md +411 -0
  295. package/packages/plugin-pm/commands/next.md +28 -0
  296. package/packages/plugin-pm/commands/prd-edit.md +82 -0
  297. package/packages/plugin-pm/commands/prd-list.md +28 -0
  298. package/packages/plugin-pm/commands/prd-new.md +55 -0
  299. package/packages/plugin-pm/commands/prd-parse.md +42 -0
  300. package/packages/plugin-pm/commands/prd-status.md +28 -0
  301. package/packages/plugin-pm/commands/search.md +28 -0
  302. package/packages/plugin-pm/commands/standup.md +28 -0
  303. package/packages/plugin-pm/commands/status.md +28 -0
  304. package/packages/plugin-pm/commands/sync.md +99 -0
  305. package/packages/plugin-pm/commands/test-reference-update.md +151 -0
  306. package/packages/plugin-pm/commands/validate.md +28 -0
  307. package/packages/plugin-pm/commands/what-next.md +28 -0
  308. package/packages/plugin-pm/package.json +57 -0
  309. package/packages/plugin-pm/plugin.json +503 -0
  310. package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
  311. package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
  312. package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
  313. package/packages/plugin-pm/scripts/pm/clean.js +464 -0
  314. package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
  315. package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
  316. package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
  317. package/packages/plugin-pm/scripts/pm/context.js +338 -0
  318. package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
  319. package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
  320. package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
  321. package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
  322. package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
  323. package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
  324. package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
  325. package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
  326. package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
  327. package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
  328. package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
  329. package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
  330. package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
  331. package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
  332. package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
  333. package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
  334. package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
  335. package/packages/plugin-pm/scripts/pm/help.js +92 -0
  336. package/packages/plugin-pm/scripts/pm/help.sh +90 -0
  337. package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
  338. package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
  339. package/packages/plugin-pm/scripts/pm/init.js +321 -0
  340. package/packages/plugin-pm/scripts/pm/init.sh +178 -0
  341. package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
  342. package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
  343. package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
  344. package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
  345. package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
  346. package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
  347. package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
  348. package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
  349. package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
  350. package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
  351. package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
  352. package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
  353. package/packages/plugin-pm/scripts/pm/next.js +189 -0
  354. package/packages/plugin-pm/scripts/pm/next.sh +72 -0
  355. package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
  356. package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
  357. package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
  358. package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
  359. package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
  360. package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
  361. package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
  362. package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
  363. package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
  364. package/packages/plugin-pm/scripts/pm/release.js +460 -0
  365. package/packages/plugin-pm/scripts/pm/search.js +192 -0
  366. package/packages/plugin-pm/scripts/pm/search.sh +89 -0
  367. package/packages/plugin-pm/scripts/pm/standup.js +362 -0
  368. package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
  369. package/packages/plugin-pm/scripts/pm/status.js +148 -0
  370. package/packages/plugin-pm/scripts/pm/status.sh +59 -0
  371. package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
  372. package/packages/plugin-pm/scripts/pm/sync.js +343 -0
  373. package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
  374. package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
  375. package/packages/plugin-pm/scripts/pm/validate.js +274 -0
  376. package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
  377. package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
  378. package/packages/plugin-testing/README.md +401 -0
  379. package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -0
  380. package/packages/plugin-testing/commands/jest-optimize.md +800 -0
  381. package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
  382. package/packages/plugin-testing/commands/test-coverage.md +512 -0
  383. package/packages/plugin-testing/commands/test-performance.md +1041 -0
  384. package/packages/plugin-testing/commands/test-setup.md +414 -0
  385. package/packages/plugin-testing/package.json +40 -0
  386. package/packages/plugin-testing/plugin.json +197 -0
  387. package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
  388. package/packages/plugin-testing/rules/testing-standards.md +529 -0
  389. package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
  390. package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
  391. package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
@@ -0,0 +1,460 @@
1
+ /**
2
+ * React Testing Library Example
3
+ *
4
+ * Context7-verified patterns from:
5
+ * - /testing-library/react-testing-library
6
+ * - /testing-library/testing-library-docs
7
+ *
8
+ * Demonstrates best practices for testing React components
9
+ * with Vitest and React Testing Library
10
+ */
11
+
12
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
13
+ import { render, screen, within, waitFor, cleanup } from '@testing-library/react';
14
+ import userEvent from '@testing-library/user-event';
15
+ import { rest } from 'msw';
16
+ import { setupServer } from 'msw/node';
17
+
18
+ // ===================================
19
+ // EXAMPLE COMPONENTS TO TEST
20
+ // ===================================
21
+
22
+ function Button({ children, onClick, disabled, loading }) {
23
+ return (
24
+ <button onClick={onClick} disabled={disabled || loading}>
25
+ {loading ? <span role="status">Loading...</span> : children}
26
+ </button>
27
+ );
28
+ }
29
+
30
+ function LoginForm({ onSubmit }) {
31
+ const [email, setEmail] = React.useState('');
32
+ const [password, setPassword] = React.useState('');
33
+ const [error, setError] = React.useState('');
34
+ const [loading, setLoading] = React.useState(false);
35
+
36
+ const handleSubmit = async (e) => {
37
+ e.preventDefault();
38
+ setError('');
39
+
40
+ if (!email || !password) {
41
+ setError('Email and password are required');
42
+ return;
43
+ }
44
+
45
+ setLoading(true);
46
+ try {
47
+ await onSubmit({ email, password });
48
+ } catch (err) {
49
+ setError(err.message);
50
+ } finally {
51
+ setLoading(false);
52
+ }
53
+ };
54
+
55
+ return (
56
+ <form onSubmit={handleSubmit}>
57
+ <div>
58
+ <label htmlFor="email">Email</label>
59
+ <input
60
+ id="email"
61
+ type="email"
62
+ value={email}
63
+ onChange={(e) => setEmail(e.target.value)}
64
+ />
65
+ </div>
66
+
67
+ <div>
68
+ <label htmlFor="password">Password</label>
69
+ <input
70
+ id="password"
71
+ type="password"
72
+ value={password}
73
+ onChange={(e) => setPassword(e.target.value)}
74
+ />
75
+ </div>
76
+
77
+ {error && <div role="alert">{error}</div>}
78
+
79
+ <button type="submit" disabled={loading}>
80
+ {loading ? 'Logging in...' : 'Log in'}
81
+ </button>
82
+ </form>
83
+ );
84
+ }
85
+
86
+ function UserList({ users, onUserClick }) {
87
+ if (!users || users.length === 0) {
88
+ return <p>No users found</p>;
89
+ }
90
+
91
+ return (
92
+ <ul>
93
+ {users.map((user) => (
94
+ <li key={user.id}>
95
+ <button onClick={() => onUserClick(user)}>
96
+ {user.name}
97
+ </button>
98
+ </li>
99
+ ))}
100
+ </ul>
101
+ );
102
+ }
103
+
104
+ // ===================================
105
+ // MSW SERVER SETUP (API MOCKING)
106
+ // ===================================
107
+
108
+ const server = setupServer(
109
+ rest.get('/api/users', (req, res, ctx) => {
110
+ return res(
111
+ ctx.json([
112
+ { id: 1, name: 'John Doe' },
113
+ { id: 2, name: 'Jane Smith' }
114
+ ])
115
+ );
116
+ }),
117
+
118
+ rest.post('/api/login', (req, res, ctx) => {
119
+ const { email, password } = req.body;
120
+
121
+ if (email === 'test@example.com' && password === 'password') {
122
+ return res(ctx.json({ token: 'fake-jwt-token' }));
123
+ }
124
+
125
+ return res(
126
+ ctx.status(401),
127
+ ctx.json({ message: 'Invalid credentials' })
128
+ );
129
+ })
130
+ );
131
+
132
+ // Setup/teardown
133
+ beforeAll(() => server.listen());
134
+ afterEach(() => {
135
+ server.resetHandlers();
136
+ cleanup();
137
+ });
138
+ afterAll(() => server.close());
139
+
140
+ // ===================================
141
+ // TEST SUITE 1: BASIC BUTTON
142
+ // ===================================
143
+
144
+ describe('Button Component', () => {
145
+ // ✅ CORRECT: Query by role (accessible)
146
+ it('should render with text', () => {
147
+ render(<Button>Click me</Button>);
148
+
149
+ // Use getByRole for accessibility
150
+ expect(screen.getByRole('button', { name: 'Click me' })).toBeInTheDocument();
151
+ });
152
+
153
+ // ✅ CORRECT: Test user interactions
154
+ it('should call onClick when clicked', async () => {
155
+ const user = userEvent.setup();
156
+ const handleClick = vi.fn();
157
+
158
+ render(<Button onClick={handleClick}>Click me</Button>);
159
+
160
+ await user.click(screen.getByRole('button'));
161
+
162
+ expect(handleClick).toHaveBeenCalledTimes(1);
163
+ });
164
+
165
+ // ✅ CORRECT: Test disabled state
166
+ it('should be disabled when disabled prop is true', () => {
167
+ render(<Button disabled>Submit</Button>);
168
+
169
+ expect(screen.getByRole('button')).toBeDisabled();
170
+ });
171
+
172
+ // ✅ CORRECT: Test loading state
173
+ it('should show loading state', () => {
174
+ render(<Button loading>Submit</Button>);
175
+
176
+ // Check for loading indicator
177
+ expect(screen.getByRole('status')).toBeInTheDocument();
178
+ expect(screen.getByText('Loading...')).toBeInTheDocument();
179
+
180
+ // Button should be disabled while loading
181
+ expect(screen.getByRole('button')).toBeDisabled();
182
+ });
183
+ });
184
+
185
+ // ===================================
186
+ // TEST SUITE 2: LOGIN FORM (AAA PATTERN)
187
+ // ===================================
188
+
189
+ describe('LoginForm Component', () => {
190
+ // ✅ CORRECT: AAA Pattern (Arrange-Act-Assert)
191
+ it('should submit form with valid credentials', async () => {
192
+ // ARRANGE: Setup test data and spies
193
+ const user = userEvent.setup();
194
+ const handleSubmit = vi.fn().mockResolvedValue();
195
+
196
+ render(<LoginForm onSubmit={handleSubmit} />);
197
+
198
+ // ACT: Perform user actions
199
+ // ✅ Use getByLabelText for form fields
200
+ await user.type(screen.getByLabelText('Email'), 'test@example.com');
201
+ await user.type(screen.getByLabelText('Password'), 'password123');
202
+ await user.click(screen.getByRole('button', { name: 'Log in' }));
203
+
204
+ // ASSERT: Verify expected outcome
205
+ expect(handleSubmit).toHaveBeenCalledWith({
206
+ email: 'test@example.com',
207
+ password: 'password123'
208
+ });
209
+ });
210
+
211
+ // ✅ CORRECT: Test validation
212
+ it('should show error when fields are empty', async () => {
213
+ const user = userEvent.setup();
214
+ const handleSubmit = vi.fn();
215
+
216
+ render(<LoginForm onSubmit={handleSubmit} />);
217
+
218
+ // Submit without filling fields
219
+ await user.click(screen.getByRole('button', { name: 'Log in' }));
220
+
221
+ // Check for error message
222
+ expect(screen.getByRole('alert')).toHaveTextContent(
223
+ 'Email and password are required'
224
+ );
225
+
226
+ // Form should not submit
227
+ expect(handleSubmit).not.toHaveBeenCalled();
228
+ });
229
+
230
+ // ✅ CORRECT: Test async error handling
231
+ it('should display error message on failed submission', async () => {
232
+ const user = userEvent.setup();
233
+ const handleSubmit = vi.fn().mockRejectedValue(
234
+ new Error('Invalid credentials')
235
+ );
236
+
237
+ render(<LoginForm onSubmit={handleSubmit} />);
238
+
239
+ await user.type(screen.getByLabelText('Email'), 'wrong@example.com');
240
+ await user.type(screen.getByLabelText('Password'), 'wrongpass');
241
+ await user.click(screen.getByRole('button', { name: 'Log in' }));
242
+
243
+ // ✅ Use waitFor for async state changes
244
+ await waitFor(() => {
245
+ expect(screen.getByRole('alert')).toHaveTextContent('Invalid credentials');
246
+ });
247
+ });
248
+
249
+ // ✅ CORRECT: Test loading state during submission
250
+ it('should show loading state while submitting', async () => {
251
+ const user = userEvent.setup();
252
+ let resolveSubmit;
253
+ const handleSubmit = vi.fn(
254
+ () => new Promise((resolve) => {
255
+ resolveSubmit = resolve;
256
+ })
257
+ );
258
+
259
+ render(<LoginForm onSubmit={handleSubmit} />);
260
+
261
+ await user.type(screen.getByLabelText('Email'), 'test@example.com');
262
+ await user.type(screen.getByLabelText('Password'), 'password');
263
+
264
+ // Click submit button
265
+ await user.click(screen.getByRole('button', { name: 'Log in' }));
266
+
267
+ // Check loading state
268
+ expect(screen.getByRole('button')).toHaveTextContent('Logging in...');
269
+ expect(screen.getByRole('button')).toBeDisabled();
270
+
271
+ // Resolve the submission
272
+ resolveSubmit();
273
+
274
+ // Wait for loading to complete
275
+ await waitFor(() => {
276
+ expect(screen.getByRole('button')).toHaveTextContent('Log in');
277
+ });
278
+ });
279
+ });
280
+
281
+ // ===================================
282
+ // TEST SUITE 3: USER LIST (CONTEXT QUERIES)
283
+ // ===================================
284
+
285
+ describe('UserList Component', () => {
286
+ const mockUsers = [
287
+ { id: 1, name: 'John Doe' },
288
+ { id: 2, name: 'Jane Smith' },
289
+ { id: 3, name: 'Bob Johnson' }
290
+ ];
291
+
292
+ // ✅ CORRECT: Test rendering list
293
+ it('should render all users', () => {
294
+ render(<UserList users={mockUsers} />);
295
+
296
+ // Check each user is rendered
297
+ expect(screen.getByRole('button', { name: 'John Doe' })).toBeInTheDocument();
298
+ expect(screen.getByRole('button', { name: 'Jane Smith' })).toBeInTheDocument();
299
+ expect(screen.getByRole('button', { name: 'Bob Johnson' })).toBeInTheDocument();
300
+ });
301
+
302
+ // ✅ CORRECT: Test empty state
303
+ it('should show "No users" message when list is empty', () => {
304
+ render(<UserList users={[]} />);
305
+
306
+ expect(screen.getByText('No users found')).toBeInTheDocument();
307
+ });
308
+
309
+ // ✅ CORRECT: Test user interaction with specific item
310
+ it('should call onUserClick with correct user', async () => {
311
+ const user = userEvent.setup();
312
+ const handleUserClick = vi.fn();
313
+
314
+ render(<UserList users={mockUsers} onUserClick={handleUserClick} />);
315
+
316
+ // Click on Jane Smith
317
+ await user.click(screen.getByRole('button', { name: 'Jane Smith' }));
318
+
319
+ expect(handleUserClick).toHaveBeenCalledWith({
320
+ id: 2,
321
+ name: 'Jane Smith'
322
+ });
323
+ });
324
+
325
+ // ✅ CORRECT: Using within() for scoped queries
326
+ it('should render users in list items', () => {
327
+ render(<UserList users={mockUsers} />);
328
+
329
+ const list = screen.getByRole('list');
330
+ const items = within(list).getAllByRole('listitem');
331
+
332
+ expect(items).toHaveLength(3);
333
+
334
+ // Query within specific list item
335
+ const firstItem = items[0];
336
+ expect(within(firstItem).getByRole('button')).toHaveTextContent('John Doe');
337
+ });
338
+ });
339
+
340
+ // ===================================
341
+ // TEST SUITE 4: ASYNC DATA FETCHING
342
+ // ===================================
343
+
344
+ function AsyncUserList() {
345
+ const [users, setUsers] = React.useState([]);
346
+ const [loading, setLoading] = React.useState(true);
347
+ const [error, setError] = React.useState(null);
348
+
349
+ React.useEffect(() => {
350
+ fetch('/api/users')
351
+ .then((res) => res.json())
352
+ .then((data) => {
353
+ setUsers(data);
354
+ setLoading(false);
355
+ })
356
+ .catch((err) => {
357
+ setError(err.message);
358
+ setLoading(false);
359
+ });
360
+ }, []);
361
+
362
+ if (loading) return <div>Loading...</div>;
363
+ if (error) return <div role="alert">Error: {error}</div>;
364
+
365
+ return <UserList users={users} />;
366
+ }
367
+
368
+ describe('AsyncUserList Component', () => {
369
+ // ✅ CORRECT: Test loading state
370
+ it('should show loading state initially', () => {
371
+ render(<AsyncUserList />);
372
+
373
+ expect(screen.getByText('Loading...')).toBeInTheDocument();
374
+ });
375
+
376
+ // ✅ CORRECT: Test successful data fetch (findBy for async)
377
+ it('should display users after successful fetch', async () => {
378
+ render(<AsyncUserList />);
379
+
380
+ // ✅ findBy* automatically waits for element
381
+ expect(await screen.findByRole('button', { name: 'John Doe' })).toBeInTheDocument();
382
+ expect(screen.getByRole('button', { name: 'Jane Smith' })).toBeInTheDocument();
383
+
384
+ // Loading should be gone
385
+ expect(screen.queryByText('Loading...')).not.toBeInTheDocument();
386
+ });
387
+
388
+ // ✅ CORRECT: Test error handling
389
+ it('should display error message on fetch failure', async () => {
390
+ // Override MSW handler for this test
391
+ server.use(
392
+ rest.get('/api/users', (req, res, ctx) => {
393
+ return res(ctx.status(500), ctx.json({ message: 'Server error' }));
394
+ })
395
+ );
396
+
397
+ render(<AsyncUserList />);
398
+
399
+ // Wait for error message
400
+ expect(await screen.findByRole('alert')).toHaveTextContent('Error:');
401
+ });
402
+ });
403
+
404
+ // ===================================
405
+ // BEST PRACTICES DEMONSTRATED
406
+ // ===================================
407
+
408
+ /**
409
+ * ✅ QUERY PRIORITY (Context7-verified):
410
+ * 1. getByRole (accessible)
411
+ * 2. getByLabelText (forms)
412
+ * 3. getByText (visible text)
413
+ * 4. getByTestId (last resort)
414
+ *
415
+ * ✅ ASYNC UTILITIES:
416
+ * - findBy* (waits and retries)
417
+ * - waitFor() (complex conditions)
418
+ * - Never use setTimeout()
419
+ *
420
+ * ✅ USER-CENTRIC:
421
+ * - Test behavior, not implementation
422
+ * - Use userEvent over fireEvent
423
+ * - Avoid accessing component state
424
+ *
425
+ * ✅ AAA PATTERN:
426
+ * - Arrange (setup)
427
+ * - Act (user interaction)
428
+ * - Assert (verify outcome)
429
+ *
430
+ * ✅ TEST INDEPENDENCE:
431
+ * - beforeEach for clean state
432
+ * - cleanup after each test
433
+ * - No shared mutable state
434
+ *
435
+ * ✅ ACCESSIBILITY:
436
+ * - Use semantic queries
437
+ * - Check ARIA roles
438
+ * - Test keyboard navigation
439
+ */
440
+
441
+ /**
442
+ * ❌ ANTI-PATTERNS TO AVOID:
443
+ *
444
+ * ❌ Don't use CSS selectors:
445
+ * container.querySelector('.button')
446
+ *
447
+ * ❌ Don't use manual delays:
448
+ * await new Promise(r => setTimeout(r, 1000))
449
+ *
450
+ * ❌ Don't test implementation:
451
+ * wrapper.state().count
452
+ *
453
+ * ❌ Don't depend on test order:
454
+ * let sharedData = null;
455
+ * test('1', () => { sharedData = 'x'; });
456
+ * test('2', () => { expect(sharedData).toBe('x'); });
457
+ *
458
+ * ❌ Don't use wrapper methods:
459
+ * wrapper.find('button').simulate('click')
460
+ */