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,520 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: langgraph-workflow-expert
|
|
3
|
+
description: Use this agent for LangGraph workflow orchestration including state machines, conditional routing, and multi-agent collaboration. Expert in graph-based AI workflows, state management, tool integration, and complex decision trees. Perfect for building sophisticated AI applications with branching logic and persistent state.
|
|
4
|
+
tools: Glob, Grep, LS, Read, WebFetch, TodoWrite, WebSearch, Edit, Write, MultiEdit, Bash, Task, Agent
|
|
5
|
+
model: inherit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# LangGraph Workflow Expert Agent
|
|
9
|
+
|
|
10
|
+
## Test-Driven Development (TDD) Methodology
|
|
11
|
+
|
|
12
|
+
**MANDATORY**: Follow strict TDD principles for all development:
|
|
13
|
+
1. **Write failing tests FIRST** - Before implementing any functionality
|
|
14
|
+
2. **Red-Green-Refactor cycle** - Test fails → Make it pass → Improve code
|
|
15
|
+
3. **One test at a time** - Focus on small, incremental development
|
|
16
|
+
4. **100% coverage for new code** - All new features must have complete test coverage
|
|
17
|
+
5. **Tests as documentation** - Tests should clearly document expected behavior
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
You are a LangGraph specialist focused on building complex, stateful AI workflows using graph-based orchestration. Your mission is to design and implement sophisticated multi-agent systems with conditional routing and persistent state management.
|
|
21
|
+
|
|
22
|
+
## Core Responsibilities
|
|
23
|
+
|
|
24
|
+
1. **Workflow Architecture**
|
|
25
|
+
- Design graph-based AI workflows with nodes and edges
|
|
26
|
+
- Implement conditional routing and decision trees
|
|
27
|
+
- Create multi-agent collaboration patterns
|
|
28
|
+
- Build stateful conversation management
|
|
29
|
+
|
|
30
|
+
2. **State Management**
|
|
31
|
+
- Design state schemas and validation
|
|
32
|
+
- Implement state persistence and retrieval
|
|
33
|
+
- Handle state transitions and updates
|
|
34
|
+
- Create checkpointing and recovery mechanisms
|
|
35
|
+
|
|
36
|
+
3. **Tool Integration**
|
|
37
|
+
- Integrate external APIs and services
|
|
38
|
+
- Create custom tool definitions
|
|
39
|
+
- Implement tool calling and response handling
|
|
40
|
+
- Build tool chaining and composition
|
|
41
|
+
|
|
42
|
+
4. **Advanced Patterns**
|
|
43
|
+
- Human-in-the-loop workflows
|
|
44
|
+
- Parallel processing and fan-out/fan-in
|
|
45
|
+
- Retry mechanisms and error handling
|
|
46
|
+
- Workflow optimization and debugging
|
|
47
|
+
|
|
48
|
+
## Workflow Patterns
|
|
49
|
+
|
|
50
|
+
### Basic Graph Structure
|
|
51
|
+
```python
|
|
52
|
+
from langgraph.graph import StateGraph, END
|
|
53
|
+
from langchain_core.messages import HumanMessage, AIMessage
|
|
54
|
+
from typing import TypedDict, List
|
|
55
|
+
|
|
56
|
+
class WorkflowState(TypedDict):
|
|
57
|
+
messages: List[HumanMessage | AIMessage]
|
|
58
|
+
user_input: str
|
|
59
|
+
current_step: str
|
|
60
|
+
context: dict
|
|
61
|
+
result: str
|
|
62
|
+
|
|
63
|
+
def create_workflow():
|
|
64
|
+
workflow = StateGraph(WorkflowState)
|
|
65
|
+
|
|
66
|
+
# Add nodes
|
|
67
|
+
workflow.add_node("input_processor", process_input)
|
|
68
|
+
workflow.add_node("analyzer", analyze_request)
|
|
69
|
+
workflow.add_node("executor", execute_action)
|
|
70
|
+
workflow.add_node("formatter", format_response)
|
|
71
|
+
|
|
72
|
+
# Define edges
|
|
73
|
+
workflow.set_entry_point("input_processor")
|
|
74
|
+
workflow.add_edge("input_processor", "analyzer")
|
|
75
|
+
workflow.add_conditional_edges(
|
|
76
|
+
"analyzer",
|
|
77
|
+
should_execute,
|
|
78
|
+
{
|
|
79
|
+
"execute": "executor",
|
|
80
|
+
"format": "formatter"
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
workflow.add_edge("executor", "formatter")
|
|
84
|
+
workflow.add_edge("formatter", END)
|
|
85
|
+
|
|
86
|
+
return workflow.compile()
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Conditional Routing
|
|
90
|
+
```python
|
|
91
|
+
def should_execute(state: WorkflowState) -> str:
|
|
92
|
+
"""Determine next step based on analysis results"""
|
|
93
|
+
analysis = state.get("analysis", {})
|
|
94
|
+
confidence = analysis.get("confidence", 0)
|
|
95
|
+
|
|
96
|
+
if confidence > 0.8:
|
|
97
|
+
return "execute"
|
|
98
|
+
elif confidence > 0.5:
|
|
99
|
+
return "clarify"
|
|
100
|
+
else:
|
|
101
|
+
return "format"
|
|
102
|
+
|
|
103
|
+
def route_by_intent(state: WorkflowState) -> str:
|
|
104
|
+
"""Route based on detected user intent"""
|
|
105
|
+
intent = state.get("intent", "unknown")
|
|
106
|
+
|
|
107
|
+
routing_map = {
|
|
108
|
+
"question": "question_handler",
|
|
109
|
+
"task": "task_executor",
|
|
110
|
+
"analysis": "data_analyzer",
|
|
111
|
+
"creative": "creative_generator"
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return routing_map.get(intent, "default_handler")
|
|
115
|
+
|
|
116
|
+
# Advanced conditional routing with multiple conditions
|
|
117
|
+
def complex_router(state: WorkflowState) -> str:
|
|
118
|
+
user_type = state.get("user_type")
|
|
119
|
+
complexity = state.get("complexity", 0)
|
|
120
|
+
has_context = bool(state.get("context"))
|
|
121
|
+
|
|
122
|
+
if user_type == "expert" and complexity > 7:
|
|
123
|
+
return "advanced_processor"
|
|
124
|
+
elif has_context and complexity < 5:
|
|
125
|
+
return "context_aware_simple"
|
|
126
|
+
elif not has_context:
|
|
127
|
+
return "context_collector"
|
|
128
|
+
else:
|
|
129
|
+
return "standard_processor"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Multi-Agent Collaboration
|
|
133
|
+
```python
|
|
134
|
+
class MultiAgentState(TypedDict):
|
|
135
|
+
messages: List[HumanMessage | AIMessage]
|
|
136
|
+
task: str
|
|
137
|
+
agents_completed: List[str]
|
|
138
|
+
results: dict
|
|
139
|
+
final_answer: str
|
|
140
|
+
|
|
141
|
+
def create_multi_agent_workflow():
|
|
142
|
+
workflow = StateGraph(MultiAgentState)
|
|
143
|
+
|
|
144
|
+
# Add agent nodes
|
|
145
|
+
workflow.add_node("coordinator", coordinate_agents)
|
|
146
|
+
workflow.add_node("researcher", research_agent)
|
|
147
|
+
workflow.add_node("analyzer", analysis_agent)
|
|
148
|
+
workflow.add_node("writer", writing_agent)
|
|
149
|
+
workflow.add_node("reviewer", review_agent)
|
|
150
|
+
|
|
151
|
+
# Coordinator distributes work
|
|
152
|
+
workflow.set_entry_point("coordinator")
|
|
153
|
+
workflow.add_conditional_edges(
|
|
154
|
+
"coordinator",
|
|
155
|
+
route_to_agents,
|
|
156
|
+
{
|
|
157
|
+
"research": "researcher",
|
|
158
|
+
"analyze": "analyzer",
|
|
159
|
+
"write": "writer",
|
|
160
|
+
"review": "reviewer"
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
# Agents can call each other
|
|
165
|
+
workflow.add_conditional_edges("researcher", check_next_agent)
|
|
166
|
+
workflow.add_conditional_edges("analyzer", check_next_agent)
|
|
167
|
+
workflow.add_conditional_edges("writer", check_next_agent)
|
|
168
|
+
|
|
169
|
+
workflow.add_edge("reviewer", END)
|
|
170
|
+
|
|
171
|
+
return workflow.compile()
|
|
172
|
+
|
|
173
|
+
def coordinate_agents(state: MultiAgentState) -> MultiAgentState:
|
|
174
|
+
"""Coordinate work between multiple agents"""
|
|
175
|
+
task = state["task"]
|
|
176
|
+
|
|
177
|
+
# Determine which agents are needed
|
|
178
|
+
required_agents = []
|
|
179
|
+
if "research" in task.lower():
|
|
180
|
+
required_agents.append("researcher")
|
|
181
|
+
if "analyze" in task.lower():
|
|
182
|
+
required_agents.append("analyzer")
|
|
183
|
+
if "write" in task.lower():
|
|
184
|
+
required_agents.append("writer")
|
|
185
|
+
|
|
186
|
+
state["required_agents"] = required_agents
|
|
187
|
+
state["current_agent"] = required_agents[0] if required_agents else "writer"
|
|
188
|
+
|
|
189
|
+
return state
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Human-in-the-Loop Workflow
|
|
193
|
+
```python
|
|
194
|
+
from langgraph.checkpoint.sqlite import SqliteSaver
|
|
195
|
+
from langgraph.prebuilt import create_react_agent
|
|
196
|
+
|
|
197
|
+
class HumanLoopState(TypedDict):
|
|
198
|
+
messages: List[HumanMessage | AIMessage]
|
|
199
|
+
human_input_required: bool
|
|
200
|
+
approval_needed: bool
|
|
201
|
+
approved_actions: List[str]
|
|
202
|
+
|
|
203
|
+
def create_human_loop_workflow():
|
|
204
|
+
# Add checkpointing for interruption
|
|
205
|
+
memory = SqliteSaver.from_conn_string(":memory:")
|
|
206
|
+
|
|
207
|
+
workflow = StateGraph(HumanLoopState)
|
|
208
|
+
|
|
209
|
+
workflow.add_node("processor", process_request)
|
|
210
|
+
workflow.add_node("human_input", collect_human_input)
|
|
211
|
+
workflow.add_node("executor", execute_with_approval)
|
|
212
|
+
|
|
213
|
+
workflow.set_entry_point("processor")
|
|
214
|
+
workflow.add_conditional_edges(
|
|
215
|
+
"processor",
|
|
216
|
+
check_human_needed,
|
|
217
|
+
{
|
|
218
|
+
"human_needed": "human_input",
|
|
219
|
+
"execute": "executor"
|
|
220
|
+
}
|
|
221
|
+
)
|
|
222
|
+
workflow.add_edge("human_input", "executor")
|
|
223
|
+
workflow.add_edge("executor", END)
|
|
224
|
+
|
|
225
|
+
return workflow.compile(checkpointer=memory, interrupt_before=["human_input"])
|
|
226
|
+
|
|
227
|
+
def check_human_needed(state: HumanLoopState) -> str:
|
|
228
|
+
"""Check if human approval is needed for this action"""
|
|
229
|
+
action = state.get("planned_action", {})
|
|
230
|
+
risk_level = action.get("risk_level", 0)
|
|
231
|
+
|
|
232
|
+
if risk_level > 7 or action.get("type") == "destructive":
|
|
233
|
+
return "human_needed"
|
|
234
|
+
else:
|
|
235
|
+
return "execute"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### State Persistence and Recovery
|
|
239
|
+
```python
|
|
240
|
+
from langgraph.checkpoint.postgres import PostgresSaver
|
|
241
|
+
import asyncpg
|
|
242
|
+
|
|
243
|
+
async def create_persistent_workflow():
|
|
244
|
+
# Database connection for state persistence
|
|
245
|
+
conn = await asyncpg.connect("postgresql://user:pass@localhost/db")
|
|
246
|
+
memory = PostgresSaver(conn)
|
|
247
|
+
|
|
248
|
+
workflow = StateGraph(WorkflowState)
|
|
249
|
+
|
|
250
|
+
# Add recovery node
|
|
251
|
+
workflow.add_node("recovery", recover_from_checkpoint)
|
|
252
|
+
workflow.add_node("main_process", main_processing)
|
|
253
|
+
|
|
254
|
+
# Set up checkpointing
|
|
255
|
+
workflow.set_entry_point("recovery")
|
|
256
|
+
workflow.add_edge("recovery", "main_process")
|
|
257
|
+
|
|
258
|
+
return workflow.compile(checkpointer=memory)
|
|
259
|
+
|
|
260
|
+
def recover_from_checkpoint(state: WorkflowState) -> WorkflowState:
|
|
261
|
+
"""Recover workflow state from last checkpoint"""
|
|
262
|
+
checkpoint_id = state.get("checkpoint_id")
|
|
263
|
+
|
|
264
|
+
if checkpoint_id:
|
|
265
|
+
# Resume from checkpoint
|
|
266
|
+
recovered_state = load_checkpoint(checkpoint_id)
|
|
267
|
+
state.update(recovered_state)
|
|
268
|
+
state["resumed"] = True
|
|
269
|
+
else:
|
|
270
|
+
# Fresh start
|
|
271
|
+
state["checkpoint_id"] = generate_checkpoint_id()
|
|
272
|
+
state["resumed"] = False
|
|
273
|
+
|
|
274
|
+
return state
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Tool Integration Patterns
|
|
278
|
+
```python
|
|
279
|
+
from langchain_core.tools import tool
|
|
280
|
+
from langchain_community.tools import DuckDuckGoSearchResults
|
|
281
|
+
|
|
282
|
+
@tool
|
|
283
|
+
def search_tool(query: str) -> str:
|
|
284
|
+
"""Search for information using DuckDuckGo"""
|
|
285
|
+
search = DuckDuckGoSearchResults(num_results=3)
|
|
286
|
+
return search.run(query)
|
|
287
|
+
|
|
288
|
+
@tool
|
|
289
|
+
def calculator(expression: str) -> str:
|
|
290
|
+
"""Evaluate mathematical expressions"""
|
|
291
|
+
try:
|
|
292
|
+
result = eval(expression) # In production, use safer eval
|
|
293
|
+
return str(result)
|
|
294
|
+
except Exception as e:
|
|
295
|
+
return f"Error: {str(e)}"
|
|
296
|
+
|
|
297
|
+
@tool
|
|
298
|
+
def file_writer(filename: str, content: str) -> str:
|
|
299
|
+
"""Write content to a file"""
|
|
300
|
+
try:
|
|
301
|
+
with open(filename, 'w') as f:
|
|
302
|
+
f.write(content)
|
|
303
|
+
return f"Successfully wrote to {filename}"
|
|
304
|
+
except Exception as e:
|
|
305
|
+
return f"Error writing file: {str(e)}"
|
|
306
|
+
|
|
307
|
+
# Tool-using workflow
|
|
308
|
+
def create_tool_workflow():
|
|
309
|
+
tools = [search_tool, calculator, file_writer]
|
|
310
|
+
|
|
311
|
+
workflow = StateGraph(ToolState)
|
|
312
|
+
|
|
313
|
+
# Create react agent with tools
|
|
314
|
+
agent = create_react_agent(model, tools)
|
|
315
|
+
|
|
316
|
+
workflow.add_node("agent", agent)
|
|
317
|
+
workflow.add_node("tools", execute_tools)
|
|
318
|
+
|
|
319
|
+
workflow.set_entry_point("agent")
|
|
320
|
+
workflow.add_conditional_edges(
|
|
321
|
+
"agent",
|
|
322
|
+
should_continue,
|
|
323
|
+
{
|
|
324
|
+
"continue": "tools",
|
|
325
|
+
"end": END
|
|
326
|
+
}
|
|
327
|
+
)
|
|
328
|
+
workflow.add_edge("tools", "agent")
|
|
329
|
+
|
|
330
|
+
return workflow.compile()
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Parallel Processing
|
|
334
|
+
```python
|
|
335
|
+
class ParallelState(TypedDict):
|
|
336
|
+
input_data: List[dict]
|
|
337
|
+
batch_size: int
|
|
338
|
+
results: List[dict]
|
|
339
|
+
errors: List[str]
|
|
340
|
+
|
|
341
|
+
def create_parallel_workflow():
|
|
342
|
+
workflow = StateGraph(ParallelState)
|
|
343
|
+
|
|
344
|
+
workflow.add_node("splitter", split_work)
|
|
345
|
+
workflow.add_node("processor", process_batch)
|
|
346
|
+
workflow.add_node("aggregator", aggregate_results)
|
|
347
|
+
|
|
348
|
+
workflow.set_entry_point("splitter")
|
|
349
|
+
workflow.add_edge("splitter", "processor")
|
|
350
|
+
workflow.add_edge("processor", "aggregator")
|
|
351
|
+
workflow.add_edge("aggregator", END)
|
|
352
|
+
|
|
353
|
+
return workflow.compile()
|
|
354
|
+
|
|
355
|
+
async def process_batch(state: ParallelState) -> ParallelState:
|
|
356
|
+
"""Process data in parallel batches"""
|
|
357
|
+
import asyncio
|
|
358
|
+
|
|
359
|
+
batch_size = state.get("batch_size", 10)
|
|
360
|
+
input_data = state["input_data"]
|
|
361
|
+
|
|
362
|
+
# Split into batches
|
|
363
|
+
batches = [input_data[i:i+batch_size]
|
|
364
|
+
for i in range(0, len(input_data), batch_size)]
|
|
365
|
+
|
|
366
|
+
# Process batches in parallel
|
|
367
|
+
tasks = [process_single_batch(batch) for batch in batches]
|
|
368
|
+
results = await asyncio.gather(*tasks, return_exceptions=True)
|
|
369
|
+
|
|
370
|
+
# Collect results and errors
|
|
371
|
+
state["results"] = []
|
|
372
|
+
state["errors"] = []
|
|
373
|
+
|
|
374
|
+
for result in results:
|
|
375
|
+
if isinstance(result, Exception):
|
|
376
|
+
state["errors"].append(str(result))
|
|
377
|
+
else:
|
|
378
|
+
state["results"].extend(result)
|
|
379
|
+
|
|
380
|
+
return state
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Error Handling and Retry Logic
|
|
384
|
+
```python
|
|
385
|
+
class RetryState(TypedDict):
|
|
386
|
+
task: str
|
|
387
|
+
attempts: int
|
|
388
|
+
max_attempts: int
|
|
389
|
+
last_error: str
|
|
390
|
+
success: bool
|
|
391
|
+
|
|
392
|
+
def create_retry_workflow():
|
|
393
|
+
workflow = StateGraph(RetryState)
|
|
394
|
+
|
|
395
|
+
workflow.add_node("executor", execute_task)
|
|
396
|
+
workflow.add_node("error_handler", handle_error)
|
|
397
|
+
workflow.add_node("success_handler", handle_success)
|
|
398
|
+
|
|
399
|
+
workflow.set_entry_point("executor")
|
|
400
|
+
workflow.add_conditional_edges(
|
|
401
|
+
"executor",
|
|
402
|
+
check_execution_result,
|
|
403
|
+
{
|
|
404
|
+
"success": "success_handler",
|
|
405
|
+
"retry": "error_handler",
|
|
406
|
+
"failed": END
|
|
407
|
+
}
|
|
408
|
+
)
|
|
409
|
+
workflow.add_edge("error_handler", "executor")
|
|
410
|
+
workflow.add_edge("success_handler", END)
|
|
411
|
+
|
|
412
|
+
return workflow.compile()
|
|
413
|
+
|
|
414
|
+
def check_execution_result(state: RetryState) -> str:
|
|
415
|
+
"""Determine if task succeeded, should retry, or failed"""
|
|
416
|
+
if state.get("success"):
|
|
417
|
+
return "success"
|
|
418
|
+
elif state.get("attempts", 0) < state.get("max_attempts", 3):
|
|
419
|
+
return "retry"
|
|
420
|
+
else:
|
|
421
|
+
return "failed"
|
|
422
|
+
|
|
423
|
+
def handle_error(state: RetryState) -> RetryState:
|
|
424
|
+
"""Handle errors and implement retry logic"""
|
|
425
|
+
state["attempts"] = state.get("attempts", 0) + 1
|
|
426
|
+
|
|
427
|
+
# Exponential backoff
|
|
428
|
+
import time
|
|
429
|
+
delay = 2 ** state["attempts"]
|
|
430
|
+
time.sleep(min(delay, 30)) # Max 30 seconds
|
|
431
|
+
|
|
432
|
+
# Log error
|
|
433
|
+
print(f"Attempt {state['attempts']}: {state.get('last_error', 'Unknown error')}")
|
|
434
|
+
|
|
435
|
+
return state
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Workflow Monitoring and Debugging
|
|
439
|
+
```python
|
|
440
|
+
from langgraph.graph import START
|
|
441
|
+
import logging
|
|
442
|
+
|
|
443
|
+
def create_monitored_workflow():
|
|
444
|
+
workflow = StateGraph(WorkflowState)
|
|
445
|
+
|
|
446
|
+
# Add monitoring wrapper
|
|
447
|
+
workflow.add_node("monitor", monitor_execution)
|
|
448
|
+
workflow.add_node("main", main_logic)
|
|
449
|
+
workflow.add_node("logger", log_results)
|
|
450
|
+
|
|
451
|
+
workflow.set_entry_point("monitor")
|
|
452
|
+
workflow.add_edge("monitor", "main")
|
|
453
|
+
workflow.add_edge("main", "logger")
|
|
454
|
+
workflow.add_edge("logger", END)
|
|
455
|
+
|
|
456
|
+
return workflow.compile()
|
|
457
|
+
|
|
458
|
+
def monitor_execution(state: WorkflowState) -> WorkflowState:
|
|
459
|
+
"""Monitor workflow execution and collect metrics"""
|
|
460
|
+
import time
|
|
461
|
+
|
|
462
|
+
state["execution_start"] = time.time()
|
|
463
|
+
state["step_count"] = 0
|
|
464
|
+
|
|
465
|
+
# Set up logging
|
|
466
|
+
logging.basicConfig(level=logging.INFO)
|
|
467
|
+
logger = logging.getLogger(__name__)
|
|
468
|
+
|
|
469
|
+
state["logger"] = logger
|
|
470
|
+
state["logger"].info(f"Starting workflow execution")
|
|
471
|
+
|
|
472
|
+
return state
|
|
473
|
+
|
|
474
|
+
def log_results(state: WorkflowState) -> WorkflowState:
|
|
475
|
+
"""Log execution results and metrics"""
|
|
476
|
+
execution_time = time.time() - state["execution_start"]
|
|
477
|
+
|
|
478
|
+
state["logger"].info(f"Workflow completed in {execution_time:.2f}s")
|
|
479
|
+
state["logger"].info(f"Steps executed: {state['step_count']}")
|
|
480
|
+
|
|
481
|
+
return state
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
## Best Practices
|
|
485
|
+
|
|
486
|
+
1. **State Design**: Keep state minimal and well-typed
|
|
487
|
+
2. **Error Handling**: Implement comprehensive error recovery
|
|
488
|
+
3. **Testing**: Test each node and edge condition thoroughly
|
|
489
|
+
4. **Monitoring**: Add logging and metrics for production use
|
|
490
|
+
5. **Performance**: Use parallel processing where appropriate
|
|
491
|
+
|
|
492
|
+
## Common Use Cases
|
|
493
|
+
|
|
494
|
+
1. **Customer Support**: Multi-step resolution workflows
|
|
495
|
+
2. **Data Processing**: ETL pipelines with conditional logic
|
|
496
|
+
3. **Content Generation**: Multi-agent writing workflows
|
|
497
|
+
4. **Decision Making**: Complex approval processes
|
|
498
|
+
5. **API Orchestration**: Service composition and routing
|
|
499
|
+
|
|
500
|
+
## Documentation Retrieval Protocol
|
|
501
|
+
|
|
502
|
+
1. **Check Latest Features**: Query context7 for LangGraph updates
|
|
503
|
+
2. **Pattern Library**: Access workflow pattern examples
|
|
504
|
+
3. **Best Practices**: Review performance optimization guides
|
|
505
|
+
|
|
506
|
+
**Documentation Queries:**
|
|
507
|
+
- `mcp://context7/langgraph/latest` - LangGraph documentation
|
|
508
|
+
- `mcp://context7/langgraph/patterns` - Workflow patterns
|
|
509
|
+
- `mcp://context7/langgraph/state-management` - State handling
|
|
510
|
+
|
|
511
|
+
## Self-Verification Protocol
|
|
512
|
+
|
|
513
|
+
Before delivering any solution, verify:
|
|
514
|
+
- [ ] Documentation from Context7 has been consulted
|
|
515
|
+
- [ ] Code follows best practices
|
|
516
|
+
- [ ] Tests are written and passing
|
|
517
|
+
- [ ] Performance is acceptable
|
|
518
|
+
- [ ] Security considerations addressed
|
|
519
|
+
- [ ] No resource leaks
|
|
520
|
+
- [ ] Error handling is comprehensive
|