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,413 @@
|
|
|
1
|
+
# Airflow DAG Scaffold Command
|
|
2
|
+
|
|
3
|
+
Generate a production-ready Apache Airflow DAG with Context7-verified best practices for data pipeline orchestration.
|
|
4
|
+
|
|
5
|
+
## Required Documentation Access
|
|
6
|
+
|
|
7
|
+
**MANDATORY:** Before scaffolding an Airflow DAG, query Context7 for best practices:
|
|
8
|
+
|
|
9
|
+
**Documentation Queries:**
|
|
10
|
+
- `mcp://context7/apache/airflow` - Topic: "DAG authoring, task dependencies, TaskFlow API, operators"
|
|
11
|
+
- `mcp://context7/apache/airflow` - Topic: "sensors, error handling, retries, scheduling"
|
|
12
|
+
- `mcp://context7/apache/airflow` - Topic: "executors, monitoring, testing best practices"
|
|
13
|
+
|
|
14
|
+
**Why This is Required:**
|
|
15
|
+
- Ensures DAGs follow latest Airflow patterns (TaskFlow API, bitshift operators)
|
|
16
|
+
- Applies Context7-verified error handling and retry mechanisms
|
|
17
|
+
- Validates sensor usage for external dependencies
|
|
18
|
+
- Confirms proper task dependency management
|
|
19
|
+
- Prevents anti-patterns in DAG structure
|
|
20
|
+
|
|
21
|
+
## Command Usage
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
/airflow-dag-scaffold <dag_name> [options]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Arguments
|
|
28
|
+
- `dag_name` (required): Name of the DAG to create (e.g., `data_processing_pipeline`)
|
|
29
|
+
|
|
30
|
+
### Options
|
|
31
|
+
- `--schedule`: Schedule interval (default: `@daily`)
|
|
32
|
+
- `--owner`: DAG owner (default: `airflow`)
|
|
33
|
+
- `--retries`: Number of retries (default: `3`)
|
|
34
|
+
- `--email`: Email for notifications
|
|
35
|
+
- `--use-taskflow`: Use TaskFlow API (@task decorators) (default: true)
|
|
36
|
+
|
|
37
|
+
## Implementation Steps
|
|
38
|
+
|
|
39
|
+
### 1. Query Context7 for Latest Patterns
|
|
40
|
+
|
|
41
|
+
Before generating any code, query Context7:
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
# Query Context7 for Airflow best practices
|
|
45
|
+
# Topics: DAG structure, TaskFlow API, dependencies, error handling
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. Generate DAG Structure
|
|
49
|
+
|
|
50
|
+
Create a production-ready DAG file with Context7-verified patterns:
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
"""
|
|
54
|
+
{{dag_name}} - Data Processing Pipeline
|
|
55
|
+
|
|
56
|
+
This DAG demonstrates Context7-verified Airflow patterns:
|
|
57
|
+
- TaskFlow API with @task decorators
|
|
58
|
+
- Bitshift operators for dependencies (>>, <<)
|
|
59
|
+
- Proper error handling and retries
|
|
60
|
+
- Sensor patterns for external dependencies
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
from datetime import datetime, timedelta
|
|
64
|
+
from typing import Dict, List
|
|
65
|
+
|
|
66
|
+
from airflow.decorators import dag, task
|
|
67
|
+
from airflow.operators.python import PythonOperator
|
|
68
|
+
from airflow.sensors.external_task import ExternalTaskSensor
|
|
69
|
+
from airflow.utils.task_group import TaskGroup
|
|
70
|
+
|
|
71
|
+
# ✅ CORRECT: Default arguments with proper error handling
|
|
72
|
+
default_args = {
|
|
73
|
+
"owner": "{{owner}}",
|
|
74
|
+
"depends_on_past": False,
|
|
75
|
+
"email": ["{{email}}"],
|
|
76
|
+
"email_on_failure": True,
|
|
77
|
+
"email_on_retry": False,
|
|
78
|
+
"retries": {{retries}},
|
|
79
|
+
"retry_delay": timedelta(minutes=5),
|
|
80
|
+
"retry_exponential_backoff": True,
|
|
81
|
+
"max_retry_delay": timedelta(hours=1),
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dag(
|
|
86
|
+
dag_id="{{dag_name}}",
|
|
87
|
+
default_args=default_args,
|
|
88
|
+
description="Production-ready data pipeline with Context7 patterns",
|
|
89
|
+
schedule_interval="{{schedule}}",
|
|
90
|
+
start_date=datetime(2025, 1, 1),
|
|
91
|
+
catchup=False,
|
|
92
|
+
tags=["data-processing", "etl", "production"],
|
|
93
|
+
)
|
|
94
|
+
def {{dag_name}}_dag():
|
|
95
|
+
"""
|
|
96
|
+
Main DAG definition using TaskFlow API.
|
|
97
|
+
|
|
98
|
+
Context7 Pattern: TaskFlow API with @task decorators
|
|
99
|
+
Source: /apache/airflow (5,854 snippets, trust 9.1)
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
# ===================================================================
|
|
103
|
+
# EXTRACTION PHASE
|
|
104
|
+
# ===================================================================
|
|
105
|
+
|
|
106
|
+
@task
|
|
107
|
+
def extract_from_source_a() -> Dict:
|
|
108
|
+
"""
|
|
109
|
+
Extract data from source A.
|
|
110
|
+
|
|
111
|
+
Context7 Pattern: @task decorator for Python functions
|
|
112
|
+
Returns data as dict for XCom passing
|
|
113
|
+
"""
|
|
114
|
+
import pandas as pd
|
|
115
|
+
|
|
116
|
+
# Extract logic here
|
|
117
|
+
data = {"records": [1, 2, 3, 4, 5], "count": 5}
|
|
118
|
+
|
|
119
|
+
print(f"Extracted {data['count']} records from source A")
|
|
120
|
+
return data
|
|
121
|
+
|
|
122
|
+
@task
|
|
123
|
+
def extract_from_source_b() -> Dict:
|
|
124
|
+
"""
|
|
125
|
+
Extract data from source B.
|
|
126
|
+
|
|
127
|
+
Context7 Pattern: Parallel extraction using independent tasks
|
|
128
|
+
"""
|
|
129
|
+
import pandas as pd
|
|
130
|
+
|
|
131
|
+
# Extract logic here
|
|
132
|
+
data = {"records": [6, 7, 8, 9, 10], "count": 5}
|
|
133
|
+
|
|
134
|
+
print(f"Extracted {data['count']} records from source B")
|
|
135
|
+
return data
|
|
136
|
+
|
|
137
|
+
# ===================================================================
|
|
138
|
+
# TRANSFORMATION PHASE
|
|
139
|
+
# ===================================================================
|
|
140
|
+
|
|
141
|
+
@task
|
|
142
|
+
def transform_data(source_a: Dict, source_b: Dict) -> Dict:
|
|
143
|
+
"""
|
|
144
|
+
Transform and combine data from multiple sources.
|
|
145
|
+
|
|
146
|
+
Context7 Pattern: TaskFlow automatically handles XCom passing
|
|
147
|
+
Parameters match task outputs
|
|
148
|
+
"""
|
|
149
|
+
combined_records = source_a["records"] + source_b["records"]
|
|
150
|
+
total_count = source_a["count"] + source_b["count"]
|
|
151
|
+
|
|
152
|
+
# Transformation logic
|
|
153
|
+
transformed = {
|
|
154
|
+
"records": [x * 2 for x in combined_records],
|
|
155
|
+
"count": total_count,
|
|
156
|
+
"transformation": "doubled"
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
print(f"Transformed {transformed['count']} records")
|
|
160
|
+
return transformed
|
|
161
|
+
|
|
162
|
+
@task
|
|
163
|
+
def validate_data(data: Dict) -> Dict:
|
|
164
|
+
"""
|
|
165
|
+
Validate transformed data.
|
|
166
|
+
|
|
167
|
+
Context7 Pattern: Data quality checks in pipeline
|
|
168
|
+
"""
|
|
169
|
+
assert data["count"] > 0, "No records to validate"
|
|
170
|
+
assert len(data["records"]) == data["count"], "Record count mismatch"
|
|
171
|
+
|
|
172
|
+
print(f"Validation passed for {data['count']} records")
|
|
173
|
+
return data
|
|
174
|
+
|
|
175
|
+
# ===================================================================
|
|
176
|
+
# LOADING PHASE
|
|
177
|
+
# ===================================================================
|
|
178
|
+
|
|
179
|
+
@task
|
|
180
|
+
def load_to_warehouse(data: Dict) -> None:
|
|
181
|
+
"""
|
|
182
|
+
Load validated data to data warehouse.
|
|
183
|
+
|
|
184
|
+
Context7 Pattern: Final task in ETL pipeline
|
|
185
|
+
"""
|
|
186
|
+
print(f"Loading {data['count']} records to warehouse")
|
|
187
|
+
# Load logic here
|
|
188
|
+
print("Load completed successfully")
|
|
189
|
+
|
|
190
|
+
@task
|
|
191
|
+
def send_notification(data: Dict) -> None:
|
|
192
|
+
"""
|
|
193
|
+
Send notification on pipeline completion.
|
|
194
|
+
|
|
195
|
+
Context7 Pattern: Notification task for monitoring
|
|
196
|
+
"""
|
|
197
|
+
message = f"Pipeline completed: {data['count']} records processed"
|
|
198
|
+
print(f"Notification: {message}")
|
|
199
|
+
# Send notification logic here
|
|
200
|
+
|
|
201
|
+
# ===================================================================
|
|
202
|
+
# DAG STRUCTURE WITH CONTEXT7 DEPENDENCY PATTERNS
|
|
203
|
+
# ===================================================================
|
|
204
|
+
|
|
205
|
+
# Context7 Pattern: TaskFlow automatically resolves dependencies
|
|
206
|
+
source_a_data = extract_from_source_a()
|
|
207
|
+
source_b_data = extract_from_source_b()
|
|
208
|
+
|
|
209
|
+
# Context7 Pattern: Pass multiple inputs to transformation
|
|
210
|
+
transformed = transform_data(source_a_data, source_b_data)
|
|
211
|
+
|
|
212
|
+
# Context7 Pattern: Sequential validation and loading
|
|
213
|
+
validated = validate_data(transformed)
|
|
214
|
+
load_task = load_to_warehouse(validated)
|
|
215
|
+
notify_task = send_notification(validated)
|
|
216
|
+
|
|
217
|
+
# Context7 Pattern: Bitshift operator for explicit dependencies
|
|
218
|
+
load_task >> notify_task
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
# Instantiate the DAG
|
|
222
|
+
dag_instance = {{dag_name}}_dag()
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 3. Generate TaskGroup Example (Optional)
|
|
226
|
+
|
|
227
|
+
For complex DAGs, create TaskGroups for organization:
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
@dag(...)
|
|
231
|
+
def complex_pipeline():
|
|
232
|
+
"""DAG with TaskGroups for organization."""
|
|
233
|
+
|
|
234
|
+
# ✅ CORRECT: TaskGroup for hierarchical organization
|
|
235
|
+
with TaskGroup("extraction_group") as extract_group:
|
|
236
|
+
@task
|
|
237
|
+
def extract_db():
|
|
238
|
+
return {"source": "database", "count": 100}
|
|
239
|
+
|
|
240
|
+
@task
|
|
241
|
+
def extract_api():
|
|
242
|
+
return {"source": "api", "count": 50}
|
|
243
|
+
|
|
244
|
+
db_data = extract_db()
|
|
245
|
+
api_data = extract_api()
|
|
246
|
+
|
|
247
|
+
with TaskGroup("transformation_group") as transform_group:
|
|
248
|
+
@task
|
|
249
|
+
def transform_db(data: Dict):
|
|
250
|
+
return {"transformed": data["count"] * 2}
|
|
251
|
+
|
|
252
|
+
@task
|
|
253
|
+
def transform_api(data: Dict):
|
|
254
|
+
return {"transformed": data["count"] * 3}
|
|
255
|
+
|
|
256
|
+
transform_db(db_data)
|
|
257
|
+
transform_api(api_data)
|
|
258
|
+
|
|
259
|
+
# Context7 Pattern: TaskGroup dependencies
|
|
260
|
+
extract_group >> transform_group
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 4. Generate Sensor Example (For External Dependencies)
|
|
264
|
+
|
|
265
|
+
For DAGs waiting on external tasks or files:
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
from airflow.sensors.external_task import ExternalTaskSensor
|
|
269
|
+
from airflow.providers.google.cloud.sensors.bigquery import BigQueryTableExistenceSensor
|
|
270
|
+
|
|
271
|
+
@dag(...)
|
|
272
|
+
def pipeline_with_sensors():
|
|
273
|
+
"""DAG with sensor patterns for external dependencies."""
|
|
274
|
+
|
|
275
|
+
# ✅ CORRECT: ExternalTaskSensor for DAG dependencies
|
|
276
|
+
wait_for_upstream = ExternalTaskSensor(
|
|
277
|
+
task_id="wait_for_upstream_dag",
|
|
278
|
+
external_dag_id="upstream_data_pipeline",
|
|
279
|
+
external_task_id="final_load_task",
|
|
280
|
+
allowed_states=["success"],
|
|
281
|
+
failed_states=["failed", "skipped"],
|
|
282
|
+
timeout=3600, # 1 hour timeout
|
|
283
|
+
poke_interval=300, # Check every 5 minutes
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
# ✅ CORRECT: BigQuery sensor for table existence
|
|
287
|
+
check_table_exists = BigQueryTableExistenceSensor(
|
|
288
|
+
task_id="check_source_table",
|
|
289
|
+
project_id="my-project",
|
|
290
|
+
dataset_id="raw_data",
|
|
291
|
+
table_id="daily_events",
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
@task
|
|
295
|
+
def process_data():
|
|
296
|
+
print("Processing data after sensors complete")
|
|
297
|
+
|
|
298
|
+
# Context7 Pattern: Sensors before processing
|
|
299
|
+
[wait_for_upstream, check_table_exists] >> process_data()
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 5. Generate Testing Template
|
|
303
|
+
|
|
304
|
+
Create test file for the DAG:
|
|
305
|
+
|
|
306
|
+
```python
|
|
307
|
+
"""
|
|
308
|
+
Tests for {{dag_name}} DAG
|
|
309
|
+
|
|
310
|
+
Context7 Pattern: Test DAG structure, dependencies, and node logic
|
|
311
|
+
"""
|
|
312
|
+
|
|
313
|
+
import pytest
|
|
314
|
+
from datetime import datetime
|
|
315
|
+
from airflow.models import DagBag
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def test_dag_loaded():
|
|
319
|
+
"""Test that DAG is properly loaded."""
|
|
320
|
+
dagbag = DagBag()
|
|
321
|
+
assert "{{dag_name}}" in dagbag.dags
|
|
322
|
+
assert len(dagbag.import_errors) == 0
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def test_dag_structure():
|
|
326
|
+
"""Test DAG has correct structure."""
|
|
327
|
+
dagbag = DagBag()
|
|
328
|
+
dag = dagbag.get_dag("{{dag_name}}")
|
|
329
|
+
|
|
330
|
+
# Check tasks exist
|
|
331
|
+
assert len(dag.tasks) > 0
|
|
332
|
+
|
|
333
|
+
# Check dependencies are correct
|
|
334
|
+
# Add specific assertions based on your DAG structure
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def test_task_execution():
|
|
338
|
+
"""Test individual task logic."""
|
|
339
|
+
from dags.{{dag_name}} import extract_from_source_a
|
|
340
|
+
|
|
341
|
+
result = extract_from_source_a.function()
|
|
342
|
+
assert result is not None
|
|
343
|
+
assert "records" in result
|
|
344
|
+
assert "count" in result
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## Context7-Verified Patterns Applied
|
|
348
|
+
|
|
349
|
+
### Task Dependencies
|
|
350
|
+
- ✅ Bitshift operators (`>>`, `<<`) for clear dependencies
|
|
351
|
+
- ✅ TaskFlow API automatic dependency resolution
|
|
352
|
+
- ✅ `chain()` function for sequential tasks
|
|
353
|
+
- ✅ `cross_downstream()` for fan-out patterns
|
|
354
|
+
|
|
355
|
+
### Error Handling
|
|
356
|
+
- ✅ Retry configuration with exponential backoff
|
|
357
|
+
- ✅ Email notifications on failure
|
|
358
|
+
- ✅ Proper timeout settings
|
|
359
|
+
- ✅ Task-level error callbacks
|
|
360
|
+
|
|
361
|
+
### TaskFlow API
|
|
362
|
+
- ✅ `@task` decorators for Python functions
|
|
363
|
+
- ✅ Automatic XCom passing between tasks
|
|
364
|
+
- ✅ Type hints for better code quality
|
|
365
|
+
- ✅ Return values for data passing
|
|
366
|
+
|
|
367
|
+
### Sensors
|
|
368
|
+
- ✅ ExternalTaskSensor for DAG dependencies
|
|
369
|
+
- ✅ Provider-specific sensors (BigQuery, S3, etc.)
|
|
370
|
+
- ✅ Proper timeout and poke interval settings
|
|
371
|
+
- ✅ Allowed and failed states configuration
|
|
372
|
+
|
|
373
|
+
### Organization
|
|
374
|
+
- ✅ TaskGroups for hierarchical structure
|
|
375
|
+
- ✅ Clear task naming conventions
|
|
376
|
+
- ✅ Documentation strings
|
|
377
|
+
- ✅ Logical phase separation (extract, transform, load)
|
|
378
|
+
|
|
379
|
+
## Output Files
|
|
380
|
+
|
|
381
|
+
The command generates:
|
|
382
|
+
|
|
383
|
+
1. `dags/{{dag_name}}.py` - Main DAG file
|
|
384
|
+
2. `tests/test_{{dag_name}}.py` - Test file
|
|
385
|
+
3. `README_{{dag_name}}.md` - Documentation
|
|
386
|
+
|
|
387
|
+
## Validation Checklist
|
|
388
|
+
|
|
389
|
+
After generation, verify:
|
|
390
|
+
|
|
391
|
+
- [ ] Context7 documentation queried
|
|
392
|
+
- [ ] TaskFlow API patterns applied correctly
|
|
393
|
+
- [ ] Dependencies are clear and correct
|
|
394
|
+
- [ ] Error handling configured
|
|
395
|
+
- [ ] Retries with exponential backoff
|
|
396
|
+
- [ ] Email notifications set up
|
|
397
|
+
- [ ] Tests cover DAG structure and logic
|
|
398
|
+
- [ ] Documentation is complete
|
|
399
|
+
|
|
400
|
+
## Related Resources
|
|
401
|
+
|
|
402
|
+
- Agent: `@airflow-orchestration-expert` for advanced patterns
|
|
403
|
+
- Rule: `data-quality-standards.md` for data validation
|
|
404
|
+
- Rule: `etl-pipeline-standards.md` for ETL best practices
|
|
405
|
+
- Script: `airflow-dag-example.py` for complete example
|
|
406
|
+
|
|
407
|
+
## Notes
|
|
408
|
+
|
|
409
|
+
- Always query Context7 before generating DAG code
|
|
410
|
+
- Use TaskFlow API for cleaner code and better maintainability
|
|
411
|
+
- Configure proper retries and error handling
|
|
412
|
+
- Test DAG structure before deployment
|
|
413
|
+
- Monitor DAG performance in Airflow UI
|