claude-autopm 2.8.2 → 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 -637
- package/package.json +2 -1
- package/packages/plugin-ai/LICENSE +21 -0
- package/packages/plugin-ai/README.md +316 -0
- package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
- package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
- package/packages/plugin-ai/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
- package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
- package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
- package/packages/plugin-ai/agents/langgraph-workflow-expert.md +520 -0
- package/packages/plugin-ai/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-ai/commands/a2a-setup.md +886 -0
- package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
- package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
- package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
- package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
- package/packages/plugin-ai/commands/llm-optimize.md +348 -0
- package/packages/plugin-ai/commands/openai-optimize.md +863 -0
- package/packages/plugin-ai/commands/rag-optimize.md +841 -0
- package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
- package/packages/plugin-ai/package.json +66 -0
- package/packages/plugin-ai/plugin.json +519 -0
- package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
- package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
- package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
- package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
- package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
- package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
- package/packages/plugin-cloud/README.md +268 -0
- package/packages/plugin-cloud/agents/README.md +55 -0
- package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
- package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
- package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
- package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
- package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
- package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
- package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
- package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -0
- package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
- package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
- package/packages/plugin-cloud/commands/infra-deploy.md +38 -0
- package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
- package/packages/plugin-cloud/commands/ssh-security.md +65 -0
- package/packages/plugin-cloud/commands/traefik-setup.md +65 -0
- package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
- package/packages/plugin-cloud/package.json +64 -0
- package/packages/plugin-cloud/plugin.json +338 -0
- package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
- package/packages/plugin-cloud/rules/infrastructure-pipeline.md +128 -0
- package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
- package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
- package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
- package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
- package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
- package/packages/plugin-core/README.md +274 -0
- package/packages/plugin-core/agents/core/agent-manager.md +296 -0
- package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
- package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
- package/packages/plugin-core/agents/core/test-runner.md +200 -0
- package/packages/plugin-core/commands/code-rabbit.md +128 -0
- package/packages/plugin-core/commands/prompt.md +9 -0
- package/packages/plugin-core/commands/re-init.md +9 -0
- package/packages/plugin-core/hooks/context7-reminder.md +29 -0
- package/packages/plugin-core/hooks/enforce-agents.js +125 -0
- package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
- package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
- package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
- package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
- package/packages/plugin-core/hooks/test-hook.sh +21 -0
- package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
- package/packages/plugin-core/package.json +45 -0
- package/packages/plugin-core/plugin.json +387 -0
- package/packages/plugin-core/rules/agent-coordination.md +549 -0
- package/packages/plugin-core/rules/agent-mandatory.md +170 -0
- package/packages/plugin-core/rules/ai-integration-patterns.md +219 -0
- package/packages/plugin-core/rules/command-pipelines.md +208 -0
- package/packages/plugin-core/rules/context-optimization.md +176 -0
- package/packages/plugin-core/rules/context7-enforcement.md +327 -0
- package/packages/plugin-core/rules/datetime.md +122 -0
- package/packages/plugin-core/rules/definition-of-done.md +272 -0
- package/packages/plugin-core/rules/development-environments.md +19 -0
- package/packages/plugin-core/rules/development-workflow.md +198 -0
- package/packages/plugin-core/rules/framework-path-rules.md +180 -0
- package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
- package/packages/plugin-core/rules/git-strategy.md +237 -0
- package/packages/plugin-core/rules/golden-rules.md +181 -0
- package/packages/plugin-core/rules/naming-conventions.md +111 -0
- package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
- package/packages/plugin-core/rules/performance-guidelines.md +403 -0
- package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
- package/packages/plugin-core/rules/security-checklist.md +318 -0
- package/packages/plugin-core/rules/standard-patterns.md +197 -0
- package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
- package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
- package/packages/plugin-core/rules/use-ast-grep.md +113 -0
- package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
- package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
- package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
- package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
- package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
- package/packages/plugin-core/scripts/mcp/add.sh +7 -0
- package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
- package/packages/plugin-core/scripts/mcp/list.sh +7 -0
- package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
- package/packages/plugin-data/README.md +315 -0
- package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
- package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
- package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
- package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
- package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
- package/packages/plugin-data/package.json +66 -0
- package/packages/plugin-data/plugin.json +294 -0
- package/packages/plugin-data/rules/data-quality-standards.md +373 -0
- package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
- package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
- package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
- package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
- package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
- package/packages/plugin-databases/README.md +330 -0
- package/packages/plugin-databases/agents/README.md +50 -0
- package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
- package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
- package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
- package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
- package/packages/plugin-databases/agents/redis-expert.md +74 -0
- package/packages/plugin-databases/commands/db-optimize.md +612 -0
- package/packages/plugin-databases/package.json +60 -0
- package/packages/plugin-databases/plugin.json +237 -0
- package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
- package/packages/plugin-databases/rules/database-pipeline.md +316 -0
- package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
- package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
- package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
- package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
- package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
- package/packages/plugin-devops/README.md +367 -0
- package/packages/plugin-devops/agents/README.md +52 -0
- package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
- package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
- package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
- package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
- package/packages/plugin-devops/agents/observability-engineer.md +574 -0
- package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
- package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
- package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
- package/packages/plugin-devops/commands/docker-optimize.md +493 -0
- package/packages/plugin-devops/commands/workflow-create.md +42 -0
- package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
- package/packages/plugin-devops/package.json +61 -0
- package/packages/plugin-devops/plugin.json +302 -0
- package/packages/plugin-devops/rules/ci-cd-kubernetes-strategy.md +25 -0
- package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
- package/packages/plugin-devops/rules/docker-first-development.md +404 -0
- package/packages/plugin-devops/rules/github-operations.md +92 -0
- package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
- package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
- package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
- package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
- package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
- package/packages/plugin-frameworks/README.md +309 -0
- package/packages/plugin-frameworks/agents/README.md +64 -0
- package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
- package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
- package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
- package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
- package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
- package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
- package/packages/plugin-frameworks/commands/app-scaffold.md +50 -0
- package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
- package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
- package/packages/plugin-frameworks/commands/tailwind-system.md +64 -0
- package/packages/plugin-frameworks/package.json +59 -0
- package/packages/plugin-frameworks/plugin.json +224 -0
- package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
- package/packages/plugin-frameworks/rules/ui-development-standards.md +281 -0
- package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -0
- package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
- package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
- package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
- package/packages/plugin-languages/README.md +333 -0
- package/packages/plugin-languages/agents/README.md +50 -0
- package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
- package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
- package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
- package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
- package/packages/plugin-languages/agents/python-backend-expert.md +289 -0
- package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
- package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
- package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
- package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
- package/packages/plugin-languages/commands/python-optimize.md +593 -0
- package/packages/plugin-languages/package.json +65 -0
- package/packages/plugin-languages/plugin.json +265 -0
- package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
- package/packages/plugin-languages/rules/testing-standards.md +768 -0
- package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
- package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
- package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
- package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
- package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
- package/packages/plugin-ml/README.md +430 -0
- package/packages/plugin-ml/agents/automl-expert.md +326 -0
- package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
- package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
- package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
- package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
- package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
- package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
- package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
- package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
- package/packages/plugin-ml/agents/time-series-expert.md +303 -0
- package/packages/plugin-ml/commands/ml-automl.md +572 -0
- package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
- package/packages/plugin-ml/package.json +52 -0
- package/packages/plugin-ml/plugin.json +338 -0
- package/packages/plugin-pm/README.md +368 -0
- package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
- package/packages/plugin-pm/commands/azure/COMMANDS.md +107 -0
- package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
- package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
- package/packages/plugin-pm/commands/azure/README.md +246 -0
- package/packages/plugin-pm/commands/azure/active-work.md +198 -0
- package/packages/plugin-pm/commands/azure/aliases.md +143 -0
- package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
- package/packages/plugin-pm/commands/azure/clean.md +93 -0
- package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
- package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
- package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
- package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
- package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
- package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
- package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
- package/packages/plugin-pm/commands/azure/help.md +150 -0
- package/packages/plugin-pm/commands/azure/import-us.md +269 -0
- package/packages/plugin-pm/commands/azure/init.md +211 -0
- package/packages/plugin-pm/commands/azure/next-task.md +262 -0
- package/packages/plugin-pm/commands/azure/search.md +160 -0
- package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
- package/packages/plugin-pm/commands/azure/standup.md +260 -0
- package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
- package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
- package/packages/plugin-pm/commands/azure/task-close.md +329 -0
- package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
- package/packages/plugin-pm/commands/azure/task-list.md +263 -0
- package/packages/plugin-pm/commands/azure/task-new.md +84 -0
- package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
- package/packages/plugin-pm/commands/azure/task-show.md +126 -0
- package/packages/plugin-pm/commands/azure/task-start.md +301 -0
- package/packages/plugin-pm/commands/azure/task-status.md +65 -0
- package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
- package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
- package/packages/plugin-pm/commands/azure/us-list.md +202 -0
- package/packages/plugin-pm/commands/azure/us-new.md +265 -0
- package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
- package/packages/plugin-pm/commands/azure/us-show.md +188 -0
- package/packages/plugin-pm/commands/azure/us-status.md +320 -0
- package/packages/plugin-pm/commands/azure/validate.md +86 -0
- package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
- package/packages/plugin-pm/commands/blocked.md +28 -0
- package/packages/plugin-pm/commands/clean.md +119 -0
- package/packages/plugin-pm/commands/context-create.md +136 -0
- package/packages/plugin-pm/commands/context-prime.md +170 -0
- package/packages/plugin-pm/commands/context-update.md +292 -0
- package/packages/plugin-pm/commands/context.md +28 -0
- package/packages/plugin-pm/commands/epic-close.md +86 -0
- package/packages/plugin-pm/commands/epic-decompose.md +370 -0
- package/packages/plugin-pm/commands/epic-edit.md +83 -0
- package/packages/plugin-pm/commands/epic-list.md +30 -0
- package/packages/plugin-pm/commands/epic-merge.md +222 -0
- package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
- package/packages/plugin-pm/commands/epic-refresh.md +119 -0
- package/packages/plugin-pm/commands/epic-show.md +28 -0
- package/packages/plugin-pm/commands/epic-split.md +120 -0
- package/packages/plugin-pm/commands/epic-start.md +195 -0
- package/packages/plugin-pm/commands/epic-status.md +28 -0
- package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
- package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
- package/packages/plugin-pm/commands/epic-sync.md +486 -0
- package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
- package/packages/plugin-pm/commands/help.md +28 -0
- package/packages/plugin-pm/commands/import.md +115 -0
- package/packages/plugin-pm/commands/in-progress.md +28 -0
- package/packages/plugin-pm/commands/init.md +28 -0
- package/packages/plugin-pm/commands/issue-analyze.md +202 -0
- package/packages/plugin-pm/commands/issue-close.md +119 -0
- package/packages/plugin-pm/commands/issue-edit.md +93 -0
- package/packages/plugin-pm/commands/issue-reopen.md +87 -0
- package/packages/plugin-pm/commands/issue-show.md +41 -0
- package/packages/plugin-pm/commands/issue-start.md +234 -0
- package/packages/plugin-pm/commands/issue-status.md +95 -0
- package/packages/plugin-pm/commands/issue-sync.md +411 -0
- package/packages/plugin-pm/commands/next.md +28 -0
- package/packages/plugin-pm/commands/prd-edit.md +82 -0
- package/packages/plugin-pm/commands/prd-list.md +28 -0
- package/packages/plugin-pm/commands/prd-new.md +55 -0
- package/packages/plugin-pm/commands/prd-parse.md +42 -0
- package/packages/plugin-pm/commands/prd-status.md +28 -0
- package/packages/plugin-pm/commands/search.md +28 -0
- package/packages/plugin-pm/commands/standup.md +28 -0
- package/packages/plugin-pm/commands/status.md +28 -0
- package/packages/plugin-pm/commands/sync.md +99 -0
- package/packages/plugin-pm/commands/test-reference-update.md +151 -0
- package/packages/plugin-pm/commands/validate.md +28 -0
- package/packages/plugin-pm/commands/what-next.md +28 -0
- package/packages/plugin-pm/package.json +57 -0
- package/packages/plugin-pm/plugin.json +503 -0
- package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
- package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
- package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
- package/packages/plugin-pm/scripts/pm/clean.js +464 -0
- package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
- package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
- package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
- package/packages/plugin-pm/scripts/pm/context.js +338 -0
- package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
- package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
- package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
- package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
- package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
- package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
- package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
- package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
- package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
- package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
- package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
- package/packages/plugin-pm/scripts/pm/help.js +92 -0
- package/packages/plugin-pm/scripts/pm/help.sh +90 -0
- package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
- package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
- package/packages/plugin-pm/scripts/pm/init.js +321 -0
- package/packages/plugin-pm/scripts/pm/init.sh +178 -0
- package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
- package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
- package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
- package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
- package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
- package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
- package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
- package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
- package/packages/plugin-pm/scripts/pm/next.js +189 -0
- package/packages/plugin-pm/scripts/pm/next.sh +72 -0
- package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
- package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
- package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
- package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
- package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
- package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
- package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
- package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
- package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
- package/packages/plugin-pm/scripts/pm/release.js +460 -0
- package/packages/plugin-pm/scripts/pm/search.js +192 -0
- package/packages/plugin-pm/scripts/pm/search.sh +89 -0
- package/packages/plugin-pm/scripts/pm/standup.js +362 -0
- package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
- package/packages/plugin-pm/scripts/pm/status.js +148 -0
- package/packages/plugin-pm/scripts/pm/status.sh +59 -0
- package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
- package/packages/plugin-pm/scripts/pm/sync.js +343 -0
- package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
- package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
- package/packages/plugin-pm/scripts/pm/validate.js +274 -0
- package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
- package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
- package/packages/plugin-testing/README.md +401 -0
- package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -0
- package/packages/plugin-testing/commands/jest-optimize.md +800 -0
- package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
- package/packages/plugin-testing/commands/test-coverage.md +512 -0
- package/packages/plugin-testing/commands/test-performance.md +1041 -0
- package/packages/plugin-testing/commands/test-setup.md +414 -0
- package/packages/plugin-testing/package.json +40 -0
- package/packages/plugin-testing/plugin.json +197 -0
- package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
- package/packages/plugin-testing/rules/testing-standards.md +529 -0
- package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
- package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
- package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
# Kafka Pipeline Scaffold Command
|
|
2
|
+
|
|
3
|
+
Generate a production-ready Apache Kafka streaming pipeline with Context7-verified best practices for event-driven data processing.
|
|
4
|
+
|
|
5
|
+
## Required Documentation Access
|
|
6
|
+
|
|
7
|
+
**MANDATORY:** Before scaffolding a Kafka pipeline, query Context7 for best practices:
|
|
8
|
+
|
|
9
|
+
**Documentation Queries:**
|
|
10
|
+
- `mcp://context7/apache/kafka` - Topic: "producers, consumers, topics, partitions, configuration"
|
|
11
|
+
- `mcp://context7/apache/kafka` - Topic: "Kafka Streams, processors, state stores, windowing"
|
|
12
|
+
- `mcp://context7/apache/kafka` - Topic: "error handling, exactly-once semantics, monitoring"
|
|
13
|
+
|
|
14
|
+
**Why This is Required:**
|
|
15
|
+
- Ensures pipelines follow latest Kafka patterns and configuration
|
|
16
|
+
- Applies Context7-verified error handling and retry mechanisms
|
|
17
|
+
- Validates producer/consumer configuration for performance
|
|
18
|
+
- Confirms proper topic and partition management
|
|
19
|
+
- Prevents data loss with proper commit strategies
|
|
20
|
+
|
|
21
|
+
## Command Usage
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
/kafka-pipeline-scaffold <pipeline_name> [options]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Arguments
|
|
28
|
+
- `pipeline_name` (required): Name of the pipeline (e.g., `user_events_processor`)
|
|
29
|
+
|
|
30
|
+
### Options
|
|
31
|
+
- `--type`: Pipeline type (`producer`, `consumer`, `streams`) (default: `consumer`)
|
|
32
|
+
- `--topic`: Kafka topic name (default: `${pipeline_name}_topic`)
|
|
33
|
+
- `--group-id`: Consumer group ID (default: `${pipeline_name}_group`)
|
|
34
|
+
- `--bootstrap-servers`: Kafka bootstrap servers (default: `localhost:9092`)
|
|
35
|
+
|
|
36
|
+
## Implementation Steps
|
|
37
|
+
|
|
38
|
+
### 1. Query Context7 for Latest Patterns
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
# Query Context7 for Kafka best practices
|
|
42
|
+
# Topics: Configuration, producers, consumers, Kafka Streams
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 2. Generate Kafka Producer
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
"""
|
|
49
|
+
Kafka Producer - {{pipeline_name}}
|
|
50
|
+
|
|
51
|
+
Context7-verified patterns for reliable event production.
|
|
52
|
+
Source: /apache/kafka (1,281 snippets, trust 9.1)
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
from kafka import KafkaProducer
|
|
56
|
+
from kafka.errors import KafkaError
|
|
57
|
+
import json
|
|
58
|
+
import logging
|
|
59
|
+
from typing import Dict, Optional
|
|
60
|
+
from datetime import datetime
|
|
61
|
+
|
|
62
|
+
logging.basicConfig(level=logging.INFO)
|
|
63
|
+
logger = logging.getLogger(__name__)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class {{PipelineName}}Producer:
|
|
67
|
+
"""
|
|
68
|
+
Production-ready Kafka producer with Context7 patterns.
|
|
69
|
+
|
|
70
|
+
Context7 Patterns Applied:
|
|
71
|
+
- Proper configuration (bootstrap.servers, acks, retries)
|
|
72
|
+
- Error handling and retry logic
|
|
73
|
+
- Serialization (JSON, Avro, Protobuf)
|
|
74
|
+
- Callback functions for delivery confirmation
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
def __init__(
|
|
78
|
+
self,
|
|
79
|
+
bootstrap_servers: str = "{{bootstrap_servers}}",
|
|
80
|
+
topic: str = "{{topic}}",
|
|
81
|
+
):
|
|
82
|
+
"""
|
|
83
|
+
Initialize Kafka producer with Context7-verified configuration.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
bootstrap_servers: Comma-separated list of Kafka brokers
|
|
87
|
+
topic: Target topic name
|
|
88
|
+
"""
|
|
89
|
+
self.topic = topic
|
|
90
|
+
|
|
91
|
+
# ✅ CORRECT: Producer configuration with proper settings
|
|
92
|
+
self.producer = KafkaProducer(
|
|
93
|
+
bootstrap_servers=bootstrap_servers,
|
|
94
|
+
# Serialization
|
|
95
|
+
value_serializer=lambda v: json.dumps(v).encode('utf-8'),
|
|
96
|
+
key_serializer=lambda k: k.encode('utf-8') if k else None,
|
|
97
|
+
# Reliability settings
|
|
98
|
+
acks='all', # Wait for all replicas
|
|
99
|
+
retries=3, # Retry failed sends
|
|
100
|
+
max_in_flight_requests_per_connection=1, # Ordered delivery
|
|
101
|
+
# Performance settings
|
|
102
|
+
compression_type='snappy',
|
|
103
|
+
batch_size=16384,
|
|
104
|
+
linger_ms=10,
|
|
105
|
+
# Error handling
|
|
106
|
+
request_timeout_ms=30000,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
logger.info(f"Producer initialized for topic: {self.topic}")
|
|
110
|
+
|
|
111
|
+
def send_event(
|
|
112
|
+
self,
|
|
113
|
+
key: str,
|
|
114
|
+
value: Dict,
|
|
115
|
+
callback: Optional[callable] = None
|
|
116
|
+
) -> None:
|
|
117
|
+
"""
|
|
118
|
+
Send event to Kafka with proper error handling.
|
|
119
|
+
|
|
120
|
+
Context7 Pattern: Async sending with callback for delivery confirmation
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
key: Message key for partitioning
|
|
124
|
+
value: Message value (dict)
|
|
125
|
+
callback: Optional callback for delivery confirmation
|
|
126
|
+
"""
|
|
127
|
+
try:
|
|
128
|
+
# Add timestamp
|
|
129
|
+
value["timestamp"] = datetime.utcnow().isoformat()
|
|
130
|
+
|
|
131
|
+
# ✅ CORRECT: Async send with callback
|
|
132
|
+
future = self.producer.send(
|
|
133
|
+
self.topic,
|
|
134
|
+
key=key,
|
|
135
|
+
value=value
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
# Add callback or use default
|
|
139
|
+
if callback:
|
|
140
|
+
future.add_callback(callback)
|
|
141
|
+
future.add_errback(self._on_send_error)
|
|
142
|
+
else:
|
|
143
|
+
future.add_callback(self._on_send_success)
|
|
144
|
+
future.add_errback(self._on_send_error)
|
|
145
|
+
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.error(f"Error sending message: {e}")
|
|
148
|
+
raise
|
|
149
|
+
|
|
150
|
+
def _on_send_success(self, record_metadata):
|
|
151
|
+
"""Callback for successful message delivery."""
|
|
152
|
+
logger.info(
|
|
153
|
+
f"Message delivered: topic={record_metadata.topic}, "
|
|
154
|
+
f"partition={record_metadata.partition}, "
|
|
155
|
+
f"offset={record_metadata.offset}"
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
def _on_send_error(self, excp):
|
|
159
|
+
"""Callback for failed message delivery."""
|
|
160
|
+
logger.error(f"Message delivery failed: {excp}")
|
|
161
|
+
|
|
162
|
+
def flush_and_close(self):
|
|
163
|
+
"""
|
|
164
|
+
Flush pending messages and close producer.
|
|
165
|
+
|
|
166
|
+
Context7 Pattern: Always flush before closing to prevent data loss
|
|
167
|
+
"""
|
|
168
|
+
logger.info("Flushing pending messages...")
|
|
169
|
+
self.producer.flush()
|
|
170
|
+
self.producer.close()
|
|
171
|
+
logger.info("Producer closed")
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# Example usage
|
|
175
|
+
if __name__ == "__main__":
|
|
176
|
+
producer = {{PipelineName}}Producer()
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
# Send events
|
|
180
|
+
for i in range(10):
|
|
181
|
+
producer.send_event(
|
|
182
|
+
key=f"user_{i}",
|
|
183
|
+
value={
|
|
184
|
+
"user_id": i,
|
|
185
|
+
"event_type": "page_view",
|
|
186
|
+
"page": f"/page/{i}",
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
logger.info("All events sent")
|
|
191
|
+
|
|
192
|
+
finally:
|
|
193
|
+
producer.flush_and_close()
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 3. Generate Kafka Consumer
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
"""
|
|
200
|
+
Kafka Consumer - {{pipeline_name}}
|
|
201
|
+
|
|
202
|
+
Context7-verified patterns for reliable event consumption.
|
|
203
|
+
Source: /apache/kafka (1,281 snippets, trust 9.1)
|
|
204
|
+
"""
|
|
205
|
+
|
|
206
|
+
from kafka import KafkaConsumer
|
|
207
|
+
from kafka.errors import KafkaError
|
|
208
|
+
import json
|
|
209
|
+
import logging
|
|
210
|
+
from typing import Dict, Callable
|
|
211
|
+
import signal
|
|
212
|
+
import sys
|
|
213
|
+
|
|
214
|
+
logging.basicConfig(level=logging.INFO)
|
|
215
|
+
logger = logging.getLogger(__name__)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class {{PipelineName}}Consumer:
|
|
219
|
+
"""
|
|
220
|
+
Production-ready Kafka consumer with Context7 patterns.
|
|
221
|
+
|
|
222
|
+
Context7 Patterns Applied:
|
|
223
|
+
- Proper configuration (consumer.* prefix)
|
|
224
|
+
- Commit strategies (auto vs manual)
|
|
225
|
+
- Error handling and retry logic
|
|
226
|
+
- Graceful shutdown
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
def __init__(
|
|
230
|
+
self,
|
|
231
|
+
bootstrap_servers: str = "{{bootstrap_servers}}",
|
|
232
|
+
topic: str = "{{topic}}",
|
|
233
|
+
group_id: str = "{{group_id}}",
|
|
234
|
+
):
|
|
235
|
+
"""
|
|
236
|
+
Initialize Kafka consumer with Context7-verified configuration.
|
|
237
|
+
|
|
238
|
+
Args:
|
|
239
|
+
bootstrap_servers: Comma-separated list of Kafka brokers
|
|
240
|
+
topic: Topic to consume from
|
|
241
|
+
group_id: Consumer group ID
|
|
242
|
+
"""
|
|
243
|
+
self.topic = topic
|
|
244
|
+
self.running = True
|
|
245
|
+
|
|
246
|
+
# ✅ CORRECT: Consumer configuration with proper settings
|
|
247
|
+
self.consumer = KafkaConsumer(
|
|
248
|
+
topic,
|
|
249
|
+
bootstrap_servers=bootstrap_servers,
|
|
250
|
+
group_id=group_id,
|
|
251
|
+
# Deserialization
|
|
252
|
+
value_deserializer=lambda m: json.loads(m.decode('utf-8')),
|
|
253
|
+
key_deserializer=lambda k: k.decode('utf-8') if k else None,
|
|
254
|
+
# Commit strategy
|
|
255
|
+
enable_auto_commit=False, # Manual commit for reliability
|
|
256
|
+
auto_offset_reset='earliest', # Start from beginning if no offset
|
|
257
|
+
# Performance settings
|
|
258
|
+
max_poll_records=100,
|
|
259
|
+
max_poll_interval_ms=300000,
|
|
260
|
+
session_timeout_ms=10000,
|
|
261
|
+
# Error handling
|
|
262
|
+
request_timeout_ms=30000,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
# Setup graceful shutdown
|
|
266
|
+
signal.signal(signal.SIGINT, self._shutdown)
|
|
267
|
+
signal.signal(signal.SIGTERM, self._shutdown)
|
|
268
|
+
|
|
269
|
+
logger.info(f"Consumer initialized: topic={self.topic}, group={group_id}")
|
|
270
|
+
|
|
271
|
+
def consume(self, process_func: Callable[[Dict], None]) -> None:
|
|
272
|
+
"""
|
|
273
|
+
Consume messages with proper error handling and commit strategy.
|
|
274
|
+
|
|
275
|
+
Context7 Pattern: Manual commit after successful processing
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
process_func: Function to process each message
|
|
279
|
+
"""
|
|
280
|
+
try:
|
|
281
|
+
while self.running:
|
|
282
|
+
# ✅ CORRECT: Poll with timeout
|
|
283
|
+
messages = self.consumer.poll(timeout_ms=1000)
|
|
284
|
+
|
|
285
|
+
if not messages:
|
|
286
|
+
continue
|
|
287
|
+
|
|
288
|
+
for topic_partition, records in messages.items():
|
|
289
|
+
for record in records:
|
|
290
|
+
try:
|
|
291
|
+
# Process message
|
|
292
|
+
logger.info(
|
|
293
|
+
f"Processing: partition={record.partition}, "
|
|
294
|
+
f"offset={record.offset}, key={record.key}"
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
process_func(record.value)
|
|
298
|
+
|
|
299
|
+
# ✅ CORRECT: Commit after successful processing
|
|
300
|
+
self.consumer.commit()
|
|
301
|
+
|
|
302
|
+
except Exception as e:
|
|
303
|
+
logger.error(f"Error processing message: {e}")
|
|
304
|
+
# Decide: skip or retry based on your use case
|
|
305
|
+
# For this example, we log and continue
|
|
306
|
+
continue
|
|
307
|
+
|
|
308
|
+
except Exception as e:
|
|
309
|
+
logger.error(f"Consumer error: {e}")
|
|
310
|
+
raise
|
|
311
|
+
|
|
312
|
+
finally:
|
|
313
|
+
self._close()
|
|
314
|
+
|
|
315
|
+
def _shutdown(self, signum, frame):
|
|
316
|
+
"""Handle graceful shutdown."""
|
|
317
|
+
logger.info("Shutdown signal received")
|
|
318
|
+
self.running = False
|
|
319
|
+
|
|
320
|
+
def _close(self):
|
|
321
|
+
"""Close consumer gracefully."""
|
|
322
|
+
logger.info("Closing consumer...")
|
|
323
|
+
self.consumer.close()
|
|
324
|
+
logger.info("Consumer closed")
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def process_message(message: Dict) -> None:
|
|
328
|
+
"""
|
|
329
|
+
Process a single message.
|
|
330
|
+
|
|
331
|
+
Replace this with your business logic.
|
|
332
|
+
|
|
333
|
+
Args:
|
|
334
|
+
message: Deserialized message value
|
|
335
|
+
"""
|
|
336
|
+
logger.info(f"Processing message: {message}")
|
|
337
|
+
# Your processing logic here
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
# Example usage
|
|
341
|
+
if __name__ == "__main__":
|
|
342
|
+
consumer = {{PipelineName}}Consumer()
|
|
343
|
+
|
|
344
|
+
try:
|
|
345
|
+
consumer.consume(process_message)
|
|
346
|
+
except KeyboardInterrupt:
|
|
347
|
+
logger.info("Consumer stopped by user")
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 4. Generate Kafka Streams Application (Advanced)
|
|
351
|
+
|
|
352
|
+
```python
|
|
353
|
+
"""
|
|
354
|
+
Kafka Streams Application - {{pipeline_name}}
|
|
355
|
+
|
|
356
|
+
Context7-verified patterns for stream processing.
|
|
357
|
+
"""
|
|
358
|
+
|
|
359
|
+
# Note: Python support for Kafka Streams is limited
|
|
360
|
+
# Consider using kafka-python for simple streaming
|
|
361
|
+
# or Java/Scala Kafka Streams for complex processing
|
|
362
|
+
|
|
363
|
+
from kafka import KafkaConsumer, KafkaProducer
|
|
364
|
+
import json
|
|
365
|
+
import logging
|
|
366
|
+
from typing import Dict
|
|
367
|
+
from collections import defaultdict
|
|
368
|
+
from datetime import datetime, timedelta
|
|
369
|
+
|
|
370
|
+
logging.basicConfig(level=logging.INFO)
|
|
371
|
+
logger = logging.getLogger(__name__)
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
class {{PipelineName}}StreamProcessor:
|
|
375
|
+
"""
|
|
376
|
+
Stream processor with Context7 patterns.
|
|
377
|
+
|
|
378
|
+
Context7 Patterns Applied:
|
|
379
|
+
- Stateful processing with windowing
|
|
380
|
+
- Stream transformations
|
|
381
|
+
- Output to downstream topic
|
|
382
|
+
"""
|
|
383
|
+
|
|
384
|
+
def __init__(
|
|
385
|
+
self,
|
|
386
|
+
bootstrap_servers: str = "{{bootstrap_servers}}",
|
|
387
|
+
input_topic: str = "{{topic}}",
|
|
388
|
+
output_topic: str = "{{topic}}_processed",
|
|
389
|
+
group_id: str = "{{group_id}}_streams",
|
|
390
|
+
):
|
|
391
|
+
"""Initialize stream processor."""
|
|
392
|
+
self.input_topic = input_topic
|
|
393
|
+
self.output_topic = output_topic
|
|
394
|
+
|
|
395
|
+
# Consumer for input
|
|
396
|
+
self.consumer = KafkaConsumer(
|
|
397
|
+
input_topic,
|
|
398
|
+
bootstrap_servers=bootstrap_servers,
|
|
399
|
+
group_id=group_id,
|
|
400
|
+
value_deserializer=lambda m: json.loads(m.decode('utf-8')),
|
|
401
|
+
auto_offset_reset='earliest',
|
|
402
|
+
enable_auto_commit=False,
|
|
403
|
+
)
|
|
404
|
+
|
|
405
|
+
# Producer for output
|
|
406
|
+
self.producer = KafkaProducer(
|
|
407
|
+
bootstrap_servers=bootstrap_servers,
|
|
408
|
+
value_serializer=lambda v: json.dumps(v).encode('utf-8'),
|
|
409
|
+
acks='all',
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
# State for windowed aggregation
|
|
413
|
+
self.window_state = defaultdict(int)
|
|
414
|
+
|
|
415
|
+
logger.info(f"Stream processor initialized: {input_topic} -> {output_topic}")
|
|
416
|
+
|
|
417
|
+
def process_stream(self) -> None:
|
|
418
|
+
"""
|
|
419
|
+
Process stream with transformations.
|
|
420
|
+
|
|
421
|
+
Context7 Pattern: Read-Process-Write pattern
|
|
422
|
+
"""
|
|
423
|
+
try:
|
|
424
|
+
for message in self.consumer:
|
|
425
|
+
# Transform message
|
|
426
|
+
transformed = self._transform(message.value)
|
|
427
|
+
|
|
428
|
+
# Aggregate if needed
|
|
429
|
+
self._aggregate(transformed)
|
|
430
|
+
|
|
431
|
+
# Write to output topic
|
|
432
|
+
self.producer.send(self.output_topic, value=transformed)
|
|
433
|
+
|
|
434
|
+
# Commit offset
|
|
435
|
+
self.consumer.commit()
|
|
436
|
+
|
|
437
|
+
finally:
|
|
438
|
+
self.consumer.close()
|
|
439
|
+
self.producer.flush()
|
|
440
|
+
self.producer.close()
|
|
441
|
+
|
|
442
|
+
def _transform(self, message: Dict) -> Dict:
|
|
443
|
+
"""Apply transformations to message."""
|
|
444
|
+
# Your transformation logic
|
|
445
|
+
message["processed_at"] = datetime.utcnow().isoformat()
|
|
446
|
+
message["transformed"] = True
|
|
447
|
+
return message
|
|
448
|
+
|
|
449
|
+
def _aggregate(self, message: Dict) -> None:
|
|
450
|
+
"""Maintain aggregation state."""
|
|
451
|
+
key = message.get("user_id", "unknown")
|
|
452
|
+
self.window_state[key] += 1
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
if __name__ == "__main__":
|
|
456
|
+
processor = {{PipelineName}}StreamProcessor()
|
|
457
|
+
processor.process_stream()
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## Context7-Verified Patterns Applied
|
|
461
|
+
|
|
462
|
+
### Configuration
|
|
463
|
+
- ✅ `bootstrap.servers` for broker connection
|
|
464
|
+
- ✅ Topic-specific configuration with `topic.` prefix
|
|
465
|
+
- ✅ Consumer configuration with `consumer.` prefix
|
|
466
|
+
- ✅ Producer configuration with `producer.` prefix
|
|
467
|
+
|
|
468
|
+
### Reliability
|
|
469
|
+
- ✅ `acks='all'` for producer reliability
|
|
470
|
+
- ✅ Manual commits for exactly-once semantics
|
|
471
|
+
- ✅ Retry configuration with exponential backoff
|
|
472
|
+
- ✅ Proper error handling and logging
|
|
473
|
+
|
|
474
|
+
### Performance
|
|
475
|
+
- ✅ Compression (`snappy`, `gzip`, `lz4`)
|
|
476
|
+
- ✅ Batching configuration
|
|
477
|
+
- ✅ Proper poll timeout settings
|
|
478
|
+
- ✅ Partition assignment strategy
|
|
479
|
+
|
|
480
|
+
## Output Files
|
|
481
|
+
|
|
482
|
+
1. `{{pipeline_name}}_producer.py` - Producer implementation
|
|
483
|
+
2. `{{pipeline_name}}_consumer.py` - Consumer implementation
|
|
484
|
+
3. `{{pipeline_name}}_streams.py` - Streams processor
|
|
485
|
+
4. `tests/test_{{pipeline_name}}.py` - Tests
|
|
486
|
+
5. `requirements.txt` - Dependencies
|
|
487
|
+
|
|
488
|
+
## Validation Checklist
|
|
489
|
+
|
|
490
|
+
- [ ] Context7 documentation queried
|
|
491
|
+
- [ ] Producer configuration verified
|
|
492
|
+
- [ ] Consumer configuration verified
|
|
493
|
+
- [ ] Error handling implemented
|
|
494
|
+
- [ ] Commit strategy appropriate
|
|
495
|
+
- [ ] Serialization/deserialization correct
|
|
496
|
+
- [ ] Graceful shutdown implemented
|
|
497
|
+
- [ ] Tests cover key scenarios
|
|
498
|
+
|
|
499
|
+
## Related Resources
|
|
500
|
+
|
|
501
|
+
- Rule: `data-quality-standards.md`
|
|
502
|
+
- Rule: `etl-pipeline-standards.md`
|
|
503
|
+
- Script: `kafka-streaming-example.py`
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claudeautopm/plugin-data",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Complete data engineering plugin with Airflow, Kedro, LangGraph, Kafka, dbt, pandas experts, data quality rules, and example scripts for ClaudeAutoPM",
|
|
5
|
+
"main": "plugin.json",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"claudeautopm",
|
|
9
|
+
"plugin",
|
|
10
|
+
"data-engineering",
|
|
11
|
+
"ml",
|
|
12
|
+
"machine-learning",
|
|
13
|
+
"etl",
|
|
14
|
+
"analytics",
|
|
15
|
+
"airflow",
|
|
16
|
+
"kedro",
|
|
17
|
+
"langgraph",
|
|
18
|
+
"kafka",
|
|
19
|
+
"dbt",
|
|
20
|
+
"pandas",
|
|
21
|
+
"orchestration",
|
|
22
|
+
"workflow",
|
|
23
|
+
"streaming"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
27
|
+
"validate": "node -e \"require('./plugin.json')\" && echo 'plugin.json is valid'",
|
|
28
|
+
"lint:python": "find scripts/examples -name '*.py' -exec python3 -m py_compile {} \\;",
|
|
29
|
+
"lint:sql": "echo 'SQL linting not configured'",
|
|
30
|
+
"lint:all": "npm run lint:python && npm run lint:sql"
|
|
31
|
+
},
|
|
32
|
+
"author": {
|
|
33
|
+
"name": "ClaudeAutoPM Team",
|
|
34
|
+
"email": "autopm@example.com"
|
|
35
|
+
},
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/rafeekpro/ClaudeAutoPM.git",
|
|
40
|
+
"directory": "packages/plugin-data"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/rafeekpro/ClaudeAutoPM/tree/main/packages/plugin-data#readme",
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/rafeekpro/ClaudeAutoPM/issues"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=16.0.0",
|
|
48
|
+
"npm": ">=8.0.0"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"registry": "https://registry.npmjs.org/"
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"agents/",
|
|
56
|
+
"commands/",
|
|
57
|
+
"rules/",
|
|
58
|
+
"scripts/",
|
|
59
|
+
"plugin.json",
|
|
60
|
+
"README.md",
|
|
61
|
+
"LICENSE"
|
|
62
|
+
],
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"@claudeautopm/plugin-core": "^2.0.0"
|
|
65
|
+
}
|
|
66
|
+
}
|