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,689 @@
|
|
|
1
|
+
# nodejs:optimize
|
|
2
|
+
|
|
3
|
+
Optimize Node.js application performance with Context7-verified clustering, worker threads, and profiling techniques.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Comprehensive Node.js performance optimization following official best practices:
|
|
8
|
+
- Clustering for multi-core CPU utilization
|
|
9
|
+
- Worker threads for CPU-intensive tasks
|
|
10
|
+
- Performance monitoring and profiling
|
|
11
|
+
- Memory optimization techniques
|
|
12
|
+
- Event loop optimization
|
|
13
|
+
|
|
14
|
+
## Required Documentation Access
|
|
15
|
+
|
|
16
|
+
**MANDATORY:** Before optimization, query Context7 for Node.js best practices:
|
|
17
|
+
|
|
18
|
+
**Documentation Queries:**
|
|
19
|
+
- `mcp://context7/nodejs/performance` - Node.js performance optimization
|
|
20
|
+
- `mcp://context7/nodejs/cluster` - Cluster module for multi-core
|
|
21
|
+
- `mcp://context7/nodejs/worker-threads` - Worker threads for parallel processing
|
|
22
|
+
- `mcp://context7/nodejs/performance-hooks` - Performance monitoring
|
|
23
|
+
- `mcp://context7/nodejs/async-hooks` - Async context tracking
|
|
24
|
+
|
|
25
|
+
**Why This is Required:**
|
|
26
|
+
- Ensures optimization follows official Node.js documentation
|
|
27
|
+
- Applies proven clustering and threading patterns
|
|
28
|
+
- Validates performance monitoring approaches
|
|
29
|
+
- Prevents common Node.js performance pitfalls
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
/nodejs:optimize [options]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Options
|
|
38
|
+
|
|
39
|
+
- `--scope <cluster|workers|memory|all>` - Optimization scope (default: all)
|
|
40
|
+
- `--analyze-only` - Analyze without applying changes
|
|
41
|
+
- `--output <file>` - Write optimization report
|
|
42
|
+
- `--framework <express|fastify|nestjs>` - Framework-specific optimization
|
|
43
|
+
- `--workers <count>` - Number of cluster workers (default: CPU count)
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
|
|
47
|
+
### Full Application Optimization
|
|
48
|
+
```bash
|
|
49
|
+
/nodejs:optimize
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Add Clustering Support
|
|
53
|
+
```bash
|
|
54
|
+
/nodejs:optimize --scope cluster --workers 4
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Analyze Performance
|
|
58
|
+
```bash
|
|
59
|
+
/nodejs:optimize --analyze-only --output performance-report.md
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Framework-Specific Optimization
|
|
63
|
+
```bash
|
|
64
|
+
/nodejs:optimize --framework fastify
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Optimization Categories
|
|
68
|
+
|
|
69
|
+
### 1. Clustering for Multi-Core Utilization (Context7-Verified)
|
|
70
|
+
|
|
71
|
+
**Pattern from Context7 (/nodejs/node):**
|
|
72
|
+
|
|
73
|
+
#### Basic Cluster Setup
|
|
74
|
+
```javascript
|
|
75
|
+
import cluster from 'node:cluster';
|
|
76
|
+
import os from 'node:os';
|
|
77
|
+
import { createServer } from 'node:http';
|
|
78
|
+
|
|
79
|
+
const numCPUs = os.availableParallelism();
|
|
80
|
+
|
|
81
|
+
if (cluster.isPrimary) {
|
|
82
|
+
console.log(`Primary ${process.pid} is running`);
|
|
83
|
+
|
|
84
|
+
// Fork workers (one per CPU core)
|
|
85
|
+
for (let i = 0; i < numCPUs; i++) {
|
|
86
|
+
cluster.fork();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
cluster.on('exit', (worker, code, signal) => {
|
|
90
|
+
console.log(`Worker ${worker.process.pid} died`);
|
|
91
|
+
// Replace the dead worker
|
|
92
|
+
cluster.fork();
|
|
93
|
+
});
|
|
94
|
+
} else {
|
|
95
|
+
// Workers share the same server port
|
|
96
|
+
const server = createServer((req, res) => {
|
|
97
|
+
res.writeHead(200);
|
|
98
|
+
res.end('Hello World\n');
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
server.listen(8000);
|
|
102
|
+
console.log(`Worker ${process.pid} started`);
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Benefits:**
|
|
107
|
+
- Utilizes all CPU cores (4-8x throughput)
|
|
108
|
+
- Automatic load balancing across workers
|
|
109
|
+
- Zero-downtime restarts
|
|
110
|
+
- Fault tolerance (auto-restart on crash)
|
|
111
|
+
|
|
112
|
+
**Performance Impact:**
|
|
113
|
+
- Single process: 1,000 req/s
|
|
114
|
+
- 4 workers (4 cores): 3,800 req/s (3.8x)
|
|
115
|
+
- 8 workers (8 cores): 7,200 req/s (7.2x)
|
|
116
|
+
|
|
117
|
+
#### Advanced Cluster with Health Checks
|
|
118
|
+
```javascript
|
|
119
|
+
import cluster from 'node:cluster';
|
|
120
|
+
import os from 'node:os';
|
|
121
|
+
|
|
122
|
+
const numCPUs = os.availableParallelism();
|
|
123
|
+
const timeouts = [];
|
|
124
|
+
|
|
125
|
+
if (cluster.isPrimary) {
|
|
126
|
+
console.log(`Primary ${process.pid} is running`);
|
|
127
|
+
|
|
128
|
+
// Fork workers
|
|
129
|
+
for (let i = 0; i < numCPUs; i++) {
|
|
130
|
+
cluster.fork();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Worker fork event (health check timeout)
|
|
134
|
+
cluster.on('fork', (worker) => {
|
|
135
|
+
timeouts[worker.id] = setTimeout(() => {
|
|
136
|
+
console.error(`Worker ${worker.id} startup timeout - killing`);
|
|
137
|
+
worker.kill();
|
|
138
|
+
}, 5000); // 5 second startup timeout
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
// Worker listening event (clear health check)
|
|
142
|
+
cluster.on('listening', (worker, address) => {
|
|
143
|
+
clearTimeout(timeouts[worker.id]);
|
|
144
|
+
console.log(`Worker ${worker.id} listening on ${address.port}`);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Worker exit event (auto-restart)
|
|
148
|
+
cluster.on('exit', (worker, code, signal) => {
|
|
149
|
+
clearTimeout(timeouts[worker.id]);
|
|
150
|
+
console.log(`Worker ${worker.id} died (${signal || code})`);
|
|
151
|
+
|
|
152
|
+
// Restart the worker
|
|
153
|
+
cluster.fork();
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Graceful shutdown
|
|
157
|
+
process.on('SIGTERM', () => {
|
|
158
|
+
console.log('SIGTERM received, shutting down gracefully');
|
|
159
|
+
|
|
160
|
+
for (const id in cluster.workers) {
|
|
161
|
+
cluster.workers[id].send('shutdown');
|
|
162
|
+
cluster.workers[id].disconnect();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
setTimeout(() => {
|
|
166
|
+
console.log('Forcing shutdown');
|
|
167
|
+
process.exit(0);
|
|
168
|
+
}, 10000);
|
|
169
|
+
});
|
|
170
|
+
} else {
|
|
171
|
+
// Worker process
|
|
172
|
+
const server = require('./app'); // Your Express/Fastify app
|
|
173
|
+
|
|
174
|
+
server.listen(process.env.PORT || 3000);
|
|
175
|
+
|
|
176
|
+
// Handle shutdown signal from primary
|
|
177
|
+
process.on('message', (msg) => {
|
|
178
|
+
if (msg === 'shutdown') {
|
|
179
|
+
server.close(() => {
|
|
180
|
+
console.log(`Worker ${process.pid} shutting down`);
|
|
181
|
+
process.exit(0);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Benefits:**
|
|
189
|
+
- Health check timeouts (prevents hung workers)
|
|
190
|
+
- Graceful shutdown (finish existing requests)
|
|
191
|
+
- Auto-restart on failure
|
|
192
|
+
- Production-ready error handling
|
|
193
|
+
|
|
194
|
+
### 2. Worker Threads for CPU-Intensive Tasks (Context7-Verified)
|
|
195
|
+
|
|
196
|
+
**Pattern from Context7 (/nodejs/node):**
|
|
197
|
+
|
|
198
|
+
#### Basic Worker Thread Example
|
|
199
|
+
```javascript
|
|
200
|
+
import {
|
|
201
|
+
Worker,
|
|
202
|
+
isMainThread,
|
|
203
|
+
parentPort,
|
|
204
|
+
workerData,
|
|
205
|
+
} from 'node:worker_threads';
|
|
206
|
+
|
|
207
|
+
if (isMainThread) {
|
|
208
|
+
// Main thread: Create worker for CPU-intensive task
|
|
209
|
+
export default function parseJSAsync(script) {
|
|
210
|
+
return new Promise((resolve, reject) => {
|
|
211
|
+
const worker = new Worker(new URL(import.meta.url), {
|
|
212
|
+
workerData: script,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
worker.on('message', resolve);
|
|
216
|
+
worker.on('error', reject);
|
|
217
|
+
worker.on('exit', (code) => {
|
|
218
|
+
if (code !== 0)
|
|
219
|
+
reject(new Error(`Worker stopped with exit code ${code}`));
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
} else {
|
|
224
|
+
// Worker thread: Process the data
|
|
225
|
+
const { parse } = await import('some-js-parsing-library');
|
|
226
|
+
const script = workerData;
|
|
227
|
+
parentPort.postMessage(parse(script));
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Usage:**
|
|
232
|
+
```javascript
|
|
233
|
+
import parseJSAsync from './parser.js';
|
|
234
|
+
|
|
235
|
+
// Non-blocking CPU-intensive parsing
|
|
236
|
+
const result = await parseJSAsync(code);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Benefits:**
|
|
240
|
+
- Non-blocking CPU-intensive operations
|
|
241
|
+
- Parallel processing (utilize multiple cores)
|
|
242
|
+
- Shared memory via SharedArrayBuffer
|
|
243
|
+
- Message-based communication
|
|
244
|
+
|
|
245
|
+
#### Worker Pool Pattern (Recommended)
|
|
246
|
+
```javascript
|
|
247
|
+
import { Worker } from 'node:worker_threads';
|
|
248
|
+
import os from 'node:os';
|
|
249
|
+
|
|
250
|
+
class WorkerPool {
|
|
251
|
+
constructor(workerScript, poolSize = os.availableParallelism()) {
|
|
252
|
+
this.workerScript = workerScript;
|
|
253
|
+
this.poolSize = poolSize;
|
|
254
|
+
this.workers = [];
|
|
255
|
+
this.freeWorkers = [];
|
|
256
|
+
this.taskQueue = [];
|
|
257
|
+
|
|
258
|
+
this.initWorkers();
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
initWorkers() {
|
|
262
|
+
for (let i = 0; i < this.poolSize; i++) {
|
|
263
|
+
const worker = new Worker(this.workerScript);
|
|
264
|
+
this.workers.push(worker);
|
|
265
|
+
this.freeWorkers.push(worker);
|
|
266
|
+
|
|
267
|
+
worker.on('message', (result) => {
|
|
268
|
+
this.onWorkerMessage(worker, result);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
worker.on('error', (err) => {
|
|
272
|
+
console.error(`Worker error:`, err);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
async runTask(data) {
|
|
278
|
+
return new Promise((resolve, reject) => {
|
|
279
|
+
const task = { data, resolve, reject };
|
|
280
|
+
|
|
281
|
+
if (this.freeWorkers.length > 0) {
|
|
282
|
+
const worker = this.freeWorkers.pop();
|
|
283
|
+
worker.postMessage(data);
|
|
284
|
+
worker._currentTask = task;
|
|
285
|
+
} else {
|
|
286
|
+
this.taskQueue.push(task);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
onWorkerMessage(worker, result) {
|
|
292
|
+
const task = worker._currentTask;
|
|
293
|
+
task.resolve(result);
|
|
294
|
+
|
|
295
|
+
if (this.taskQueue.length > 0) {
|
|
296
|
+
const nextTask = this.taskQueue.shift();
|
|
297
|
+
worker.postMessage(nextTask.data);
|
|
298
|
+
worker._currentTask = nextTask;
|
|
299
|
+
} else {
|
|
300
|
+
this.freeWorkers.push(worker);
|
|
301
|
+
worker._currentTask = null;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
terminate() {
|
|
306
|
+
for (const worker of this.workers) {
|
|
307
|
+
worker.terminate();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Usage
|
|
313
|
+
const pool = new WorkerPool('./worker.js', 4);
|
|
314
|
+
|
|
315
|
+
// Process tasks in parallel
|
|
316
|
+
const results = await Promise.all([
|
|
317
|
+
pool.runTask({ data: 'task1' }),
|
|
318
|
+
pool.runTask({ data: 'task2' }),
|
|
319
|
+
pool.runTask({ data: 'task3' }),
|
|
320
|
+
pool.runTask({ data: 'task4' }),
|
|
321
|
+
]);
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Benefits:**
|
|
325
|
+
- Reuses workers (avoids creation overhead)
|
|
326
|
+
- Task queuing (handles backpressure)
|
|
327
|
+
- Parallel processing (4-8x faster for CPU tasks)
|
|
328
|
+
- Production-ready pattern
|
|
329
|
+
|
|
330
|
+
**Performance Impact:**
|
|
331
|
+
- Image processing: 1 image/s → 4 images/s (4-core)
|
|
332
|
+
- Data parsing: 100 records/s → 800 records/s (8-core)
|
|
333
|
+
- Computation: 10 calculations/s → 80 calculations/s (8-core)
|
|
334
|
+
|
|
335
|
+
### 3. Performance Monitoring (Context7-Verified)
|
|
336
|
+
|
|
337
|
+
**Pattern from Context7:**
|
|
338
|
+
|
|
339
|
+
#### Performance Hooks API
|
|
340
|
+
```javascript
|
|
341
|
+
import { performance, PerformanceObserver } from 'node:perf_hooks';
|
|
342
|
+
|
|
343
|
+
// Monitor HTTP server performance
|
|
344
|
+
const obs = new PerformanceObserver((items) => {
|
|
345
|
+
items.getEntries().forEach((entry) => {
|
|
346
|
+
console.log(`${entry.name}: ${entry.duration}ms`);
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
obs.observe({ entryTypes: ['measure'] });
|
|
351
|
+
|
|
352
|
+
// Measure request processing time
|
|
353
|
+
function handleRequest(req, res) {
|
|
354
|
+
performance.mark('request-start');
|
|
355
|
+
|
|
356
|
+
// Process request
|
|
357
|
+
processRequest(req, res);
|
|
358
|
+
|
|
359
|
+
performance.mark('request-end');
|
|
360
|
+
performance.measure(
|
|
361
|
+
'request-processing',
|
|
362
|
+
'request-start',
|
|
363
|
+
'request-end'
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
#### Worker Thread CPU Usage
|
|
369
|
+
```javascript
|
|
370
|
+
import { Worker } from 'node:worker_threads';
|
|
371
|
+
|
|
372
|
+
const worker = new Worker('./worker.js');
|
|
373
|
+
|
|
374
|
+
// Monitor worker CPU usage
|
|
375
|
+
const cpuUsage = await worker.cpuUsage();
|
|
376
|
+
console.log(`Worker CPU usage:`, cpuUsage);
|
|
377
|
+
// { user: 123456, system: 789012 } (microseconds)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### Event Loop Monitoring
|
|
381
|
+
```javascript
|
|
382
|
+
import { monitorEventLoopDelay } from 'node:perf_hooks';
|
|
383
|
+
|
|
384
|
+
const h = monitorEventLoopDelay({ resolution: 20 });
|
|
385
|
+
h.enable();
|
|
386
|
+
|
|
387
|
+
setInterval(() => {
|
|
388
|
+
console.log(`Event loop delay (ms):`);
|
|
389
|
+
console.log(` min: ${h.min / 1e6}`);
|
|
390
|
+
console.log(` max: ${h.max / 1e6}`);
|
|
391
|
+
console.log(` mean: ${h.mean / 1e6}`);
|
|
392
|
+
console.log(` p50: ${h.percentile(50) / 1e6}`);
|
|
393
|
+
console.log(` p99: ${h.percentile(99) / 1e6}`);
|
|
394
|
+
h.reset();
|
|
395
|
+
}, 10000);
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Benefits:**
|
|
399
|
+
- Real-time performance metrics
|
|
400
|
+
- Event loop delay detection
|
|
401
|
+
- CPU usage monitoring
|
|
402
|
+
- Request timing analysis
|
|
403
|
+
|
|
404
|
+
### 4. Memory Optimization
|
|
405
|
+
|
|
406
|
+
#### Stream Processing (vs Loading Entire File)
|
|
407
|
+
```javascript
|
|
408
|
+
import { createReadStream } from 'node:fs';
|
|
409
|
+
import { createInterface } from 'node:readline';
|
|
410
|
+
|
|
411
|
+
// BEFORE: Load entire file into memory (high memory)
|
|
412
|
+
import { readFile } from 'node:fs/promises';
|
|
413
|
+
|
|
414
|
+
const data = await readFile('large-file.txt', 'utf8');
|
|
415
|
+
const lines = data.split('\n');
|
|
416
|
+
for (const line of lines) {
|
|
417
|
+
processLine(line);
|
|
418
|
+
}
|
|
419
|
+
// Memory: 500 MB for 500 MB file
|
|
420
|
+
|
|
421
|
+
// AFTER: Stream processing (constant memory)
|
|
422
|
+
const fileStream = createReadStream('large-file.txt');
|
|
423
|
+
const rl = createInterface({
|
|
424
|
+
input: fileStream,
|
|
425
|
+
crlfDelay: Infinity,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
for await (const line of rl) {
|
|
429
|
+
processLine(line);
|
|
430
|
+
}
|
|
431
|
+
// Memory: ~10 MB (streaming buffer)
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Memory Savings:** 98% reduction (500 MB → 10 MB)
|
|
435
|
+
|
|
436
|
+
#### Backpressure Handling
|
|
437
|
+
```javascript
|
|
438
|
+
import { pipeline } from 'node:stream/promises';
|
|
439
|
+
import { createReadStream, createWriteStream } from 'node:fs';
|
|
440
|
+
import { Transform } from 'node:stream';
|
|
441
|
+
|
|
442
|
+
// Transform stream with backpressure handling
|
|
443
|
+
const transform = new Transform({
|
|
444
|
+
transform(chunk, encoding, callback) {
|
|
445
|
+
// Process chunk (automatic backpressure)
|
|
446
|
+
const processed = processChunk(chunk);
|
|
447
|
+
callback(null, processed);
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
// Pipeline automatically handles backpressure
|
|
452
|
+
await pipeline(
|
|
453
|
+
createReadStream('input.txt'),
|
|
454
|
+
transform,
|
|
455
|
+
createWriteStream('output.txt')
|
|
456
|
+
);
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Benefits:**
|
|
460
|
+
- Automatic backpressure (prevents memory overflow)
|
|
461
|
+
- Constant memory usage (regardless of file size)
|
|
462
|
+
- Pipeline error handling
|
|
463
|
+
|
|
464
|
+
### 5. Event Loop Optimization
|
|
465
|
+
|
|
466
|
+
#### Avoid Blocking Operations
|
|
467
|
+
```javascript
|
|
468
|
+
// BEFORE: Synchronous blocking operation
|
|
469
|
+
import { readFileSync } from 'node:fs';
|
|
470
|
+
|
|
471
|
+
function handleRequest(req, res) {
|
|
472
|
+
const data = readFileSync('file.txt', 'utf8'); // ❌ BLOCKS EVENT LOOP
|
|
473
|
+
res.send(data);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// AFTER: Asynchronous non-blocking
|
|
477
|
+
import { readFile } from 'node:fs/promises';
|
|
478
|
+
|
|
479
|
+
async function handleRequest(req, res) {
|
|
480
|
+
const data = await readFile('file.txt', 'utf8'); // ✅ NON-BLOCKING
|
|
481
|
+
res.send(data);
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
#### Break Up Long-Running Tasks
|
|
486
|
+
```javascript
|
|
487
|
+
// BEFORE: Long synchronous loop (blocks event loop)
|
|
488
|
+
function processLargeArray(array) {
|
|
489
|
+
for (const item of array) {
|
|
490
|
+
heavyComputation(item); // Blocks for 100ms each
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
// 10,000 items × 100ms = 1,000 seconds of blocking
|
|
494
|
+
|
|
495
|
+
// AFTER: Process in batches with setImmediate
|
|
496
|
+
async function processLargeArray(array, batchSize = 100) {
|
|
497
|
+
for (let i = 0; i < array.length; i += batchSize) {
|
|
498
|
+
const batch = array.slice(i, i + batchSize);
|
|
499
|
+
|
|
500
|
+
for (const item of batch) {
|
|
501
|
+
heavyComputation(item);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// Yield to event loop after each batch
|
|
505
|
+
await new Promise(resolve => setImmediate(resolve));
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// Allows event loop to process other tasks between batches
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
**Benefits:**
|
|
512
|
+
- Responsive event loop (handle other requests)
|
|
513
|
+
- No request timeouts
|
|
514
|
+
- Better throughput under load
|
|
515
|
+
|
|
516
|
+
#### Use Worker Threads for CPU-Intensive Tasks
|
|
517
|
+
```javascript
|
|
518
|
+
// BETTER: Offload to worker thread
|
|
519
|
+
import { Worker } from 'node:worker_threads';
|
|
520
|
+
|
|
521
|
+
async function processLargeArray(array) {
|
|
522
|
+
return new Promise((resolve, reject) => {
|
|
523
|
+
const worker = new Worker('./process-worker.js', {
|
|
524
|
+
workerData: array
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
worker.on('message', resolve);
|
|
528
|
+
worker.on('error', reject);
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
// Main event loop remains responsive
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
## Optimization Output
|
|
535
|
+
|
|
536
|
+
```
|
|
537
|
+
🚀 Node.js Performance Optimization Analysis
|
|
538
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
539
|
+
|
|
540
|
+
Project: Express API
|
|
541
|
+
Node.js: v20.11.0
|
|
542
|
+
CPU Cores: 8
|
|
543
|
+
|
|
544
|
+
⚡ Clustering Analysis
|
|
545
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
546
|
+
|
|
547
|
+
❌ No clustering detected
|
|
548
|
+
Current: Single process (12.5% CPU utilization)
|
|
549
|
+
|
|
550
|
+
💡 Recommendation: Add cluster module
|
|
551
|
+
|
|
552
|
+
Expected Impact:
|
|
553
|
+
- CPU Utilization: 12.5% → 95% (7.6x)
|
|
554
|
+
- Throughput: 1,200 req/s → 9,000 req/s (7.5x)
|
|
555
|
+
- Memory: 120 MB → 960 MB (8 workers × 120 MB)
|
|
556
|
+
|
|
557
|
+
🔧 Worker Threads Analysis
|
|
558
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
559
|
+
|
|
560
|
+
⚠️ Found 3 CPU-intensive operations in main thread
|
|
561
|
+
|
|
562
|
+
Hotspots:
|
|
563
|
+
1. imageProcessing() - 2.3s per request (blocks event loop)
|
|
564
|
+
2. dataParser() - 1.8s per request (blocks event loop)
|
|
565
|
+
3. encryption() - 0.9s per request (blocks event loop)
|
|
566
|
+
|
|
567
|
+
💡 Recommendation: Move to worker thread pool
|
|
568
|
+
|
|
569
|
+
Expected Impact:
|
|
570
|
+
- Image processing: 1 req/s → 4 req/s (4 workers)
|
|
571
|
+
- Event loop: Unblocked (responsive)
|
|
572
|
+
- Throughput: +300% for CPU-intensive endpoints
|
|
573
|
+
|
|
574
|
+
💾 Memory Optimization
|
|
575
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
576
|
+
|
|
577
|
+
Current Memory Usage: 450 MB
|
|
578
|
+
|
|
579
|
+
⚠️ Large file loading detected
|
|
580
|
+
Files: routes/export.js:45, routes/import.js:78
|
|
581
|
+
💡 Recommendation: Use stream processing
|
|
582
|
+
⚡ Impact: 380 MB savings (98% reduction)
|
|
583
|
+
|
|
584
|
+
⚠️ Memory leaks detected
|
|
585
|
+
Potential leaks: 3 event listeners not removed
|
|
586
|
+
💡 Recommendation: Clean up event listeners
|
|
587
|
+
⚡ Impact: Prevent memory growth over time
|
|
588
|
+
|
|
589
|
+
📊 Event Loop Analysis
|
|
590
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
591
|
+
|
|
592
|
+
Event Loop Delay (p99): 234 ms (⚠️ HIGH)
|
|
593
|
+
Target: < 50 ms
|
|
594
|
+
|
|
595
|
+
Blocking Operations:
|
|
596
|
+
1. Synchronous file reads: 12 occurrences
|
|
597
|
+
2. JSON.parse() on large payloads: 5 occurrences
|
|
598
|
+
3. Heavy computation in routes: 3 endpoints
|
|
599
|
+
|
|
600
|
+
💡 Recommendations:
|
|
601
|
+
1. Replace sync operations with async
|
|
602
|
+
2. Stream JSON parsing for large payloads
|
|
603
|
+
3. Move computation to worker threads
|
|
604
|
+
|
|
605
|
+
Expected Impact: p99 delay: 234ms → 35ms (85% improvement)
|
|
606
|
+
|
|
607
|
+
Summary
|
|
608
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
609
|
+
|
|
610
|
+
Total Optimizations: 8
|
|
611
|
+
|
|
612
|
+
🔴 Critical: 1 (clustering)
|
|
613
|
+
🟡 High Impact: 4 (worker threads, event loop)
|
|
614
|
+
🟢 Medium Impact: 3 (memory, monitoring)
|
|
615
|
+
|
|
616
|
+
Estimated Performance Improvement:
|
|
617
|
+
- Throughput: +650% (1,200 → 9,000 req/s)
|
|
618
|
+
- CPU Utilization: +660% (12.5% → 95%)
|
|
619
|
+
- Memory: 98% reduction for file operations
|
|
620
|
+
- Event loop: 85% faster (234ms → 35ms)
|
|
621
|
+
|
|
622
|
+
Run with --apply to implement optimizations
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
## Implementation
|
|
626
|
+
|
|
627
|
+
This command uses the **@nodejs-backend-engineer** agent:
|
|
628
|
+
|
|
629
|
+
1. Query Context7 for Node.js optimization patterns
|
|
630
|
+
2. Analyze clustering setup (or lack thereof)
|
|
631
|
+
3. Detect CPU-intensive operations (worker thread candidates)
|
|
632
|
+
4. Check memory usage patterns (streams vs buffers)
|
|
633
|
+
5. Monitor event loop delay
|
|
634
|
+
6. Generate optimization recommendations
|
|
635
|
+
7. Optionally apply automated fixes
|
|
636
|
+
|
|
637
|
+
## Best Practices Applied
|
|
638
|
+
|
|
639
|
+
Based on Context7 documentation from `/nodejs/node`:
|
|
640
|
+
|
|
641
|
+
1. **Clustering** - Multi-core utilization (7-8x throughput)
|
|
642
|
+
2. **Worker Threads** - Parallel CPU-intensive tasks
|
|
643
|
+
3. **Performance Hooks** - Real-time monitoring
|
|
644
|
+
4. **Streaming** - Constant memory usage
|
|
645
|
+
5. **Event Loop** - Non-blocking operations
|
|
646
|
+
|
|
647
|
+
## Related Commands
|
|
648
|
+
|
|
649
|
+
- `/nodejs:api-scaffold` - Generate Node.js API
|
|
650
|
+
- `/api:optimize` - API-specific optimization
|
|
651
|
+
- `/docker:optimize` - Container optimization
|
|
652
|
+
|
|
653
|
+
## Troubleshooting
|
|
654
|
+
|
|
655
|
+
### Cluster Workers Not Starting
|
|
656
|
+
- Check port availability
|
|
657
|
+
- Verify worker startup timeout
|
|
658
|
+
- Ensure graceful error handling
|
|
659
|
+
|
|
660
|
+
### Worker Thread Errors
|
|
661
|
+
- Validate worker script path
|
|
662
|
+
- Check SharedArrayBuffer support
|
|
663
|
+
- Monitor worker memory usage
|
|
664
|
+
|
|
665
|
+
### High Event Loop Delay
|
|
666
|
+
- Profile with `--inspect`
|
|
667
|
+
- Check for synchronous operations
|
|
668
|
+
- Move CPU tasks to worker threads
|
|
669
|
+
|
|
670
|
+
## Installation
|
|
671
|
+
|
|
672
|
+
```bash
|
|
673
|
+
# Node.js built-in modules (no installation needed)
|
|
674
|
+
# - cluster
|
|
675
|
+
# - worker_threads
|
|
676
|
+
# - perf_hooks
|
|
677
|
+
|
|
678
|
+
# Optional: Advanced profiling
|
|
679
|
+
npm install clinic
|
|
680
|
+
npm install autocannon # Load testing
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
## Version History
|
|
684
|
+
|
|
685
|
+
- v2.0.0 - Initial Schema v2.0 release with Context7 integration
|
|
686
|
+
- Clustering patterns for multi-core
|
|
687
|
+
- Worker threads for parallel processing
|
|
688
|
+
- Performance monitoring with perf_hooks
|
|
689
|
+
|