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.
- package/README.md +399 -637
- package/install/install.js +15 -5
- package/package.json +2 -1
- package/packages/plugin-ai/LICENSE +21 -0
- package/packages/plugin-ai/README.md +316 -0
- package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
- package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
- package/packages/plugin-ai/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
- package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
- package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
- package/packages/plugin-ai/agents/langgraph-workflow-expert.md +520 -0
- package/packages/plugin-ai/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-ai/commands/a2a-setup.md +886 -0
- package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
- package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
- package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
- package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
- package/packages/plugin-ai/commands/llm-optimize.md +348 -0
- package/packages/plugin-ai/commands/openai-optimize.md +863 -0
- package/packages/plugin-ai/commands/rag-optimize.md +841 -0
- package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
- package/packages/plugin-ai/package.json +66 -0
- package/packages/plugin-ai/plugin.json +519 -0
- package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
- package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
- package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
- package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
- package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
- package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
- package/packages/plugin-cloud/README.md +268 -0
- package/packages/plugin-cloud/agents/README.md +55 -0
- package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
- package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
- package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
- package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
- package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -0
- package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
- package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
- package/packages/plugin-cloud/commands/infra-deploy.md +38 -0
- package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
- package/packages/plugin-cloud/commands/ssh-security.md +65 -0
- package/packages/plugin-cloud/commands/traefik-setup.md +65 -0
- package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
- package/packages/plugin-cloud/package.json +64 -0
- package/packages/plugin-cloud/plugin.json +338 -0
- package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
- package/packages/plugin-cloud/rules/infrastructure-pipeline.md +128 -0
- package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
- package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
- package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
- package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
- package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
- package/packages/plugin-core/README.md +274 -0
- package/packages/plugin-core/agents/core/agent-manager.md +296 -0
- package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
- package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
- package/packages/plugin-core/agents/core/test-runner.md +200 -0
- package/packages/plugin-core/commands/code-rabbit.md +128 -0
- package/packages/plugin-core/commands/prompt.md +9 -0
- package/packages/plugin-core/commands/re-init.md +9 -0
- package/packages/plugin-core/hooks/context7-reminder.md +29 -0
- package/packages/plugin-core/hooks/enforce-agents.js +125 -0
- package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
- package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
- package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
- package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
- package/packages/plugin-core/hooks/test-hook.sh +21 -0
- package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
- package/packages/plugin-core/package.json +45 -0
- package/packages/plugin-core/plugin.json +387 -0
- package/packages/plugin-core/rules/agent-coordination.md +549 -0
- package/packages/plugin-core/rules/agent-mandatory.md +170 -0
- package/packages/plugin-core/rules/ai-integration-patterns.md +219 -0
- package/packages/plugin-core/rules/command-pipelines.md +208 -0
- package/packages/plugin-core/rules/context-optimization.md +176 -0
- package/packages/plugin-core/rules/context7-enforcement.md +327 -0
- package/packages/plugin-core/rules/datetime.md +122 -0
- package/packages/plugin-core/rules/definition-of-done.md +272 -0
- package/packages/plugin-core/rules/development-environments.md +19 -0
- package/packages/plugin-core/rules/development-workflow.md +198 -0
- package/packages/plugin-core/rules/framework-path-rules.md +180 -0
- package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
- package/packages/plugin-core/rules/git-strategy.md +237 -0
- package/packages/plugin-core/rules/golden-rules.md +181 -0
- package/packages/plugin-core/rules/naming-conventions.md +111 -0
- package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
- package/packages/plugin-core/rules/performance-guidelines.md +403 -0
- package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
- package/packages/plugin-core/rules/security-checklist.md +318 -0
- package/packages/plugin-core/rules/standard-patterns.md +197 -0
- package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
- package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
- package/packages/plugin-core/rules/use-ast-grep.md +113 -0
- package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
- package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
- package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
- package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
- package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
- package/packages/plugin-core/scripts/mcp/add.sh +7 -0
- package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/list.sh +7 -0
- package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
- package/packages/plugin-data/README.md +315 -0
- package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
- package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
- package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
- package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
- package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
- package/packages/plugin-data/package.json +66 -0
- package/packages/plugin-data/plugin.json +294 -0
- package/packages/plugin-data/rules/data-quality-standards.md +373 -0
- package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
- package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
- package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
- package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
- package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
- package/packages/plugin-databases/README.md +330 -0
- package/packages/plugin-databases/agents/README.md +50 -0
- package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
- package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
- package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
- package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
- package/packages/plugin-databases/agents/redis-expert.md +74 -0
- package/packages/plugin-databases/commands/db-optimize.md +612 -0
- package/packages/plugin-databases/package.json +60 -0
- package/packages/plugin-databases/plugin.json +237 -0
- package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
- package/packages/plugin-databases/rules/database-pipeline.md +316 -0
- package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
- package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
- package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
- package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
- package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
- package/packages/plugin-devops/README.md +367 -0
- package/packages/plugin-devops/agents/README.md +52 -0
- package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
- package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
- package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
- package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
- package/packages/plugin-devops/agents/observability-engineer.md +574 -0
- package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
- package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
- package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
- package/packages/plugin-devops/commands/docker-optimize.md +493 -0
- package/packages/plugin-devops/commands/workflow-create.md +42 -0
- package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
- package/packages/plugin-devops/package.json +61 -0
- package/packages/plugin-devops/plugin.json +302 -0
- package/packages/plugin-devops/rules/ci-cd-kubernetes-strategy.md +25 -0
- package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
- package/packages/plugin-devops/rules/docker-first-development.md +404 -0
- package/packages/plugin-devops/rules/github-operations.md +92 -0
- package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
- package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
- package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
- package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
- package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
- package/packages/plugin-frameworks/README.md +309 -0
- package/packages/plugin-frameworks/agents/README.md +64 -0
- package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
- package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
- package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
- package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
- package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
- package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
- package/packages/plugin-frameworks/commands/app-scaffold.md +50 -0
- package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
- package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
- package/packages/plugin-frameworks/commands/tailwind-system.md +64 -0
- package/packages/plugin-frameworks/package.json +59 -0
- package/packages/plugin-frameworks/plugin.json +224 -0
- package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
- package/packages/plugin-frameworks/rules/ui-development-standards.md +281 -0
- package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -0
- package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
- package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
- package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
- package/packages/plugin-languages/README.md +333 -0
- package/packages/plugin-languages/agents/README.md +50 -0
- package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
- package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
- package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
- package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
- package/packages/plugin-languages/agents/python-backend-expert.md +289 -0
- package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
- package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
- package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
- package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
- package/packages/plugin-languages/commands/python-optimize.md +593 -0
- package/packages/plugin-languages/package.json +65 -0
- package/packages/plugin-languages/plugin.json +265 -0
- package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
- package/packages/plugin-languages/rules/testing-standards.md +768 -0
- package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
- package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
- package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
- package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
- package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
- package/packages/plugin-ml/README.md +430 -0
- package/packages/plugin-ml/agents/automl-expert.md +326 -0
- package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
- package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
- package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
- package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
- package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
- package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
- package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
- package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
- package/packages/plugin-ml/agents/time-series-expert.md +303 -0
- package/packages/plugin-ml/commands/ml-automl.md +572 -0
- package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
- package/packages/plugin-ml/package.json +52 -0
- package/packages/plugin-ml/plugin.json +338 -0
- package/packages/plugin-pm/README.md +368 -0
- package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
- package/packages/plugin-pm/commands/azure/COMMANDS.md +107 -0
- package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
- package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
- package/packages/plugin-pm/commands/azure/README.md +246 -0
- package/packages/plugin-pm/commands/azure/active-work.md +198 -0
- package/packages/plugin-pm/commands/azure/aliases.md +143 -0
- package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
- package/packages/plugin-pm/commands/azure/clean.md +93 -0
- package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
- package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
- package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
- package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
- package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
- package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
- package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
- package/packages/plugin-pm/commands/azure/help.md +150 -0
- package/packages/plugin-pm/commands/azure/import-us.md +269 -0
- package/packages/plugin-pm/commands/azure/init.md +211 -0
- package/packages/plugin-pm/commands/azure/next-task.md +262 -0
- package/packages/plugin-pm/commands/azure/search.md +160 -0
- package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
- package/packages/plugin-pm/commands/azure/standup.md +260 -0
- package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
- package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
- package/packages/plugin-pm/commands/azure/task-close.md +329 -0
- package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
- package/packages/plugin-pm/commands/azure/task-list.md +263 -0
- package/packages/plugin-pm/commands/azure/task-new.md +84 -0
- package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
- package/packages/plugin-pm/commands/azure/task-show.md +126 -0
- package/packages/plugin-pm/commands/azure/task-start.md +301 -0
- package/packages/plugin-pm/commands/azure/task-status.md +65 -0
- package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
- package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
- package/packages/plugin-pm/commands/azure/us-list.md +202 -0
- package/packages/plugin-pm/commands/azure/us-new.md +265 -0
- package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
- package/packages/plugin-pm/commands/azure/us-show.md +188 -0
- package/packages/plugin-pm/commands/azure/us-status.md +320 -0
- package/packages/plugin-pm/commands/azure/validate.md +86 -0
- package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
- package/packages/plugin-pm/commands/blocked.md +28 -0
- package/packages/plugin-pm/commands/clean.md +119 -0
- package/packages/plugin-pm/commands/context-create.md +136 -0
- package/packages/plugin-pm/commands/context-prime.md +170 -0
- package/packages/plugin-pm/commands/context-update.md +292 -0
- package/packages/plugin-pm/commands/context.md +28 -0
- package/packages/plugin-pm/commands/epic-close.md +86 -0
- package/packages/plugin-pm/commands/epic-decompose.md +370 -0
- package/packages/plugin-pm/commands/epic-edit.md +83 -0
- package/packages/plugin-pm/commands/epic-list.md +30 -0
- package/packages/plugin-pm/commands/epic-merge.md +222 -0
- package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
- package/packages/plugin-pm/commands/epic-refresh.md +119 -0
- package/packages/plugin-pm/commands/epic-show.md +28 -0
- package/packages/plugin-pm/commands/epic-split.md +120 -0
- package/packages/plugin-pm/commands/epic-start.md +195 -0
- package/packages/plugin-pm/commands/epic-status.md +28 -0
- package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
- package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
- package/packages/plugin-pm/commands/epic-sync.md +486 -0
- package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
- package/packages/plugin-pm/commands/help.md +28 -0
- package/packages/plugin-pm/commands/import.md +115 -0
- package/packages/plugin-pm/commands/in-progress.md +28 -0
- package/packages/plugin-pm/commands/init.md +28 -0
- package/packages/plugin-pm/commands/issue-analyze.md +202 -0
- package/packages/plugin-pm/commands/issue-close.md +119 -0
- package/packages/plugin-pm/commands/issue-edit.md +93 -0
- package/packages/plugin-pm/commands/issue-reopen.md +87 -0
- package/packages/plugin-pm/commands/issue-show.md +41 -0
- package/packages/plugin-pm/commands/issue-start.md +234 -0
- package/packages/plugin-pm/commands/issue-status.md +95 -0
- package/packages/plugin-pm/commands/issue-sync.md +411 -0
- package/packages/plugin-pm/commands/next.md +28 -0
- package/packages/plugin-pm/commands/prd-edit.md +82 -0
- package/packages/plugin-pm/commands/prd-list.md +28 -0
- package/packages/plugin-pm/commands/prd-new.md +55 -0
- package/packages/plugin-pm/commands/prd-parse.md +42 -0
- package/packages/plugin-pm/commands/prd-status.md +28 -0
- package/packages/plugin-pm/commands/search.md +28 -0
- package/packages/plugin-pm/commands/standup.md +28 -0
- package/packages/plugin-pm/commands/status.md +28 -0
- package/packages/plugin-pm/commands/sync.md +99 -0
- package/packages/plugin-pm/commands/test-reference-update.md +151 -0
- package/packages/plugin-pm/commands/validate.md +28 -0
- package/packages/plugin-pm/commands/what-next.md +28 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
- package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
- package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
- package/packages/plugin-pm/scripts/pm/clean.js +464 -0
- package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
- package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
- package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
- package/packages/plugin-pm/scripts/pm/context.js +338 -0
- package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
- package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
- package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
- package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
- package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
- package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
- package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
- package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
- package/packages/plugin-pm/scripts/pm/help.js +92 -0
- package/packages/plugin-pm/scripts/pm/help.sh +90 -0
- package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
- package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
- package/packages/plugin-pm/scripts/pm/init.js +321 -0
- package/packages/plugin-pm/scripts/pm/init.sh +178 -0
- package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
- package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
- package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
- package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
- package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
- package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
- package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
- package/packages/plugin-pm/scripts/pm/next.js +189 -0
- package/packages/plugin-pm/scripts/pm/next.sh +72 -0
- package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
- package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
- package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
- package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
- package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
- package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
- package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
- package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
- package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
- package/packages/plugin-pm/scripts/pm/release.js +460 -0
- package/packages/plugin-pm/scripts/pm/search.js +192 -0
- package/packages/plugin-pm/scripts/pm/search.sh +89 -0
- package/packages/plugin-pm/scripts/pm/standup.js +362 -0
- package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
- package/packages/plugin-pm/scripts/pm/status.js +148 -0
- package/packages/plugin-pm/scripts/pm/status.sh +59 -0
- package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
- package/packages/plugin-pm/scripts/pm/sync.js +343 -0
- package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
- package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
- package/packages/plugin-pm/scripts/pm/validate.js +274 -0
- package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
- package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
- package/packages/plugin-testing/README.md +401 -0
- package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -0
- package/packages/plugin-testing/commands/jest-optimize.md +800 -0
- package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
- package/packages/plugin-testing/commands/test-coverage.md +512 -0
- package/packages/plugin-testing/commands/test-performance.md +1041 -0
- package/packages/plugin-testing/commands/test-setup.md +414 -0
- package/packages/plugin-testing/package.json +40 -0
- package/packages/plugin-testing/plugin.json +197 -0
- package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
- package/packages/plugin-testing/rules/testing-standards.md +529 -0
- package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
- package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
- package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
|
@@ -0,0 +1,887 @@
|
|
|
1
|
+
# playwright:optimize
|
|
2
|
+
|
|
3
|
+
Optimize Playwright E2E test performance with Context7-verified parallel execution, sharding, and browser configuration.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Comprehensive Playwright performance optimization following official Microsoft best practices:
|
|
8
|
+
- Fully parallel test execution
|
|
9
|
+
- Test sharding across multiple machines
|
|
10
|
+
- Browser context optimization
|
|
11
|
+
- Trace and video recording strategies
|
|
12
|
+
- Network optimization and caching
|
|
13
|
+
- CI/CD pipeline optimization
|
|
14
|
+
|
|
15
|
+
## Required Documentation Access
|
|
16
|
+
|
|
17
|
+
**MANDATORY:** Before optimization, query Context7 for Playwright best practices:
|
|
18
|
+
|
|
19
|
+
**Documentation Queries:**
|
|
20
|
+
- `mcp://context7/playwright/parallel-execution` - Parallel test execution patterns
|
|
21
|
+
- `mcp://context7/playwright/sharding` - Test sharding strategies
|
|
22
|
+
- `mcp://context7/playwright/browser-contexts` - Browser context optimization
|
|
23
|
+
- `mcp://context7/playwright/ci-cd` - CI/CD pipeline optimization
|
|
24
|
+
- `mcp://context7/playwright/performance` - Performance best practices
|
|
25
|
+
|
|
26
|
+
**Why This is Required:**
|
|
27
|
+
- Ensures optimization follows official Microsoft Playwright documentation
|
|
28
|
+
- Applies proven parallel execution patterns
|
|
29
|
+
- Validates sharding strategies for distributed testing
|
|
30
|
+
- Prevents flaky tests and race conditions
|
|
31
|
+
- Optimizes CI/CD resource utilization
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
/playwright:optimize [options]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Options
|
|
40
|
+
|
|
41
|
+
- `--scope <parallel|sharding|browser|traces|all>` - Optimization scope (default: all)
|
|
42
|
+
- `--analyze-only` - Analyze without applying changes
|
|
43
|
+
- `--output <file>` - Write optimization report
|
|
44
|
+
- `--workers <n>` - Set maximum parallel workers
|
|
45
|
+
- `--shard <index/count>` - Configure test sharding
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
### Full E2E Test Optimization
|
|
50
|
+
```bash
|
|
51
|
+
/playwright:optimize
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Parallel Execution Only
|
|
55
|
+
```bash
|
|
56
|
+
/playwright:optimize --scope parallel --workers 4
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Test Sharding for CI/CD
|
|
60
|
+
```bash
|
|
61
|
+
/playwright:optimize --scope sharding --shard 1/3
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Browser Context Optimization
|
|
65
|
+
```bash
|
|
66
|
+
/playwright:optimize --scope browser
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Analyze Without Changes
|
|
70
|
+
```bash
|
|
71
|
+
/playwright:optimize --analyze-only --output playwright-report.md
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Optimization Categories
|
|
75
|
+
|
|
76
|
+
### 1. Fully Parallel Test Execution (Context7-Verified)
|
|
77
|
+
|
|
78
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
79
|
+
|
|
80
|
+
#### Enable Fully Parallel Mode
|
|
81
|
+
```typescript
|
|
82
|
+
// playwright.config.ts
|
|
83
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
84
|
+
|
|
85
|
+
export default defineConfig({
|
|
86
|
+
// Run tests in files in parallel
|
|
87
|
+
fullyParallel: true,
|
|
88
|
+
|
|
89
|
+
// Fail the build on CI if you accidentally left test.only in the source code
|
|
90
|
+
forbidOnly: !!process.env.CI,
|
|
91
|
+
|
|
92
|
+
// Retry on CI only
|
|
93
|
+
retries: process.env.CI ? 2 : 0,
|
|
94
|
+
|
|
95
|
+
// Opt out of parallel tests on CI
|
|
96
|
+
workers: process.env.CI ? 2 : undefined,
|
|
97
|
+
|
|
98
|
+
// Reporter to use
|
|
99
|
+
reporter: 'html',
|
|
100
|
+
|
|
101
|
+
use: {
|
|
102
|
+
// Base URL to use in actions like `await page.goto('/')`
|
|
103
|
+
baseURL: 'http://127.0.0.1:3000',
|
|
104
|
+
|
|
105
|
+
// Collect trace when retrying the failed test
|
|
106
|
+
trace: 'on-first-retry',
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
// Configure projects for major browsers
|
|
110
|
+
projects: [
|
|
111
|
+
{
|
|
112
|
+
name: 'chromium',
|
|
113
|
+
use: { ...devices['Desktop Chrome'] },
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'firefox',
|
|
117
|
+
use: { ...devices['Desktop Firefox'] },
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'webkit',
|
|
121
|
+
use: { ...devices['Desktop Safari'] },
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Benefits:**
|
|
128
|
+
- All test files run in parallel
|
|
129
|
+
- Each test within a file runs in parallel (with proper grouping)
|
|
130
|
+
- Linear speedup with more workers
|
|
131
|
+
|
|
132
|
+
**Performance Impact:**
|
|
133
|
+
- Sequential: 30 minutes
|
|
134
|
+
- Parallel (4 workers): 7.5 minutes (4x faster)
|
|
135
|
+
- Parallel (8 workers): 3.75 minutes (8x faster)
|
|
136
|
+
|
|
137
|
+
#### Parallel Tests Within File
|
|
138
|
+
```typescript
|
|
139
|
+
import { test, expect } from '@playwright/test';
|
|
140
|
+
|
|
141
|
+
// Enable parallel mode for all tests in this file
|
|
142
|
+
test.describe.configure({ mode: 'parallel' });
|
|
143
|
+
|
|
144
|
+
test.describe('Feature A', () => {
|
|
145
|
+
test('test 1', async ({ page }) => {
|
|
146
|
+
await page.goto('/feature-a');
|
|
147
|
+
await expect(page.locator('h1')).toHaveText('Feature A');
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
test('test 2', async ({ page }) => {
|
|
151
|
+
await page.goto('/feature-a/detail');
|
|
152
|
+
await expect(page.locator('h2')).toHaveText('Details');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Benefits:**
|
|
158
|
+
- Tests in same file run concurrently
|
|
159
|
+
- Each test gets isolated browser context
|
|
160
|
+
- No shared state between tests
|
|
161
|
+
|
|
162
|
+
**Performance Impact:** 2-3x faster when tests have I/O waits
|
|
163
|
+
|
|
164
|
+
#### Serial Tests (When Needed)
|
|
165
|
+
```typescript
|
|
166
|
+
// Force serial execution for dependent tests
|
|
167
|
+
test.describe.configure({ mode: 'serial' });
|
|
168
|
+
|
|
169
|
+
test.describe('Authentication Flow', () => {
|
|
170
|
+
test('should login', async ({ page }) => {
|
|
171
|
+
// Login test
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('should access protected page', async ({ page }) => {
|
|
175
|
+
// Depends on login
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Use Cases:**
|
|
181
|
+
- Tests with dependencies
|
|
182
|
+
- State that must be preserved
|
|
183
|
+
- Setup/teardown sequences
|
|
184
|
+
|
|
185
|
+
### 2. Test Sharding (Context7-Verified)
|
|
186
|
+
|
|
187
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
188
|
+
|
|
189
|
+
#### GitHub Actions Matrix Strategy
|
|
190
|
+
```yaml
|
|
191
|
+
# .github/workflows/playwright.yml
|
|
192
|
+
name: Playwright Tests
|
|
193
|
+
on:
|
|
194
|
+
push:
|
|
195
|
+
branches: [ main, master ]
|
|
196
|
+
pull_request:
|
|
197
|
+
branches: [ main, master ]
|
|
198
|
+
|
|
199
|
+
jobs:
|
|
200
|
+
test:
|
|
201
|
+
timeout-minutes: 60
|
|
202
|
+
runs-on: ubuntu-latest
|
|
203
|
+
strategy:
|
|
204
|
+
fail-fast: false
|
|
205
|
+
matrix:
|
|
206
|
+
shardIndex: [1, 2, 3, 4]
|
|
207
|
+
shardTotal: [4]
|
|
208
|
+
steps:
|
|
209
|
+
- uses: actions/checkout@v3
|
|
210
|
+
- uses: actions/setup-node@v3
|
|
211
|
+
with:
|
|
212
|
+
node-version: 18
|
|
213
|
+
- name: Install dependencies
|
|
214
|
+
run: npm ci
|
|
215
|
+
- name: Install Playwright Browsers
|
|
216
|
+
run: npx playwright install --with-deps
|
|
217
|
+
- name: Run Playwright tests
|
|
218
|
+
run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
|
|
219
|
+
- uses: actions/upload-artifact@v3
|
|
220
|
+
if: always()
|
|
221
|
+
with:
|
|
222
|
+
name: playwright-report-${{ matrix.shardIndex }}
|
|
223
|
+
path: playwright-report/
|
|
224
|
+
retention-days: 30
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Benefits:**
|
|
228
|
+
- Runs 4 shards in parallel across GitHub runners
|
|
229
|
+
- Linear speedup (4x with 4 shards)
|
|
230
|
+
- Automatic load balancing
|
|
231
|
+
- Parallel artifact upload
|
|
232
|
+
|
|
233
|
+
**Performance Impact:**
|
|
234
|
+
- Single runner: 30 minutes
|
|
235
|
+
- 4 shards: 7.5 minutes (4x faster)
|
|
236
|
+
- 8 shards: 3.75 minutes (8x faster)
|
|
237
|
+
|
|
238
|
+
**Cost Analysis:**
|
|
239
|
+
- Single runner: 30 minutes × 1 = 30 runner-minutes
|
|
240
|
+
- 4 shards: 7.5 minutes × 4 = 30 runner-minutes (same cost, 4x faster)
|
|
241
|
+
|
|
242
|
+
#### GitLab CI Parallel Jobs
|
|
243
|
+
```yaml
|
|
244
|
+
# .gitlab-ci.yml
|
|
245
|
+
stages:
|
|
246
|
+
- test
|
|
247
|
+
|
|
248
|
+
playwright:
|
|
249
|
+
stage: test
|
|
250
|
+
image: mcr.microsoft.com/playwright:v1.40.0-focal
|
|
251
|
+
parallel: 4
|
|
252
|
+
script:
|
|
253
|
+
- npm ci
|
|
254
|
+
- npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL
|
|
255
|
+
artifacts:
|
|
256
|
+
when: always
|
|
257
|
+
paths:
|
|
258
|
+
- playwright-report/
|
|
259
|
+
expire_in: 30 days
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Benefits:**
|
|
263
|
+
- Automatic shard distribution
|
|
264
|
+
- Built-in GitLab integration
|
|
265
|
+
- Scales with `parallel` value
|
|
266
|
+
|
|
267
|
+
#### CircleCI Parallelism
|
|
268
|
+
```yaml
|
|
269
|
+
# .circleci/config.yml
|
|
270
|
+
version: 2.1
|
|
271
|
+
orbs:
|
|
272
|
+
playwright: talkiq/playwright@1.4.1
|
|
273
|
+
|
|
274
|
+
jobs:
|
|
275
|
+
test:
|
|
276
|
+
docker:
|
|
277
|
+
- image: mcr.microsoft.com/playwright:v1.40.0-focal
|
|
278
|
+
parallelism: 4
|
|
279
|
+
steps:
|
|
280
|
+
- checkout
|
|
281
|
+
- run:
|
|
282
|
+
name: Install dependencies
|
|
283
|
+
command: npm ci
|
|
284
|
+
- run:
|
|
285
|
+
name: Run tests
|
|
286
|
+
command: |
|
|
287
|
+
SHARD="$((${CIRCLE_NODE_INDEX} + 1))/${CIRCLE_NODE_TOTAL}"
|
|
288
|
+
npx playwright test --shard=$SHARD
|
|
289
|
+
- store_artifacts:
|
|
290
|
+
path: playwright-report
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
#### Azure Pipelines
|
|
294
|
+
```yaml
|
|
295
|
+
# azure-pipelines.yml
|
|
296
|
+
trigger:
|
|
297
|
+
- main
|
|
298
|
+
|
|
299
|
+
strategy:
|
|
300
|
+
matrix:
|
|
301
|
+
shard_1_4:
|
|
302
|
+
shardIndex: 1
|
|
303
|
+
shardTotal: 4
|
|
304
|
+
shard_2_4:
|
|
305
|
+
shardIndex: 2
|
|
306
|
+
shardTotal: 4
|
|
307
|
+
shard_3_4:
|
|
308
|
+
shardIndex: 3
|
|
309
|
+
shardTotal: 4
|
|
310
|
+
shard_4_4:
|
|
311
|
+
shardIndex: 4
|
|
312
|
+
shardTotal: 4
|
|
313
|
+
|
|
314
|
+
pool:
|
|
315
|
+
vmImage: 'ubuntu-latest'
|
|
316
|
+
|
|
317
|
+
steps:
|
|
318
|
+
- task: NodeTool@0
|
|
319
|
+
inputs:
|
|
320
|
+
versionSpec: '18'
|
|
321
|
+
- script: npm ci
|
|
322
|
+
displayName: 'Install dependencies'
|
|
323
|
+
- script: npx playwright install --with-deps
|
|
324
|
+
displayName: 'Install Playwright browsers'
|
|
325
|
+
- script: npx playwright test --shard=$(shardIndex)/$(shardTotal)
|
|
326
|
+
displayName: 'Run Playwright tests'
|
|
327
|
+
- task: PublishTestResults@2
|
|
328
|
+
inputs:
|
|
329
|
+
testResultsFormat: 'JUnit'
|
|
330
|
+
testResultsFiles: 'playwright-report/results.xml'
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### 3. Browser Context Optimization (Context7-Verified)
|
|
334
|
+
|
|
335
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
336
|
+
|
|
337
|
+
#### Reuse Browser Context
|
|
338
|
+
```typescript
|
|
339
|
+
// playwright.config.ts
|
|
340
|
+
export default defineConfig({
|
|
341
|
+
use: {
|
|
342
|
+
// Browser context options
|
|
343
|
+
viewport: { width: 1280, height: 720 },
|
|
344
|
+
ignoreHTTPSErrors: true,
|
|
345
|
+
screenshot: 'only-on-failure',
|
|
346
|
+
video: 'retain-on-failure',
|
|
347
|
+
trace: 'on-first-retry',
|
|
348
|
+
|
|
349
|
+
// Performance optimizations
|
|
350
|
+
launchOptions: {
|
|
351
|
+
args: [
|
|
352
|
+
'--disable-dev-shm-usage',
|
|
353
|
+
'--disable-blink-features=AutomationControlled',
|
|
354
|
+
'--no-sandbox',
|
|
355
|
+
],
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
});
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**Optimizations Explained:**
|
|
362
|
+
- `--disable-dev-shm-usage`: Use /tmp instead of /dev/shm (Docker)
|
|
363
|
+
- `--no-sandbox`: Disable sandbox (CI environments)
|
|
364
|
+
- `screenshot: 'only-on-failure'`: Save disk space
|
|
365
|
+
- `video: 'retain-on-failure'`: Only keep failed test videos
|
|
366
|
+
- `trace: 'on-first-retry'`: Minimal trace collection
|
|
367
|
+
|
|
368
|
+
**Performance Impact:** 30% faster test execution, 90% less disk usage
|
|
369
|
+
|
|
370
|
+
#### Shared Browser Context Pattern
|
|
371
|
+
```typescript
|
|
372
|
+
import { test as base } from '@playwright/test';
|
|
373
|
+
|
|
374
|
+
// Extend base test with shared context
|
|
375
|
+
export const test = base.extend<{ sharedContext: any }>({
|
|
376
|
+
sharedContext: async ({ browser }, use) => {
|
|
377
|
+
const context = await browser.newContext();
|
|
378
|
+
await context.addCookies([
|
|
379
|
+
{ name: 'auth_token', value: 'test-token', domain: 'localhost', path: '/' }
|
|
380
|
+
]);
|
|
381
|
+
await use(context);
|
|
382
|
+
await context.close();
|
|
383
|
+
},
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
// Use shared context in tests
|
|
387
|
+
test('test with auth', async ({ sharedContext }) => {
|
|
388
|
+
const page = await sharedContext.newPage();
|
|
389
|
+
await page.goto('/dashboard');
|
|
390
|
+
// Already authenticated
|
|
391
|
+
});
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Benefits:**
|
|
395
|
+
- Shared authentication state
|
|
396
|
+
- Faster test execution
|
|
397
|
+
- Reduced setup time
|
|
398
|
+
|
|
399
|
+
**Performance Impact:** 5x faster (no repeated login: 10s → 2s per test)
|
|
400
|
+
|
|
401
|
+
### 4. Trace and Video Optimization (Context7-Verified)
|
|
402
|
+
|
|
403
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
404
|
+
|
|
405
|
+
#### Conditional Trace Collection
|
|
406
|
+
```typescript
|
|
407
|
+
// playwright.config.ts
|
|
408
|
+
export default defineConfig({
|
|
409
|
+
use: {
|
|
410
|
+
// Only collect traces on first retry
|
|
411
|
+
trace: 'on-first-retry',
|
|
412
|
+
|
|
413
|
+
// Only record videos for failed tests
|
|
414
|
+
video: 'retain-on-failure',
|
|
415
|
+
|
|
416
|
+
// Screenshots only on failure
|
|
417
|
+
screenshot: 'only-on-failure',
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Storage Impact:**
|
|
423
|
+
- Full trace/video: 500 MB per run
|
|
424
|
+
- Optimized (failures only): 50 MB per run (10x less)
|
|
425
|
+
|
|
426
|
+
**CI/CD Benefits:**
|
|
427
|
+
- Faster artifact upload
|
|
428
|
+
- Lower storage costs
|
|
429
|
+
- Faster test execution (no video encoding overhead)
|
|
430
|
+
|
|
431
|
+
#### Programmatic Trace Control
|
|
432
|
+
```typescript
|
|
433
|
+
import { test } from '@playwright/test';
|
|
434
|
+
|
|
435
|
+
test('complex test with trace', async ({ page, context }) => {
|
|
436
|
+
// Start trace only for critical section
|
|
437
|
+
await context.tracing.start({ screenshots: true, snapshots: true });
|
|
438
|
+
|
|
439
|
+
try {
|
|
440
|
+
await page.goto('/critical-flow');
|
|
441
|
+
await page.click('button');
|
|
442
|
+
await page.waitForSelector('.success');
|
|
443
|
+
} finally {
|
|
444
|
+
// Save trace only if test fails
|
|
445
|
+
if (test.info().status === 'failed') {
|
|
446
|
+
await context.tracing.stop({
|
|
447
|
+
path: `trace-${test.info().title}.zip`
|
|
448
|
+
});
|
|
449
|
+
} else {
|
|
450
|
+
await context.tracing.stop();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**Benefits:**
|
|
457
|
+
- Trace only critical sections
|
|
458
|
+
- Save only on failure
|
|
459
|
+
- Minimal performance impact
|
|
460
|
+
|
|
461
|
+
### 5. Network Optimization (Context7-Verified)
|
|
462
|
+
|
|
463
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
464
|
+
|
|
465
|
+
#### Route Interception for Speed
|
|
466
|
+
```typescript
|
|
467
|
+
import { test } from '@playwright/test';
|
|
468
|
+
|
|
469
|
+
test.beforeEach(async ({ page }) => {
|
|
470
|
+
// Block unnecessary resources
|
|
471
|
+
await page.route('**/*', (route) => {
|
|
472
|
+
const resourceType = route.request().resourceType();
|
|
473
|
+
|
|
474
|
+
if (['image', 'font', 'stylesheet'].includes(resourceType)) {
|
|
475
|
+
route.abort();
|
|
476
|
+
} else {
|
|
477
|
+
route.continue();
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
test('fast test without images', async ({ page }) => {
|
|
483
|
+
await page.goto('/');
|
|
484
|
+
// Page loads 3x faster without images/fonts/CSS
|
|
485
|
+
});
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**Performance Impact:** 3x faster page loads (6s → 2s)
|
|
489
|
+
|
|
490
|
+
#### API Mocking for Reliability
|
|
491
|
+
```typescript
|
|
492
|
+
import { test, expect } from '@playwright/test';
|
|
493
|
+
|
|
494
|
+
test('test with mocked API', async ({ page }) => {
|
|
495
|
+
// Mock API responses
|
|
496
|
+
await page.route('**/api/users', (route) => {
|
|
497
|
+
route.fulfill({
|
|
498
|
+
status: 200,
|
|
499
|
+
contentType: 'application/json',
|
|
500
|
+
body: JSON.stringify([
|
|
501
|
+
{ id: 1, name: 'John Doe' },
|
|
502
|
+
{ id: 2, name: 'Jane Smith' }
|
|
503
|
+
])
|
|
504
|
+
});
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
await page.goto('/users');
|
|
508
|
+
await expect(page.locator('text=John Doe')).toBeVisible();
|
|
509
|
+
});
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
**Benefits:**
|
|
513
|
+
- 100x faster (no real API calls)
|
|
514
|
+
- No flaky tests (deterministic)
|
|
515
|
+
- No external dependencies
|
|
516
|
+
|
|
517
|
+
**Performance Impact:**
|
|
518
|
+
- Real API: 500ms per test
|
|
519
|
+
- Mocked API: 5ms per test (100x faster)
|
|
520
|
+
|
|
521
|
+
#### HTTP Cache Reuse
|
|
522
|
+
```typescript
|
|
523
|
+
// playwright.config.ts
|
|
524
|
+
export default defineConfig({
|
|
525
|
+
use: {
|
|
526
|
+
// Enable HTTP caching
|
|
527
|
+
launchOptions: {
|
|
528
|
+
args: ['--disable-features=NetworkService'],
|
|
529
|
+
},
|
|
530
|
+
|
|
531
|
+
// Reuse browser context for faster loads
|
|
532
|
+
storageState: 'state.json',
|
|
533
|
+
},
|
|
534
|
+
});
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### 6. CI/CD Pipeline Optimization (Context7-Verified)
|
|
538
|
+
|
|
539
|
+
**Pattern from Context7 (/microsoft/playwright):**
|
|
540
|
+
|
|
541
|
+
#### Docker Container Caching
|
|
542
|
+
```dockerfile
|
|
543
|
+
# Dockerfile for CI
|
|
544
|
+
FROM mcr.microsoft.com/playwright:v1.40.0-focal
|
|
545
|
+
|
|
546
|
+
WORKDIR /app
|
|
547
|
+
|
|
548
|
+
# Cache dependencies
|
|
549
|
+
COPY package*.json ./
|
|
550
|
+
RUN npm ci
|
|
551
|
+
|
|
552
|
+
# Copy source
|
|
553
|
+
COPY . .
|
|
554
|
+
|
|
555
|
+
# Run tests
|
|
556
|
+
CMD ["npx", "playwright", "test"]
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**Benefits:**
|
|
560
|
+
- Cached browser binaries (no download)
|
|
561
|
+
- Faster CI startup (30s → 5s)
|
|
562
|
+
- Consistent environment
|
|
563
|
+
|
|
564
|
+
#### GitHub Actions with Caching
|
|
565
|
+
```yaml
|
|
566
|
+
name: Playwright Tests
|
|
567
|
+
on: [push, pull_request]
|
|
568
|
+
|
|
569
|
+
jobs:
|
|
570
|
+
test:
|
|
571
|
+
runs-on: ubuntu-latest
|
|
572
|
+
steps:
|
|
573
|
+
- uses: actions/checkout@v3
|
|
574
|
+
|
|
575
|
+
- uses: actions/setup-node@v3
|
|
576
|
+
with:
|
|
577
|
+
node-version: 18
|
|
578
|
+
cache: 'npm'
|
|
579
|
+
|
|
580
|
+
- name: Cache Playwright browsers
|
|
581
|
+
uses: actions/cache@v3
|
|
582
|
+
with:
|
|
583
|
+
path: ~/.cache/ms-playwright
|
|
584
|
+
key: ${{ runner.os }}-playwright-${{ hashFiles('**/package-lock.json') }}
|
|
585
|
+
|
|
586
|
+
- run: npm ci
|
|
587
|
+
|
|
588
|
+
- name: Install Playwright browsers
|
|
589
|
+
run: npx playwright install --with-deps
|
|
590
|
+
if: steps.cache.outputs.cache-hit != 'true'
|
|
591
|
+
|
|
592
|
+
- run: npx playwright test
|
|
593
|
+
|
|
594
|
+
- uses: actions/upload-artifact@v3
|
|
595
|
+
if: always()
|
|
596
|
+
with:
|
|
597
|
+
name: playwright-report
|
|
598
|
+
path: playwright-report/
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
**Performance Impact:**
|
|
602
|
+
- Without cache: 2m 30s setup
|
|
603
|
+
- With cache: 15s setup (10x faster)
|
|
604
|
+
|
|
605
|
+
### 7. Test Grouping Strategies
|
|
606
|
+
|
|
607
|
+
**Pattern from Context7:**
|
|
608
|
+
|
|
609
|
+
#### Group by Feature
|
|
610
|
+
```typescript
|
|
611
|
+
// playwright.config.ts
|
|
612
|
+
export default defineConfig({
|
|
613
|
+
projects: [
|
|
614
|
+
{
|
|
615
|
+
name: 'authentication',
|
|
616
|
+
testMatch: '**/auth/**/*.spec.ts',
|
|
617
|
+
use: { ...devices['Desktop Chrome'] },
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
name: 'checkout',
|
|
621
|
+
testMatch: '**/checkout/**/*.spec.ts',
|
|
622
|
+
use: { ...devices['Desktop Chrome'] },
|
|
623
|
+
dependencies: ['authentication'],
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
name: 'admin',
|
|
627
|
+
testMatch: '**/admin/**/*.spec.ts',
|
|
628
|
+
use: { ...devices['Desktop Chrome'] },
|
|
629
|
+
dependencies: ['authentication'],
|
|
630
|
+
},
|
|
631
|
+
],
|
|
632
|
+
});
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**Benefits:**
|
|
636
|
+
- Run feature groups independently
|
|
637
|
+
- Define dependencies between projects
|
|
638
|
+
- Fail fast on critical features
|
|
639
|
+
|
|
640
|
+
**Run Commands:**
|
|
641
|
+
```bash
|
|
642
|
+
# Run all tests
|
|
643
|
+
npx playwright test
|
|
644
|
+
|
|
645
|
+
# Run specific project
|
|
646
|
+
npx playwright test --project=authentication
|
|
647
|
+
npx playwright test --project=checkout
|
|
648
|
+
|
|
649
|
+
# Run dependent projects
|
|
650
|
+
npx playwright test --project=checkout
|
|
651
|
+
# Automatically runs authentication first
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
#### Group by Browser
|
|
655
|
+
```typescript
|
|
656
|
+
export default defineConfig({
|
|
657
|
+
projects: [
|
|
658
|
+
{
|
|
659
|
+
name: 'chromium-desktop',
|
|
660
|
+
use: { ...devices['Desktop Chrome'] },
|
|
661
|
+
testMatch: '**/*.spec.ts',
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
name: 'chromium-mobile',
|
|
665
|
+
use: { ...devices['Pixel 5'] },
|
|
666
|
+
testMatch: '**/mobile/**/*.spec.ts',
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
name: 'firefox',
|
|
670
|
+
use: { ...devices['Desktop Firefox'] },
|
|
671
|
+
testMatch: '**/cross-browser/**/*.spec.ts',
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
name: 'webkit',
|
|
675
|
+
use: { ...devices['Desktop Safari'] },
|
|
676
|
+
testMatch: '**/cross-browser/**/*.spec.ts',
|
|
677
|
+
},
|
|
678
|
+
],
|
|
679
|
+
});
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
## Optimization Output
|
|
683
|
+
|
|
684
|
+
```
|
|
685
|
+
🎭 Playwright Performance Optimization Analysis
|
|
686
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
687
|
+
|
|
688
|
+
Project: E2E Test Suite
|
|
689
|
+
Framework: Playwright 1.40.0
|
|
690
|
+
Node.js: 18.x
|
|
691
|
+
Total Tests: 487
|
|
692
|
+
|
|
693
|
+
📊 Current Performance
|
|
694
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
695
|
+
|
|
696
|
+
Test Execution: 28m 34s
|
|
697
|
+
Trace Collection: +5m 12s (always enabled)
|
|
698
|
+
Video Recording: +3m 45s (all tests)
|
|
699
|
+
Total Time: 37m 31s
|
|
700
|
+
|
|
701
|
+
Parallel Workers: Not configured (sequential)
|
|
702
|
+
Sharding: Not configured
|
|
703
|
+
Browser Context: New context per test (slow)
|
|
704
|
+
|
|
705
|
+
⚡ Fully Parallel Execution
|
|
706
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
707
|
+
|
|
708
|
+
Current: Sequential execution
|
|
709
|
+
Recommended: fullyParallel: true with 4 workers
|
|
710
|
+
|
|
711
|
+
💡 Impact:
|
|
712
|
+
- Sequential: 28m 34s
|
|
713
|
+
- Parallel (4 workers): 7m 8s (4x faster)
|
|
714
|
+
- Parallel (8 workers): 3m 34s (8x faster)
|
|
715
|
+
|
|
716
|
+
🗂️ Test Sharding for CI/CD
|
|
717
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
718
|
+
|
|
719
|
+
Current: Single runner (37m 31s)
|
|
720
|
+
Recommended: 4 shards across parallel runners
|
|
721
|
+
|
|
722
|
+
💡 Impact:
|
|
723
|
+
- Single runner: 37m 31s
|
|
724
|
+
- 4 shards: 9m 23s (4x faster)
|
|
725
|
+
- 8 shards: 4m 42s (8x faster)
|
|
726
|
+
|
|
727
|
+
GitHub Actions configuration generated ✓
|
|
728
|
+
Cost Analysis: Same runner-minutes, 4x faster delivery
|
|
729
|
+
|
|
730
|
+
🌐 Browser Context Optimization
|
|
731
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
732
|
+
|
|
733
|
+
⚠️ Creating new context per test (expensive)
|
|
734
|
+
Current: ~2s overhead per test = 16m 14s total
|
|
735
|
+
|
|
736
|
+
💡 Recommendations:
|
|
737
|
+
1. Reuse browser context with storageState → 5x faster auth
|
|
738
|
+
2. Add launchOptions optimization flags → 30% faster
|
|
739
|
+
3. Share cookies between tests → No repeated login
|
|
740
|
+
|
|
741
|
+
Configuration generated ✓
|
|
742
|
+
|
|
743
|
+
⚡ Impact:
|
|
744
|
+
- Current: 2s setup per test (16m 14s total)
|
|
745
|
+
- Optimized: 0.4s setup per test (3m 15s total)
|
|
746
|
+
- Speedup: 5x faster (13 minutes saved)
|
|
747
|
+
|
|
748
|
+
📹 Trace & Video Optimization
|
|
749
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
750
|
+
|
|
751
|
+
⚠️ Collecting traces and videos for ALL tests
|
|
752
|
+
Current: 8m 57s overhead, 2.3 GB storage
|
|
753
|
+
|
|
754
|
+
💡 Recommendations:
|
|
755
|
+
1. trace: 'on-first-retry' → Only on failures
|
|
756
|
+
2. video: 'retain-on-failure' → Only keep failures
|
|
757
|
+
3. screenshot: 'only-on-failure' → Save disk space
|
|
758
|
+
|
|
759
|
+
Configuration updated ✓
|
|
760
|
+
|
|
761
|
+
⚡ Impact:
|
|
762
|
+
- Current: +8m 57s, 2.3 GB storage
|
|
763
|
+
- Optimized: +45s, 230 MB storage (on 5% failure rate)
|
|
764
|
+
- Speedup: 12x faster, 10x less storage
|
|
765
|
+
|
|
766
|
+
🌐 Network Optimization
|
|
767
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
768
|
+
|
|
769
|
+
⚠️ Loading all resources (images, fonts, CSS)
|
|
770
|
+
Current: 6s average page load
|
|
771
|
+
|
|
772
|
+
💡 Recommendations:
|
|
773
|
+
1. Block unnecessary resources → 3x faster loads
|
|
774
|
+
2. Mock API responses → 100x faster, no flaky tests
|
|
775
|
+
3. Enable HTTP caching → Faster repeated loads
|
|
776
|
+
|
|
777
|
+
Route interception configured ✓
|
|
778
|
+
|
|
779
|
+
⚡ Impact:
|
|
780
|
+
- Current: 6s per page load
|
|
781
|
+
- Optimized: 2s per page load (3x faster)
|
|
782
|
+
- API tests: 500ms → 5ms (100x faster)
|
|
783
|
+
|
|
784
|
+
🎯 Summary
|
|
785
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
786
|
+
|
|
787
|
+
Total Optimizations: 18
|
|
788
|
+
|
|
789
|
+
🔴 Critical: 4 (parallel, sharding, context, traces)
|
|
790
|
+
🟡 High Impact: 8 (network, videos, caching)
|
|
791
|
+
🟢 Low Impact: 6 (grouping, configuration)
|
|
792
|
+
|
|
793
|
+
Estimated Performance Improvement:
|
|
794
|
+
|
|
795
|
+
Local Development:
|
|
796
|
+
- Before: 37m 31s
|
|
797
|
+
- After: 3m 34s (10.5x faster)
|
|
798
|
+
|
|
799
|
+
CI/CD (with 4 shards):
|
|
800
|
+
- Before: 37m 31s
|
|
801
|
+
- After: 4m 42s (8x faster)
|
|
802
|
+
|
|
803
|
+
Storage Requirements:
|
|
804
|
+
- Before: 2.3 GB per run
|
|
805
|
+
- After: 230 MB per run (10x less)
|
|
806
|
+
|
|
807
|
+
Test Reliability:
|
|
808
|
+
- Flaky tests (real APIs): 15% failure rate
|
|
809
|
+
- With mocked APIs: 0% flaky (100% reliable)
|
|
810
|
+
|
|
811
|
+
Run with --apply to implement optimizations
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
## Implementation
|
|
815
|
+
|
|
816
|
+
This command uses the **@e2e-test-engineer** agent with Playwright expertise:
|
|
817
|
+
|
|
818
|
+
1. Query Context7 for Playwright optimization patterns
|
|
819
|
+
2. Analyze current test suite configuration
|
|
820
|
+
3. Identify parallel execution opportunities
|
|
821
|
+
4. Configure test sharding for CI/CD
|
|
822
|
+
5. Optimize browser context usage
|
|
823
|
+
6. Configure trace/video collection
|
|
824
|
+
7. Generate optimized configurations
|
|
825
|
+
|
|
826
|
+
## Best Practices Applied
|
|
827
|
+
|
|
828
|
+
Based on Context7 documentation from `/microsoft/playwright`:
|
|
829
|
+
|
|
830
|
+
1. **Fully Parallel Execution** - Run all tests concurrently
|
|
831
|
+
2. **Test Sharding** - Distribute across CI runners (4-8 shards)
|
|
832
|
+
3. **Browser Context Reuse** - Share auth state, 5x faster
|
|
833
|
+
4. **Conditional Traces** - Only on failures, 12x faster
|
|
834
|
+
5. **Network Optimization** - Block unnecessary resources, 3x faster
|
|
835
|
+
6. **API Mocking** - 100x faster tests, 0% flaky
|
|
836
|
+
7. **Docker Caching** - Cached browsers, 10x faster CI setup
|
|
837
|
+
|
|
838
|
+
## Related Commands
|
|
839
|
+
|
|
840
|
+
- `/test:setup` - Initial test configuration
|
|
841
|
+
- `/jest:optimize` - Unit test optimization
|
|
842
|
+
- `/test:performance` - Overall testing performance
|
|
843
|
+
|
|
844
|
+
## Troubleshooting
|
|
845
|
+
|
|
846
|
+
### Tests Failing in Parallel
|
|
847
|
+
- Check for shared state between tests
|
|
848
|
+
- Verify browser context isolation
|
|
849
|
+
- Use `test.describe.configure({ mode: 'serial' })` for dependent tests
|
|
850
|
+
|
|
851
|
+
### Sharding Not Working
|
|
852
|
+
- Ensure all tests are discoverable
|
|
853
|
+
- Check shard syntax: `--shard=1/3` (not `1-3`)
|
|
854
|
+
- Verify GitHub Actions matrix configuration
|
|
855
|
+
|
|
856
|
+
### Slow CI Pipeline
|
|
857
|
+
- Enable browser caching in CI
|
|
858
|
+
- Use Docker images with pre-installed browsers
|
|
859
|
+
- Implement test sharding
|
|
860
|
+
|
|
861
|
+
### Flaky Tests
|
|
862
|
+
- Mock external API calls
|
|
863
|
+
- Use `waitForLoadState('networkidle')`
|
|
864
|
+
- Increase timeout for slow operations
|
|
865
|
+
- Check for race conditions
|
|
866
|
+
|
|
867
|
+
## Installation
|
|
868
|
+
|
|
869
|
+
```bash
|
|
870
|
+
# Install Playwright
|
|
871
|
+
npm install --save-dev @playwright/test
|
|
872
|
+
|
|
873
|
+
# Install browsers
|
|
874
|
+
npx playwright install --with-deps
|
|
875
|
+
|
|
876
|
+
# Initialize Playwright config
|
|
877
|
+
npx playwright install
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
## Version History
|
|
881
|
+
|
|
882
|
+
- v2.0.0 - Initial Schema v2.0 release with Context7 integration
|
|
883
|
+
- Playwright fully parallel execution
|
|
884
|
+
- Test sharding for CI/CD
|
|
885
|
+
- Browser context optimization
|
|
886
|
+
- Trace/video conditional collection
|
|
887
|
+
- Network optimization patterns
|