claude-autopm 2.8.1 → 2.8.3
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 -529
- package/bin/autopm.js +2 -0
- package/bin/commands/plugin.js +395 -0
- package/bin/commands/team.js +184 -10
- package/install/install.js +223 -4
- package/lib/plugins/PluginManager.js +1328 -0
- package/lib/plugins/PluginManager.old.js +400 -0
- package/package.json +5 -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/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/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/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -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/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/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/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/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/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/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/bigquery-expert.md +24 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/cosmosdb-expert.md +22 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/mongodb-expert.md +24 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/postgresql-expert.md +23 -15
- package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/redis-expert.md +29 -7
- 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/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/github-operations-specialist.md +1 -1
- 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/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/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/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/e2e-test-engineer.md +219 -0
- package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-frontend-engineer.md +176 -0
- package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/tailwindcss-expert.md +251 -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/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/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/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/github/workflow-create.md +42 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-testing/README.md +401 -0
- package/{autopm/.claude/agents/testing → packages/plugin-testing/agents}/frontend-testing-engineer.md +373 -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
- package/scripts/publish-plugins.sh +166 -0
- package/autopm/.claude/agents/data/airflow-orchestration-expert.md +0 -52
- package/autopm/.claude/agents/data/kedro-pipeline-expert.md +0 -50
- package/autopm/.claude/agents/integration/message-queue-engineer.md +0 -794
- package/autopm/.claude/commands/ai/langgraph-workflow.md +0 -65
- package/autopm/.claude/commands/ai/openai-chat.md +0 -65
- package/autopm/.claude/commands/playwright/test-scaffold.md +0 -38
- package/autopm/.claude/commands/python/api-scaffold.md +0 -50
- package/autopm/.claude/commands/python/docs-query.md +0 -48
- package/autopm/.claude/commands/testing/prime.md +0 -314
- package/autopm/.claude/commands/testing/run.md +0 -125
- package/autopm/.claude/commands/ui/bootstrap-scaffold.md +0 -65
- package/autopm/.claude/rules/database-management-strategy.md +0 -17
- package/autopm/.claude/rules/database-pipeline.md +0 -94
- package/autopm/.claude/rules/ux-design-rules.md +0 -209
- package/autopm/.claude/rules/visual-testing.md +0 -223
- package/autopm/.claude/scripts/azure/README.md +0 -192
- package/autopm/.claude/scripts/azure/active-work.js +0 -524
- package/autopm/.claude/scripts/azure/active-work.sh +0 -20
- package/autopm/.claude/scripts/azure/blocked.js +0 -520
- package/autopm/.claude/scripts/azure/blocked.sh +0 -20
- package/autopm/.claude/scripts/azure/daily.js +0 -533
- package/autopm/.claude/scripts/azure/daily.sh +0 -20
- package/autopm/.claude/scripts/azure/dashboard.js +0 -970
- package/autopm/.claude/scripts/azure/dashboard.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-list.js +0 -254
- package/autopm/.claude/scripts/azure/feature-list.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-show.js +0 -7
- package/autopm/.claude/scripts/azure/feature-show.sh +0 -20
- package/autopm/.claude/scripts/azure/feature-status.js +0 -604
- package/autopm/.claude/scripts/azure/feature-status.sh +0 -20
- package/autopm/.claude/scripts/azure/help.js +0 -342
- package/autopm/.claude/scripts/azure/help.sh +0 -20
- package/autopm/.claude/scripts/azure/next-task.js +0 -508
- package/autopm/.claude/scripts/azure/next-task.sh +0 -20
- package/autopm/.claude/scripts/azure/search.js +0 -469
- package/autopm/.claude/scripts/azure/search.sh +0 -20
- package/autopm/.claude/scripts/azure/setup.js +0 -745
- package/autopm/.claude/scripts/azure/setup.sh +0 -20
- package/autopm/.claude/scripts/azure/sprint-report.js +0 -1012
- package/autopm/.claude/scripts/azure/sprint-report.sh +0 -20
- package/autopm/.claude/scripts/azure/sync.js +0 -563
- package/autopm/.claude/scripts/azure/sync.sh +0 -20
- package/autopm/.claude/scripts/azure/us-list.js +0 -210
- package/autopm/.claude/scripts/azure/us-list.sh +0 -20
- package/autopm/.claude/scripts/azure/us-status.js +0 -238
- package/autopm/.claude/scripts/azure/us-status.sh +0 -20
- package/autopm/.claude/scripts/azure/validate.js +0 -626
- package/autopm/.claude/scripts/azure/validate.sh +0 -20
- package/autopm/.claude/scripts/azure/wrapper-template.sh +0 -20
- package/autopm/.claude/scripts/github/dependency-tracker.js +0 -554
- package/autopm/.claude/scripts/github/dependency-validator.js +0 -545
- package/autopm/.claude/scripts/github/dependency-visualizer.js +0 -477
- package/bin/node/azure-feature-show.js +0 -7
- /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/gemini-api-expert.md +0 -0
- /package/{autopm/.claude/agents/data → packages/plugin-ai/agents}/langgraph-workflow-expert.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-ai/agents}/openai-python-expert.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/aws-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/azure-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-architect.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/gcp-cloud-functions-engineer.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/kubernetes-orchestrator.md +0 -0
- /package/{autopm/.claude/agents/cloud → packages/plugin-cloud/agents}/terraform-infrastructure-expert.md +0 -0
- /package/{autopm/.claude/commands/cloud → packages/plugin-cloud/commands}/infra-deploy.md +0 -0
- /package/{autopm/.claude/commands/kubernetes/deploy.md → packages/plugin-cloud/commands/k8s-deploy.md} +0 -0
- /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/ssh-security.md +0 -0
- /package/{autopm/.claude/commands/infrastructure → packages/plugin-cloud/commands}/traefik-setup.md +0 -0
- /package/{autopm/.claude → packages/plugin-cloud}/rules/infrastructure-pipeline.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/agent-manager.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/code-analyzer.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/file-analyzer.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/agents/core/test-runner.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/rules/ai-integration-patterns.md +0 -0
- /package/{autopm/.claude → packages/plugin-core}/rules/performance-guidelines.md +0 -0
- /package/{autopm/.claude/agents/databases → packages/plugin-databases/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/azure-devops-specialist.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/docker-containerization-expert.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/mcp-context-manager.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/observability-engineer.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/ssh-operations-expert.md +0 -0
- /package/{autopm/.claude/agents/devops → packages/plugin-devops/agents}/traefik-proxy-expert.md +0 -0
- /package/{autopm/.claude/commands/github → packages/plugin-devops/commands}/workflow-create.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/ci-cd-kubernetes-strategy.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/devops-troubleshooting-playbook.md +0 -0
- /package/{autopm/.claude → packages/plugin-devops}/rules/docker-first-development.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/nats-messaging-expert.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/react-ui-expert.md +0 -0
- /package/{autopm/.claude/agents/frameworks → packages/plugin-frameworks/agents}/ux-design-expert.md +0 -0
- /package/{autopm/.claude/commands/react → packages/plugin-frameworks/commands}/app-scaffold.md +0 -0
- /package/{autopm/.claude/commands/ui → packages/plugin-frameworks/commands}/tailwind-system.md +0 -0
- /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-development-standards.md +0 -0
- /package/{autopm/.claude → packages/plugin-frameworks}/rules/ui-framework-rules.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/README.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/bash-scripting-expert.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/javascript-frontend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/nodejs-backend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-engineer.md +0 -0
- /package/{autopm/.claude/agents/languages → packages/plugin-languages/agents}/python-backend-expert.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMANDS.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/COMMAND_MAPPING.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/INTEGRATION_FIX.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/active-work.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/aliases.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/blocked-items.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/clean.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/docs-query.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-decompose.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/feature-start.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/fix-integration-example.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/help.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/import-us.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/init.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/next-task.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/search.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sprint-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/standup.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/sync-all.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-analyze.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-close.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-edit.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-reopen.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-start.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/task-sync.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-edit.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-list.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-new.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-parse.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-show.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/us-status.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/validate.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/commands/azure/work-item-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/blocked.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/clean.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-create.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-prime.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context-update.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/context.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-close.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-decompose.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-list.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-merge.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-oneshot.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-refresh.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-show.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-split.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-start.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-modular.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync-original.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/epic-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/help.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/import.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/in-progress.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/init.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-analyze.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-close.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-reopen.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-show.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-start.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/issue-sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/next.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-edit.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-list.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-new.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-parse.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/prd-status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/search.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/standup.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/status.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/sync.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/test-reference-update.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/validate.md +0 -0
- /package/{autopm/.claude/commands/pm → packages/plugin-pm/commands}/what-next.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/analytics.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/blocked.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/clean.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-create.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-prime.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context-update.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/context.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-close.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-edit.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-list.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-show.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-split.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-start/epic-start.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-epic-issue.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/create-task-issues.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-epic-file.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync/update-references.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/epic-sync.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/help.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/in-progress.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/init.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-close.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-edit.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-show.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-start.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/format-comment.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/gather-updates.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/post-comment.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/preflight-validation.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/issue-sync/update-frontmatter.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/README.md +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/epic-discovery.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/lib/logger.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/next.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/optimize.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-create.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/pr-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-list.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-new.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-parse.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/prd-status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/release.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/search.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/standup.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/status.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync-batch.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/sync.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-list.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/template-new.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.js +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/validate.sh +0 -0
- /package/{autopm/.claude → packages/plugin-pm}/scripts/pm/what-next.js +0 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
# python:optimize
|
|
2
|
+
|
|
3
|
+
Optimize Python application performance with Context7-verified profiling, async patterns, and best practices.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Comprehensive Python performance optimization following official best practices:
|
|
8
|
+
- Profiling with Pyinstrument (sampling profiler)
|
|
9
|
+
- Async/await patterns for I/O operations
|
|
10
|
+
- Memory optimization techniques
|
|
11
|
+
- Type hints for runtime performance
|
|
12
|
+
- Production-ready FastAPI optimization
|
|
13
|
+
|
|
14
|
+
## Required Documentation Access
|
|
15
|
+
|
|
16
|
+
**MANDATORY:** Before optimization, query Context7 for Python best practices:
|
|
17
|
+
|
|
18
|
+
**Documentation Queries:**
|
|
19
|
+
- `mcp://context7/python/performance` - Python performance optimization
|
|
20
|
+
- `mcp://context7/pyinstrument/profiling` - Profiling with Pyinstrument
|
|
21
|
+
- `mcp://context7/fastapi/async` - FastAPI async patterns
|
|
22
|
+
- `mcp://context7/python/async` - Python async/await best practices
|
|
23
|
+
- `mcp://context7/python/type-hints` - Type hints for performance
|
|
24
|
+
|
|
25
|
+
**Why This is Required:**
|
|
26
|
+
- Ensures optimization follows official Python documentation
|
|
27
|
+
- Applies proven profiling techniques from Pyinstrument
|
|
28
|
+
- Validates async patterns against FastAPI best practices
|
|
29
|
+
- Prevents anti-patterns and common mistakes
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
/python:optimize [options]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Options
|
|
38
|
+
|
|
39
|
+
- `--scope <profile|async|memory|all>` - Optimization scope (default: all)
|
|
40
|
+
- `--analyze-only` - Analyze without applying changes
|
|
41
|
+
- `--output <file>` - Write optimization report
|
|
42
|
+
- `--framework <fastapi|flask|django>` - Framework-specific optimization
|
|
43
|
+
- `--profile-requests` - Add profiling middleware for requests
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
|
|
47
|
+
### Full Application Optimization
|
|
48
|
+
```bash
|
|
49
|
+
/python:optimize
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Profile Existing Application
|
|
53
|
+
```bash
|
|
54
|
+
/python:optimize --scope profile --framework fastapi
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Analyze Performance Without Changes
|
|
58
|
+
```bash
|
|
59
|
+
/python:optimize --analyze-only --output performance-report.md
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Add Request Profiling
|
|
63
|
+
```bash
|
|
64
|
+
/python:optimize --profile-requests --framework fastapi
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Optimization Categories
|
|
68
|
+
|
|
69
|
+
### 1. Profiling with Pyinstrument (Context7-Verified)
|
|
70
|
+
|
|
71
|
+
**Pattern from Context7 (/joerick/pyinstrument):**
|
|
72
|
+
|
|
73
|
+
#### Command-Line Profiling
|
|
74
|
+
```bash
|
|
75
|
+
# Profile a Python script
|
|
76
|
+
pyinstrument script.py
|
|
77
|
+
|
|
78
|
+
# Profile a module
|
|
79
|
+
pyinstrument -m module_name
|
|
80
|
+
|
|
81
|
+
# Output to HTML
|
|
82
|
+
pyinstrument -o profile.html script.py
|
|
83
|
+
|
|
84
|
+
# Output to Speedscope (interactive flamechart)
|
|
85
|
+
pyinstrument -r speedscope script.py
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
#### Python API - Profiler Class
|
|
89
|
+
```python
|
|
90
|
+
from pyinstrument import Profiler
|
|
91
|
+
|
|
92
|
+
profiler = Profiler()
|
|
93
|
+
profiler.start()
|
|
94
|
+
|
|
95
|
+
# Code you want to profile
|
|
96
|
+
expensive_operation()
|
|
97
|
+
|
|
98
|
+
profiler.stop()
|
|
99
|
+
profiler.print()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Context Manager Pattern
|
|
103
|
+
```python
|
|
104
|
+
from pyinstrument import Profiler
|
|
105
|
+
|
|
106
|
+
with Profiler() as profiler:
|
|
107
|
+
# Code you want to profile
|
|
108
|
+
process_data()
|
|
109
|
+
|
|
110
|
+
profiler.print()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### Decorator Pattern
|
|
114
|
+
```python
|
|
115
|
+
import pyinstrument
|
|
116
|
+
|
|
117
|
+
@pyinstrument.profile()
|
|
118
|
+
def my_function():
|
|
119
|
+
# Automatically profiled
|
|
120
|
+
expensive_computation()
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Benefits:**
|
|
124
|
+
- Statistical sampling (low overhead, 0.1-1% slowdown)
|
|
125
|
+
- Call stack visualization
|
|
126
|
+
- Timeline mode for temporal analysis
|
|
127
|
+
- Async code support (v4.0.0+)
|
|
128
|
+
|
|
129
|
+
### 2. FastAPI Request Profiling (Production-Ready)
|
|
130
|
+
|
|
131
|
+
**Pattern from Context7 (/joerick/pyinstrument):**
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
from fastapi import FastAPI, Request
|
|
135
|
+
from fastapi.responses import HTMLResponse
|
|
136
|
+
from pyinstrument import Profiler
|
|
137
|
+
|
|
138
|
+
app = FastAPI()
|
|
139
|
+
PROFILING = True # Set from environment/config
|
|
140
|
+
|
|
141
|
+
if PROFILING:
|
|
142
|
+
@app.middleware("http")
|
|
143
|
+
async def profile_request(request: Request, call_next):
|
|
144
|
+
# Check for ?profile=1 query parameter
|
|
145
|
+
profiling = request.query_params.get("profile", False)
|
|
146
|
+
if profiling:
|
|
147
|
+
profiler = Profiler(interval=0.001, async_mode="enabled")
|
|
148
|
+
profiler.start()
|
|
149
|
+
|
|
150
|
+
response = await call_next(request)
|
|
151
|
+
|
|
152
|
+
profiler.stop()
|
|
153
|
+
return HTMLResponse(profiler.output_html())
|
|
154
|
+
else:
|
|
155
|
+
return await call_next(request)
|
|
156
|
+
|
|
157
|
+
# Usage: http://localhost:8000/api/endpoint?profile=1
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Benefits:**
|
|
161
|
+
- Zero code changes to endpoints
|
|
162
|
+
- On-demand profiling via query parameter
|
|
163
|
+
- HTML report in browser
|
|
164
|
+
- Production-safe (controlled by feature flag)
|
|
165
|
+
|
|
166
|
+
### 3. Flask Request Profiling
|
|
167
|
+
|
|
168
|
+
**Pattern from Context7:**
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
from flask import Flask, g, make_response, request
|
|
172
|
+
from pyinstrument import Profiler
|
|
173
|
+
|
|
174
|
+
app = Flask(__name__)
|
|
175
|
+
|
|
176
|
+
@app.before_request
|
|
177
|
+
def before_request():
|
|
178
|
+
if "profile" in request.args:
|
|
179
|
+
g.profiler = Profiler()
|
|
180
|
+
g.profiler.start()
|
|
181
|
+
|
|
182
|
+
@app.after_request
|
|
183
|
+
def after_request(response):
|
|
184
|
+
if not hasattr(g, "profiler"):
|
|
185
|
+
return response
|
|
186
|
+
g.profiler.stop()
|
|
187
|
+
output_html = g.profiler.output_html()
|
|
188
|
+
return make_response(output_html)
|
|
189
|
+
|
|
190
|
+
# Usage: http://localhost:5000/api/endpoint?profile=1
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 4. Django Request Profiling
|
|
194
|
+
|
|
195
|
+
**Pattern from Context7:**
|
|
196
|
+
|
|
197
|
+
#### Add Middleware (settings.py)
|
|
198
|
+
```python
|
|
199
|
+
# settings.py
|
|
200
|
+
MIDDLEWARE = [
|
|
201
|
+
# ... other middleware
|
|
202
|
+
'pyinstrument.middleware.ProfilerMiddleware',
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
# Optional: Configure profile directory
|
|
206
|
+
PYINSTRUMENT_PROFILE_DIR = 'profiles'
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Usage:**
|
|
210
|
+
```bash
|
|
211
|
+
# Profile a request
|
|
212
|
+
http://localhost:8000/api/endpoint/?profile
|
|
213
|
+
|
|
214
|
+
# Automatically saves HTML to profiles/ directory
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 5. Async Code Profiling (v4.0.0+)
|
|
218
|
+
|
|
219
|
+
**Pattern from Context7:**
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
import asyncio
|
|
223
|
+
from pyinstrument import Profiler
|
|
224
|
+
|
|
225
|
+
async def main():
|
|
226
|
+
profiler = Profiler(async_mode='enabled')
|
|
227
|
+
|
|
228
|
+
with profiler:
|
|
229
|
+
print('Processing...')
|
|
230
|
+
await asyncio.sleep(1)
|
|
231
|
+
await fetch_data()
|
|
232
|
+
await process_results()
|
|
233
|
+
|
|
234
|
+
profiler.print()
|
|
235
|
+
|
|
236
|
+
asyncio.run(main())
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Result:**
|
|
240
|
+
```
|
|
241
|
+
_ ._ __/__ _ _ _ _ _/_ Recorded: 10:15:23 Samples: 100
|
|
242
|
+
/_//_/// /_\ / //_// / //_'/ // Duration: 1.234 CPU time: 0.456
|
|
243
|
+
/ _/ v4.0.0
|
|
244
|
+
|
|
245
|
+
Program: main.py
|
|
246
|
+
|
|
247
|
+
1.234 main main.py:1
|
|
248
|
+
└─ 1.000 asyncio.sleep
|
|
249
|
+
└─ 0.234 fetch_data
|
|
250
|
+
└─ 0.123 process_results
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Benefits:**
|
|
254
|
+
- Correctly attributes time spent in await
|
|
255
|
+
- Shows async call hierarchy
|
|
256
|
+
- Identifies I/O bottlenecks
|
|
257
|
+
|
|
258
|
+
### 6. Pytest Auto-Profiling
|
|
259
|
+
|
|
260
|
+
**Pattern from Context7:**
|
|
261
|
+
|
|
262
|
+
```python
|
|
263
|
+
# conftest.py
|
|
264
|
+
from pathlib import Path
|
|
265
|
+
import pytest
|
|
266
|
+
from pyinstrument import Profiler
|
|
267
|
+
|
|
268
|
+
TESTS_ROOT = Path.cwd()
|
|
269
|
+
|
|
270
|
+
@pytest.fixture(autouse=True)
|
|
271
|
+
def auto_profile(request):
|
|
272
|
+
PROFILE_ROOT = (TESTS_ROOT / ".profiles")
|
|
273
|
+
|
|
274
|
+
# Turn profiling on
|
|
275
|
+
profiler = Profiler()
|
|
276
|
+
profiler.start()
|
|
277
|
+
|
|
278
|
+
yield # Run test
|
|
279
|
+
|
|
280
|
+
profiler.stop()
|
|
281
|
+
PROFILE_ROOT.mkdir(exist_ok=True)
|
|
282
|
+
results_file = PROFILE_ROOT / f"{request.node.name}.html"
|
|
283
|
+
profiler.write_html(results_file)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Result:**
|
|
287
|
+
```
|
|
288
|
+
pytest test_api.py
|
|
289
|
+
# Creates .profiles/test_api_endpoint.html for each test
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### 7. Memory Optimization Patterns
|
|
293
|
+
|
|
294
|
+
#### List Comprehensions vs Generator Expressions
|
|
295
|
+
```python
|
|
296
|
+
# BEFORE: List comprehension (loads entire list into memory)
|
|
297
|
+
squares = [x**2 for x in range(1000000)] # 8 MB memory
|
|
298
|
+
total = sum(squares)
|
|
299
|
+
|
|
300
|
+
# AFTER: Generator expression (lazy evaluation)
|
|
301
|
+
squares = (x**2 for x in range(1000000)) # ~200 bytes
|
|
302
|
+
total = sum(squares)
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Memory Savings:** 99.998% reduction (8 MB → 200 bytes)
|
|
306
|
+
|
|
307
|
+
#### Use __slots__ for Classes with Many Instances
|
|
308
|
+
```python
|
|
309
|
+
# BEFORE: Default __dict__ for attributes
|
|
310
|
+
class Point:
|
|
311
|
+
def __init__(self, x, y):
|
|
312
|
+
self.x = x
|
|
313
|
+
self.y = y
|
|
314
|
+
|
|
315
|
+
# Memory: ~280 bytes per instance
|
|
316
|
+
|
|
317
|
+
# AFTER: __slots__ for fixed attributes
|
|
318
|
+
class Point:
|
|
319
|
+
__slots__ = ['x', 'y']
|
|
320
|
+
|
|
321
|
+
def __init__(self, x, y):
|
|
322
|
+
self.x = x
|
|
323
|
+
self.y = y
|
|
324
|
+
|
|
325
|
+
# Memory: ~48 bytes per instance
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Memory Savings:** 83% reduction (280 bytes → 48 bytes per instance)
|
|
329
|
+
|
|
330
|
+
**Impact for 1 million instances:**
|
|
331
|
+
- Before: 280 MB
|
|
332
|
+
- After: 48 MB
|
|
333
|
+
- Savings: 232 MB (83%)
|
|
334
|
+
|
|
335
|
+
### 8. Async I/O Optimization
|
|
336
|
+
|
|
337
|
+
#### Async Database Queries
|
|
338
|
+
```python
|
|
339
|
+
# BEFORE: Synchronous queries (blocking)
|
|
340
|
+
def get_users():
|
|
341
|
+
user1 = db.query("SELECT * FROM users WHERE id = 1")
|
|
342
|
+
user2 = db.query("SELECT * FROM users WHERE id = 2")
|
|
343
|
+
user3 = db.query("SELECT * FROM users WHERE id = 3")
|
|
344
|
+
return [user1, user2, user3]
|
|
345
|
+
# Time: 300ms (3 × 100ms sequential)
|
|
346
|
+
|
|
347
|
+
# AFTER: Async queries (parallel)
|
|
348
|
+
import asyncio
|
|
349
|
+
|
|
350
|
+
async def get_users():
|
|
351
|
+
tasks = [
|
|
352
|
+
db.async_query("SELECT * FROM users WHERE id = 1"),
|
|
353
|
+
db.async_query("SELECT * FROM users WHERE id = 2"),
|
|
354
|
+
db.async_query("SELECT * FROM users WHERE id = 3")
|
|
355
|
+
]
|
|
356
|
+
return await asyncio.gather(*tasks)
|
|
357
|
+
# Time: 100ms (parallel execution)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Performance Improvement:** 3x faster (300ms → 100ms)
|
|
361
|
+
|
|
362
|
+
#### Async HTTP Requests
|
|
363
|
+
```python
|
|
364
|
+
# BEFORE: Synchronous requests
|
|
365
|
+
import requests
|
|
366
|
+
|
|
367
|
+
def fetch_apis():
|
|
368
|
+
data1 = requests.get("https://api1.com/data").json()
|
|
369
|
+
data2 = requests.get("https://api2.com/data").json()
|
|
370
|
+
data3 = requests.get("https://api3.com/data").json()
|
|
371
|
+
return [data1, data2, data3]
|
|
372
|
+
# Time: 1500ms (3 × 500ms sequential)
|
|
373
|
+
|
|
374
|
+
# AFTER: Async requests
|
|
375
|
+
import httpx
|
|
376
|
+
import asyncio
|
|
377
|
+
|
|
378
|
+
async def fetch_apis():
|
|
379
|
+
async with httpx.AsyncClient() as client:
|
|
380
|
+
tasks = [
|
|
381
|
+
client.get("https://api1.com/data"),
|
|
382
|
+
client.get("https://api2.com/data"),
|
|
383
|
+
client.get("https://api3.com/data")
|
|
384
|
+
]
|
|
385
|
+
responses = await asyncio.gather(*tasks)
|
|
386
|
+
return [r.json() for r in responses]
|
|
387
|
+
# Time: 500ms (parallel execution)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
**Performance Improvement:** 3x faster (1500ms → 500ms)
|
|
391
|
+
|
|
392
|
+
### 9. Type Hints for Runtime Performance
|
|
393
|
+
|
|
394
|
+
#### Use typing.TYPE_CHECKING for Import Optimization
|
|
395
|
+
```python
|
|
396
|
+
from typing import TYPE_CHECKING
|
|
397
|
+
|
|
398
|
+
if TYPE_CHECKING:
|
|
399
|
+
# Imports only used for type checking (removed at runtime)
|
|
400
|
+
from expensive_module import HeavyClass
|
|
401
|
+
|
|
402
|
+
def process_data(obj: 'HeavyClass') -> None:
|
|
403
|
+
# Runtime has no import overhead
|
|
404
|
+
pass
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**Benefits:**
|
|
408
|
+
- Faster imports (no runtime overhead)
|
|
409
|
+
- Reduced memory usage
|
|
410
|
+
- IDE still has full type information
|
|
411
|
+
|
|
412
|
+
#### Use typing.Protocol for Structural Typing
|
|
413
|
+
```python
|
|
414
|
+
from typing import Protocol
|
|
415
|
+
|
|
416
|
+
# BEFORE: Abstract base class (runtime inheritance)
|
|
417
|
+
from abc import ABC, abstractmethod
|
|
418
|
+
|
|
419
|
+
class Drawable(ABC):
|
|
420
|
+
@abstractmethod
|
|
421
|
+
def draw(self) -> None:
|
|
422
|
+
pass
|
|
423
|
+
|
|
424
|
+
# AFTER: Protocol (no runtime overhead)
|
|
425
|
+
class Drawable(Protocol):
|
|
426
|
+
def draw(self) -> None:
|
|
427
|
+
...
|
|
428
|
+
|
|
429
|
+
def render(obj: Drawable) -> None:
|
|
430
|
+
obj.draw() # Type-safe, no runtime check
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**Benefits:**
|
|
434
|
+
- Zero runtime overhead
|
|
435
|
+
- Duck typing with type safety
|
|
436
|
+
- Faster isinstance checks
|
|
437
|
+
|
|
438
|
+
## Optimization Output
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
🐍 Python Performance Optimization Analysis
|
|
442
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
443
|
+
|
|
444
|
+
Project: FastAPI Application
|
|
445
|
+
Framework: FastAPI 0.109.0
|
|
446
|
+
Python: 3.11.7
|
|
447
|
+
|
|
448
|
+
📊 Profiling Analysis (Pyinstrument)
|
|
449
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
450
|
+
|
|
451
|
+
Total Time: 1.234s
|
|
452
|
+
CPU Time: 0.456s
|
|
453
|
+
|
|
454
|
+
Top 5 Hotspots:
|
|
455
|
+
1. process_data() - 0.345s (28%) - api/handlers.py:42
|
|
456
|
+
2. database.query() - 0.234s (19%) - db/queries.py:156
|
|
457
|
+
3. json.dumps() - 0.156s (13%) - api/responses.py:23
|
|
458
|
+
4. validate_input() - 0.123s (10%) - api/validation.py:67
|
|
459
|
+
5. asyncio.sleep() - 0.100s (8%) - async operations
|
|
460
|
+
|
|
461
|
+
💡 Recommendations:
|
|
462
|
+
1. Cache process_data() results → Save ~0.3s per request
|
|
463
|
+
2. Use async database queries → 3x faster (parallel execution)
|
|
464
|
+
3. Use orjson instead of json → 2-3x faster serialization
|
|
465
|
+
4. Move validation to Pydantic models → 30% faster
|
|
466
|
+
|
|
467
|
+
⚡ Async/Await Optimization
|
|
468
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
469
|
+
|
|
470
|
+
⚠️ Found 5 synchronous I/O operations in async context
|
|
471
|
+
|
|
472
|
+
Files:
|
|
473
|
+
- api/handlers.py:42 - requests.get() (blocking)
|
|
474
|
+
- api/handlers.py:67 - db.query() (blocking)
|
|
475
|
+
- api/services.py:89 - time.sleep() (blocking)
|
|
476
|
+
|
|
477
|
+
💡 Recommendations:
|
|
478
|
+
1. Replace requests with httpx.AsyncClient
|
|
479
|
+
2. Use asyncpg for database (3x faster)
|
|
480
|
+
3. Replace time.sleep() with asyncio.sleep()
|
|
481
|
+
|
|
482
|
+
⚡ Expected Impact: 3x faster request handling
|
|
483
|
+
|
|
484
|
+
💾 Memory Optimization
|
|
485
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
486
|
+
|
|
487
|
+
Current Memory Usage: 145 MB
|
|
488
|
+
|
|
489
|
+
⚠️ Large list comprehensions detected
|
|
490
|
+
Files: api/processing.py:234, api/export.py:156
|
|
491
|
+
💡 Recommendation: Use generator expressions
|
|
492
|
+
⚡ Impact: 80 MB savings
|
|
493
|
+
|
|
494
|
+
⚠️ Classes without __slots__
|
|
495
|
+
Classes: Point, Coordinate, DataPoint (12,000+ instances)
|
|
496
|
+
💡 Recommendation: Add __slots__
|
|
497
|
+
⚡ Impact: 35 MB savings
|
|
498
|
+
|
|
499
|
+
Total Potential Savings: 115 MB (79%)
|
|
500
|
+
|
|
501
|
+
🎯 Type Hints Optimization
|
|
502
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
503
|
+
|
|
504
|
+
✅ Type hints coverage: 87%
|
|
505
|
+
⚠️ Heavy imports at runtime detected
|
|
506
|
+
|
|
507
|
+
Files: api/models.py, api/handlers.py
|
|
508
|
+
💡 Recommendation: Use TYPE_CHECKING
|
|
509
|
+
⚡ Impact: 15% faster imports
|
|
510
|
+
|
|
511
|
+
Summary
|
|
512
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
513
|
+
|
|
514
|
+
Total Optimizations: 12
|
|
515
|
+
|
|
516
|
+
🔴 Critical: 2 (blocking I/O in async)
|
|
517
|
+
🟡 High Impact: 5 (memory, async)
|
|
518
|
+
🟢 Low Impact: 5 (type hints, caching)
|
|
519
|
+
|
|
520
|
+
Estimated Performance Improvement:
|
|
521
|
+
- Request time: -60% (1.2s → 0.5s)
|
|
522
|
+
- Memory usage: -79% (145 MB → 30 MB)
|
|
523
|
+
- Import time: -15%
|
|
524
|
+
|
|
525
|
+
Run with --apply to implement optimizations
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
## Implementation
|
|
529
|
+
|
|
530
|
+
This command uses the **@python-backend-engineer** agent with profiling expertise:
|
|
531
|
+
|
|
532
|
+
1. Query Context7 for Python optimization patterns
|
|
533
|
+
2. Run Pyinstrument profiler on application
|
|
534
|
+
3. Analyze async/await usage
|
|
535
|
+
4. Check memory patterns (generators, __slots__)
|
|
536
|
+
5. Validate type hints usage
|
|
537
|
+
6. Generate optimization recommendations
|
|
538
|
+
7. Optionally apply automated fixes
|
|
539
|
+
|
|
540
|
+
## Best Practices Applied
|
|
541
|
+
|
|
542
|
+
Based on Context7 documentation from `/joerick/pyinstrument`:
|
|
543
|
+
|
|
544
|
+
1. **Pyinstrument Profiling** - Statistical sampling with low overhead
|
|
545
|
+
2. **Async/Await** - Parallel I/O operations
|
|
546
|
+
3. **Generator Expressions** - Memory-efficient iteration
|
|
547
|
+
4. **__slots__** - Reduce memory for many instances
|
|
548
|
+
5. **TYPE_CHECKING** - Zero-overhead type hints
|
|
549
|
+
6. **Request Profiling** - Production-safe on-demand profiling
|
|
550
|
+
|
|
551
|
+
## Related Commands
|
|
552
|
+
|
|
553
|
+
- `/python:api-scaffold` - Generate FastAPI application
|
|
554
|
+
- `/api:optimize` - API-specific optimization
|
|
555
|
+
- `/test:performance` - Performance testing
|
|
556
|
+
|
|
557
|
+
## Troubleshooting
|
|
558
|
+
|
|
559
|
+
### Pyinstrument Not Capturing Async Code
|
|
560
|
+
- Ensure using v4.0.0+
|
|
561
|
+
- Set `async_mode='enabled'`
|
|
562
|
+
- Verify async/await usage
|
|
563
|
+
|
|
564
|
+
### High Memory Usage
|
|
565
|
+
- Check for list comprehensions (use generators)
|
|
566
|
+
- Add __slots__ to classes with many instances
|
|
567
|
+
- Profile with `tracemalloc` module
|
|
568
|
+
|
|
569
|
+
### Slow Imports
|
|
570
|
+
- Move heavy imports inside functions
|
|
571
|
+
- Use TYPE_CHECKING for type-only imports
|
|
572
|
+
- Check for circular imports
|
|
573
|
+
|
|
574
|
+
## Installation
|
|
575
|
+
|
|
576
|
+
```bash
|
|
577
|
+
# Install Pyinstrument
|
|
578
|
+
pip install pyinstrument
|
|
579
|
+
|
|
580
|
+
# Install async HTTP client
|
|
581
|
+
pip install httpx
|
|
582
|
+
|
|
583
|
+
# Install async database driver (PostgreSQL)
|
|
584
|
+
pip install asyncpg
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
## Version History
|
|
588
|
+
|
|
589
|
+
- v2.0.0 - Initial Schema v2.0 release with Context7 integration
|
|
590
|
+
- Pyinstrument profiling patterns
|
|
591
|
+
- FastAPI async optimization
|
|
592
|
+
- Memory optimization techniques
|
|
593
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claudeautopm/plugin-languages",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Complete programming languages plugin with Python, JavaScript, Node.js, Bash experts, language rules, and example scripts for ClaudeAutoPM",
|
|
5
|
+
"main": "plugin.json",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"agents/",
|
|
9
|
+
"commands/",
|
|
10
|
+
"rules/",
|
|
11
|
+
"scripts/",
|
|
12
|
+
"plugin.json",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
18
|
+
"validate": "node -e \"require('./plugin.json')\" && echo 'plugin.json is valid'",
|
|
19
|
+
"lint:python": "find scripts/examples -name '*.py' -exec python3 -m py_compile {} \\;",
|
|
20
|
+
"lint:bash": "shellcheck scripts/examples/*.sh || true",
|
|
21
|
+
"lint:js": "eslint scripts/examples/*.js || true"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"claudeautopm",
|
|
25
|
+
"plugin",
|
|
26
|
+
"languages",
|
|
27
|
+
"python",
|
|
28
|
+
"javascript",
|
|
29
|
+
"nodejs",
|
|
30
|
+
"bash",
|
|
31
|
+
"typescript",
|
|
32
|
+
"fastapi",
|
|
33
|
+
"express",
|
|
34
|
+
"backend",
|
|
35
|
+
"frontend",
|
|
36
|
+
"async",
|
|
37
|
+
"es6",
|
|
38
|
+
"type-hints"
|
|
39
|
+
],
|
|
40
|
+
"author": {
|
|
41
|
+
"name": "ClaudeAutoPM Team",
|
|
42
|
+
"email": "autopm@example.com"
|
|
43
|
+
},
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/rafeekpro/ClaudeAutoPM.git",
|
|
48
|
+
"directory": "packages/plugin-languages"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/rafeekpro/ClaudeAutoPM/tree/main/packages/plugin-languages#readme",
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/rafeekpro/ClaudeAutoPM/issues"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=16.0.0",
|
|
56
|
+
"npm": ">=8.0.0"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@claudeautopm/plugin-core": "^2.0.0"
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public",
|
|
63
|
+
"registry": "https://registry.npmjs.org/"
|
|
64
|
+
}
|
|
65
|
+
}
|