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,224 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pre-Agent Context7 Hook
|
|
5
|
+
*
|
|
6
|
+
* MANDATORY: This hook enforces Context7 documentation queries BEFORE agent invocation.
|
|
7
|
+
*
|
|
8
|
+
* Workflow:
|
|
9
|
+
* 1. Intercept agent invocation (e.g., @aws-cloud-architect)
|
|
10
|
+
* 2. Extract agent file path from .claude/agents/{category}/{agent}.md
|
|
11
|
+
* 3. Parse "Documentation Queries" section
|
|
12
|
+
* 4. Query Context7 MCP for each link
|
|
13
|
+
* 5. Inject results into agent context
|
|
14
|
+
* 6. Allow agent to proceed with Context7 knowledge
|
|
15
|
+
*
|
|
16
|
+
* Zero Tolerance: If Context7 query fails, agent invocation STOPS.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Parse agent invocation
|
|
24
|
+
* @param {string} agentInvocation - e.g., "@aws-cloud-architect design VPC"
|
|
25
|
+
* @returns {object} { agentName, task }
|
|
26
|
+
*/
|
|
27
|
+
function parseAgentInvocation(agentInvocation) {
|
|
28
|
+
// Remove @ symbol and split
|
|
29
|
+
const cleaned = agentInvocation.replace(/^@/, '');
|
|
30
|
+
const parts = cleaned.split(/\s+/);
|
|
31
|
+
const agentName = parts[0];
|
|
32
|
+
const task = parts.slice(1).join(' ');
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
agentName,
|
|
36
|
+
task,
|
|
37
|
+
fullInvocation: agentInvocation
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Find agent file in .claude/agents/
|
|
43
|
+
* @param {string} agentName - Agent name (aws-cloud-architect, test-runner, etc.)
|
|
44
|
+
* @returns {string|null} - Path to agent file or null
|
|
45
|
+
*/
|
|
46
|
+
function findAgentFile(agentName) {
|
|
47
|
+
const baseDir = path.join(process.cwd(), '.claude', 'agents');
|
|
48
|
+
|
|
49
|
+
// Search recursively in all subdirectories
|
|
50
|
+
function searchDir(dir) {
|
|
51
|
+
if (!fs.existsSync(dir)) return null;
|
|
52
|
+
|
|
53
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
54
|
+
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const fullPath = path.join(dir, entry.name);
|
|
57
|
+
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
const found = searchDir(fullPath);
|
|
60
|
+
if (found) return found;
|
|
61
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
62
|
+
// Check if filename matches (with or without .md extension)
|
|
63
|
+
const basename = path.basename(entry.name, '.md');
|
|
64
|
+
if (basename === agentName || basename.replace(/-/g, '_') === agentName) {
|
|
65
|
+
return fullPath;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return searchDir(baseDir);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Extract Documentation Queries from agent file
|
|
78
|
+
* @param {string} filePath - Path to agent .md file
|
|
79
|
+
* @returns {Array<{url: string, description: string}>}
|
|
80
|
+
*/
|
|
81
|
+
function extractDocumentationQueries(filePath) {
|
|
82
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
83
|
+
const queries = [];
|
|
84
|
+
|
|
85
|
+
// Find the Documentation Queries section (agent format)
|
|
86
|
+
const querySection = content.match(/\*\*Documentation Queries:\*\*\s*\n([\s\S]*?)(?=\n\n|\*\*|##|$)/);
|
|
87
|
+
|
|
88
|
+
if (!querySection) {
|
|
89
|
+
return queries; // No Documentation Queries section found
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Extract each mcp://context7/... line
|
|
93
|
+
const lines = querySection[1].split('\n');
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
const match = line.match(/`(mcp:\/\/context7\/[^`]+)`\s*-\s*(.+)/);
|
|
96
|
+
if (match) {
|
|
97
|
+
queries.push({
|
|
98
|
+
url: match[1],
|
|
99
|
+
description: match[2].trim()
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return queries;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Query Context7 MCP server
|
|
109
|
+
* @param {string} mcpUrl - e.g., "mcp://context7/aws/compute"
|
|
110
|
+
* @returns {Promise<object>} - Context7 response
|
|
111
|
+
*/
|
|
112
|
+
async function queryContext7(mcpUrl) {
|
|
113
|
+
// Parse MCP URL: mcp://context7/category/topic
|
|
114
|
+
const urlMatch = mcpUrl.match(/mcp:\/\/context7\/(.+)/);
|
|
115
|
+
if (!urlMatch) {
|
|
116
|
+
throw new Error(`Invalid Context7 URL format: ${mcpUrl}`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const topicPath = urlMatch[1]; // e.g., "aws/compute"
|
|
120
|
+
|
|
121
|
+
// In real implementation, this would call the MCP server
|
|
122
|
+
// For now, return a placeholder that instructs Claude to query
|
|
123
|
+
return {
|
|
124
|
+
url: mcpUrl,
|
|
125
|
+
topic: topicPath,
|
|
126
|
+
instruction: `MANDATORY: Query Context7 MCP for topic "${topicPath}" before implementing solution.`,
|
|
127
|
+
placeholder: true
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Main hook execution
|
|
133
|
+
* @param {string} agentInvocation - Full agent invocation from user
|
|
134
|
+
*/
|
|
135
|
+
async function main(agentInvocation) {
|
|
136
|
+
console.log('\n🔒 Context7 Pre-Agent Hook Activated\n');
|
|
137
|
+
|
|
138
|
+
// Parse agent invocation
|
|
139
|
+
const { agentName, task, fullInvocation } = parseAgentInvocation(agentInvocation || process.argv[2] || '');
|
|
140
|
+
|
|
141
|
+
console.log(`🤖 Agent: @${agentName}`);
|
|
142
|
+
if (task) {
|
|
143
|
+
console.log(` Task: ${task}`);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Find agent file
|
|
147
|
+
const agentFile = findAgentFile(agentName);
|
|
148
|
+
if (!agentFile) {
|
|
149
|
+
console.log(`\n⚠️ Warning: Agent file not found for @${agentName}`);
|
|
150
|
+
console.log(` Searched: .claude/agents/**/${agentName}.md`);
|
|
151
|
+
console.log(` Proceeding without Context7 enforcement (agent may not exist)\n`);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
console.log(` File: ${path.relative(process.cwd(), agentFile)}`);
|
|
156
|
+
|
|
157
|
+
// Extract Documentation Queries
|
|
158
|
+
const queries = extractDocumentationQueries(agentFile);
|
|
159
|
+
|
|
160
|
+
if (queries.length === 0) {
|
|
161
|
+
console.log(`\n❌ CRITICAL: No Documentation Queries found in agent file!`);
|
|
162
|
+
console.log(` This violates Context7 enforcement policy.`);
|
|
163
|
+
console.log(` ALL agents MUST have Documentation Queries section.`);
|
|
164
|
+
console.log(`\n Please add to ${path.basename(agentFile)}:`);
|
|
165
|
+
console.log(` **Documentation Queries:**`);
|
|
166
|
+
console.log(` - \`mcp://context7/...\` - Description`);
|
|
167
|
+
console.log(`\n Blocking agent invocation until fixed.\n`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
console.log(`\n📚 Context7 Documentation Queries Required: ${queries.length}\n`);
|
|
172
|
+
|
|
173
|
+
// Query Context7 for each link
|
|
174
|
+
const results = [];
|
|
175
|
+
for (const query of queries) {
|
|
176
|
+
console.log(` ➜ ${query.url}`);
|
|
177
|
+
console.log(` ${query.description}`);
|
|
178
|
+
|
|
179
|
+
try {
|
|
180
|
+
const result = await queryContext7(query.url);
|
|
181
|
+
results.push(result);
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.log(`\n❌ Context7 query FAILED: ${error.message}`);
|
|
184
|
+
console.log(` Cannot proceed without Context7 documentation.`);
|
|
185
|
+
console.log(` Please ensure Context7 MCP server is running.\n`);
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
console.log(`\n✅ Context7 Queries Complete\n`);
|
|
191
|
+
console.log(`📖 REMINDER: @${agentName} MUST use Context7 documentation:`);
|
|
192
|
+
console.log(` • Apply patterns from Context7 examples`);
|
|
193
|
+
console.log(` • Verify API signatures against Context7 results`);
|
|
194
|
+
console.log(` • Follow best practices documented in Context7`);
|
|
195
|
+
console.log(` • Flag any conflicts between training data and Context7`);
|
|
196
|
+
console.log(`\n🚀 Proceeding with agent invocation...\n`);
|
|
197
|
+
|
|
198
|
+
// In production, this would inject Context7 results into agent's context
|
|
199
|
+
// For now, we output instruction for Claude to see
|
|
200
|
+
if (results.length > 0 && results[0].placeholder) {
|
|
201
|
+
console.log(`⚡ ACTION REQUIRED FOR @${agentName}:`);
|
|
202
|
+
console.log(` Before implementing "${task || 'task'}", you MUST:`);
|
|
203
|
+
for (const result of results) {
|
|
204
|
+
console.log(` • ${result.instruction}`);
|
|
205
|
+
}
|
|
206
|
+
console.log();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Execute if run directly
|
|
211
|
+
if (require.main === module) {
|
|
212
|
+
const agentInvocation = process.argv.slice(2).join(' ');
|
|
213
|
+
main(agentInvocation).catch(error => {
|
|
214
|
+
console.error('\n❌ Hook execution failed:', error.message);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
module.exports = {
|
|
220
|
+
parseAgentInvocation,
|
|
221
|
+
findAgentFile,
|
|
222
|
+
extractDocumentationQueries,
|
|
223
|
+
queryContext7
|
|
224
|
+
};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pre-Command Context7 Hook
|
|
5
|
+
*
|
|
6
|
+
* MANDATORY: This hook enforces Context7 documentation queries BEFORE command execution.
|
|
7
|
+
*
|
|
8
|
+
* Workflow:
|
|
9
|
+
* 1. Intercept command execution (e.g., /pm:epic-decompose)
|
|
10
|
+
* 2. Extract command file path from .claude/commands/{category}/{command}.md
|
|
11
|
+
* 3. Parse "Documentation Queries" section
|
|
12
|
+
* 4. Query Context7 MCP for each link
|
|
13
|
+
* 5. Inject results into execution context
|
|
14
|
+
* 6. Allow command to proceed with Context7 knowledge
|
|
15
|
+
*
|
|
16
|
+
* Zero Tolerance: If Context7 query fails, execution STOPS.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Extract command metadata from invocation
|
|
24
|
+
* @param {string} commandInvocation - e.g., "/pm:epic-decompose feature-name"
|
|
25
|
+
* @returns {object} { category, command, args }
|
|
26
|
+
*/
|
|
27
|
+
function parseCommandInvocation(commandInvocation) {
|
|
28
|
+
// Remove leading slash and split
|
|
29
|
+
const cleaned = commandInvocation.replace(/^\//, '');
|
|
30
|
+
const [categoryCommand, ...args] = cleaned.split(/\s+/);
|
|
31
|
+
const [category, command] = categoryCommand.split(':');
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
category: category || 'pm', // Default to pm if no category
|
|
35
|
+
command: command || categoryCommand,
|
|
36
|
+
args: args,
|
|
37
|
+
fullCommand: categoryCommand
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Find command file in .claude/commands/
|
|
43
|
+
* @param {string} category - Command category (pm, azure, cloud, etc.)
|
|
44
|
+
* @param {string} command - Command name (epic-decompose, issue-start, etc.)
|
|
45
|
+
* @returns {string|null} - Path to command file or null
|
|
46
|
+
*/
|
|
47
|
+
function findCommandFile(category, command) {
|
|
48
|
+
const baseDir = path.join(process.cwd(), '.claude', 'commands');
|
|
49
|
+
|
|
50
|
+
// Try exact match first
|
|
51
|
+
let commandPath = path.join(baseDir, category, `${command}.md`);
|
|
52
|
+
if (fs.existsSync(commandPath)) {
|
|
53
|
+
return commandPath;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Try with underscores (epic-decompose → epic_decompose)
|
|
57
|
+
const underscored = command.replace(/-/g, '_');
|
|
58
|
+
commandPath = path.join(baseDir, category, `${underscored}.md`);
|
|
59
|
+
if (fs.existsSync(commandPath)) {
|
|
60
|
+
return commandPath;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Try without category prefix if command includes it
|
|
64
|
+
if (command.includes('-')) {
|
|
65
|
+
const [, actualCommand] = command.split('-', 2);
|
|
66
|
+
if (actualCommand) {
|
|
67
|
+
commandPath = path.join(baseDir, category, `${actualCommand}.md`);
|
|
68
|
+
if (fs.existsSync(commandPath)) {
|
|
69
|
+
return commandPath;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Extract Documentation Queries from command file
|
|
79
|
+
* @param {string} filePath - Path to command .md file
|
|
80
|
+
* @returns {Array<{url: string, description: string}>}
|
|
81
|
+
*/
|
|
82
|
+
function extractDocumentationQueries(filePath) {
|
|
83
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
84
|
+
const queries = [];
|
|
85
|
+
|
|
86
|
+
// Find the Documentation Queries section
|
|
87
|
+
const querySection = content.match(/\*\*Documentation Queries:\*\*\s*\n([\s\S]*?)(?=\n\n|\*\*Why This is Required|\n##|$)/);
|
|
88
|
+
|
|
89
|
+
if (!querySection) {
|
|
90
|
+
return queries; // No Documentation Queries section found
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Extract each mcp://context7/... line
|
|
94
|
+
const lines = querySection[1].split('\n');
|
|
95
|
+
for (const line of lines) {
|
|
96
|
+
const match = line.match(/`(mcp:\/\/context7\/[^`]+)`\s*-\s*(.+)/);
|
|
97
|
+
if (match) {
|
|
98
|
+
queries.push({
|
|
99
|
+
url: match[1],
|
|
100
|
+
description: match[2].trim()
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return queries;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Query Context7 MCP server
|
|
110
|
+
* @param {string} mcpUrl - e.g., "mcp://context7/agile/epic-decomposition"
|
|
111
|
+
* @returns {Promise<object>} - Context7 response
|
|
112
|
+
*/
|
|
113
|
+
async function queryContext7(mcpUrl) {
|
|
114
|
+
// Parse MCP URL: mcp://context7/category/topic
|
|
115
|
+
const urlMatch = mcpUrl.match(/mcp:\/\/context7\/(.+)/);
|
|
116
|
+
if (!urlMatch) {
|
|
117
|
+
throw new Error(`Invalid Context7 URL format: ${mcpUrl}`);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const topicPath = urlMatch[1]; // e.g., "agile/epic-decomposition"
|
|
121
|
+
|
|
122
|
+
// In real implementation, this would call the MCP server
|
|
123
|
+
// For now, return a placeholder that instructs Claude to query
|
|
124
|
+
return {
|
|
125
|
+
url: mcpUrl,
|
|
126
|
+
topic: topicPath,
|
|
127
|
+
instruction: `MANDATORY: Query Context7 MCP for topic "${topicPath}" before proceeding with implementation.`,
|
|
128
|
+
placeholder: true
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Main hook execution
|
|
134
|
+
* @param {string} commandInvocation - Full command string from user
|
|
135
|
+
*/
|
|
136
|
+
async function main(commandInvocation) {
|
|
137
|
+
console.log('\n🔒 Context7 Pre-Command Hook Activated\n');
|
|
138
|
+
|
|
139
|
+
// Parse command
|
|
140
|
+
const { category, command, args, fullCommand } = parseCommandInvocation(commandInvocation || process.argv[2] || '');
|
|
141
|
+
|
|
142
|
+
console.log(`📋 Command: /${fullCommand}`);
|
|
143
|
+
console.log(` Category: ${category}`);
|
|
144
|
+
console.log(` Command: ${command}`);
|
|
145
|
+
if (args.length > 0) {
|
|
146
|
+
console.log(` Arguments: ${args.join(' ')}`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Find command file
|
|
150
|
+
const commandFile = findCommandFile(category, command);
|
|
151
|
+
if (!commandFile) {
|
|
152
|
+
console.log(`\n⚠️ Warning: Command file not found for /${fullCommand}`);
|
|
153
|
+
console.log(` Searched: .claude/commands/${category}/${command}.md`);
|
|
154
|
+
console.log(` Proceeding without Context7 enforcement (file may not exist yet)\n`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
console.log(` File: ${path.relative(process.cwd(), commandFile)}`);
|
|
159
|
+
|
|
160
|
+
// Extract Documentation Queries
|
|
161
|
+
const queries = extractDocumentationQueries(commandFile);
|
|
162
|
+
|
|
163
|
+
if (queries.length === 0) {
|
|
164
|
+
console.log(`\n❌ CRITICAL: No Documentation Queries found in command file!`);
|
|
165
|
+
console.log(` This violates Context7 enforcement policy.`);
|
|
166
|
+
console.log(` ALL commands MUST have Documentation Queries section.`);
|
|
167
|
+
console.log(`\n Please add to ${path.basename(commandFile)}:`);
|
|
168
|
+
console.log(` ## Required Documentation Access`);
|
|
169
|
+
console.log(` **MANDATORY:** Before [action], query Context7 for best practices:`);
|
|
170
|
+
console.log(` **Documentation Queries:**`);
|
|
171
|
+
console.log(` - \`mcp://context7/...\` - Description`);
|
|
172
|
+
console.log(`\n Blocking execution until fixed.\n`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
console.log(`\n📚 Context7 Documentation Queries Required: ${queries.length}\n`);
|
|
177
|
+
|
|
178
|
+
// Query Context7 for each link
|
|
179
|
+
const results = [];
|
|
180
|
+
for (const query of queries) {
|
|
181
|
+
console.log(` ➜ ${query.url}`);
|
|
182
|
+
console.log(` ${query.description}`);
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
const result = await queryContext7(query.url);
|
|
186
|
+
results.push(result);
|
|
187
|
+
} catch (error) {
|
|
188
|
+
console.log(`\n❌ Context7 query FAILED: ${error.message}`);
|
|
189
|
+
console.log(` Cannot proceed without Context7 documentation.`);
|
|
190
|
+
console.log(` Please ensure Context7 MCP server is running.\n`);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
console.log(`\n✅ Context7 Queries Complete\n`);
|
|
196
|
+
console.log(`📖 REMINDER: You MUST use Context7 documentation in your implementation:`);
|
|
197
|
+
console.log(` • Apply patterns from Context7 examples`);
|
|
198
|
+
console.log(` • Verify API signatures against Context7 results`);
|
|
199
|
+
console.log(` • Follow best practices documented in Context7`);
|
|
200
|
+
console.log(` • Flag any conflicts between training data and Context7`);
|
|
201
|
+
console.log(`\n🚀 Proceeding with command execution...\n`);
|
|
202
|
+
|
|
203
|
+
// In production, this would inject Context7 results into Claude's context
|
|
204
|
+
// For now, we output instruction for Claude to see
|
|
205
|
+
if (results.length > 0 && results[0].placeholder) {
|
|
206
|
+
console.log(`⚡ ACTION REQUIRED:`);
|
|
207
|
+
console.log(` Before implementing /${fullCommand}, you MUST:`);
|
|
208
|
+
for (const result of results) {
|
|
209
|
+
console.log(` • ${result.instruction}`);
|
|
210
|
+
}
|
|
211
|
+
console.log();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Execute if run directly
|
|
216
|
+
if (require.main === module) {
|
|
217
|
+
const commandInvocation = process.argv.slice(2).join(' ');
|
|
218
|
+
main(commandInvocation).catch(error => {
|
|
219
|
+
console.error('\n❌ Hook execution failed:', error.message);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
module.exports = {
|
|
225
|
+
parseCommandInvocation,
|
|
226
|
+
findCommandFile,
|
|
227
|
+
extractDocumentationQueries,
|
|
228
|
+
queryContext7
|
|
229
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# STRICT MODE: Blocks ALL direct operations except Task tool
|
|
4
|
+
|
|
5
|
+
TOOL_NAME="$1"
|
|
6
|
+
|
|
7
|
+
# List of allowed tools when not using agents
|
|
8
|
+
ALLOWED_TOOLS="Task|TodoWrite|ExitPlanMode|WebFetch|WebSearch"
|
|
9
|
+
|
|
10
|
+
# If tool is not on allowed list
|
|
11
|
+
if ! echo "$TOOL_NAME" | grep -qE "^($ALLOWED_TOOLS)$"; then
|
|
12
|
+
|
|
13
|
+
# Tool to agent mapping
|
|
14
|
+
case "$TOOL_NAME" in
|
|
15
|
+
"Bash")
|
|
16
|
+
echo "❌ BLOCKED: Direct bash execution"
|
|
17
|
+
echo "✅ USE: Appropriate agent based on task:"
|
|
18
|
+
echo " - python-backend-engineer for Python development"
|
|
19
|
+
echo " - test-runner for running tests"
|
|
20
|
+
echo " - bash-scripting-expert for shell scripts"
|
|
21
|
+
exit 1
|
|
22
|
+
;;
|
|
23
|
+
"Read"|"Glob"|"Grep")
|
|
24
|
+
echo "❌ BLOCKED: Direct file operations"
|
|
25
|
+
echo "✅ USE: code-analyzer or file-analyzer agent"
|
|
26
|
+
exit 1
|
|
27
|
+
;;
|
|
28
|
+
"Edit"|"Write"|"MultiEdit")
|
|
29
|
+
echo "❌ BLOCKED: Direct file editing"
|
|
30
|
+
echo "✅ USE: Appropriate development agent:"
|
|
31
|
+
echo " - python-backend-engineer for .py files"
|
|
32
|
+
echo " - react-frontend-engineer for .jsx/.tsx files"
|
|
33
|
+
echo " - nodejs-backend-engineer for Node.js"
|
|
34
|
+
exit 1
|
|
35
|
+
;;
|
|
36
|
+
esac
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
exit 0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Hook test - call simulation
|
|
4
|
+
echo "Testing hook with different scenarios:"
|
|
5
|
+
echo "======================================"
|
|
6
|
+
|
|
7
|
+
# Test 1: Direct grep (should be blocked)
|
|
8
|
+
echo -e "\n1. Testing: Bash 'grep -r TODO *.py'"
|
|
9
|
+
./.claude/hooks/enforce-agents.sh "Bash" '{"command": "grep -r TODO *.py"}' || echo " Result: Blocked ✓"
|
|
10
|
+
|
|
11
|
+
# Test 2: Task tool (should pass)
|
|
12
|
+
echo -e "\n2. Testing: Task tool usage"
|
|
13
|
+
./.claude/hooks/enforce-agents.sh "Task" '{"agent": "code-analyzer"}' && echo " Result: Allowed ✓"
|
|
14
|
+
|
|
15
|
+
# Test 3: Direct tests (should be blocked)
|
|
16
|
+
echo -e "\n3. Testing: Bash 'pytest tests/'"
|
|
17
|
+
./.claude/hooks/enforce-agents.sh "Bash" '{"command": "pytest tests/"}' || echo " Result: Blocked ✓"
|
|
18
|
+
|
|
19
|
+
# Test 4: Normal bash command (should pass)
|
|
20
|
+
echo -e "\n4. Testing: Bash 'ls -la'"
|
|
21
|
+
./.claude/hooks/enforce-agents.sh "Bash" '{"command": "ls -la"}' && echo " Result: Allowed ✓"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Unified Context7 Enforcement Hook
|
|
4
|
+
# Triggered by Claude Code on tool-use events
|
|
5
|
+
# Shows Context7 queries that MUST be performed before command/agent execution
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
# Get the user's prompt/command
|
|
10
|
+
PROMPT="${PROMPT:-$1}"
|
|
11
|
+
|
|
12
|
+
# Check if this is a command invocation (starts with /)
|
|
13
|
+
if [[ "$PROMPT" =~ ^/([a-z-]+):([a-z-]+) ]]; then
|
|
14
|
+
CATEGORY="${BASH_REMATCH[1]}"
|
|
15
|
+
COMMAND="${BASH_REMATCH[2]}"
|
|
16
|
+
|
|
17
|
+
echo ""
|
|
18
|
+
echo "🔒 Context7 Enforcement: Command Detected"
|
|
19
|
+
echo " Command: /$CATEGORY:$COMMAND"
|
|
20
|
+
echo ""
|
|
21
|
+
|
|
22
|
+
# Run the command hook
|
|
23
|
+
node .claude/hooks/pre-command-context7.js "$PROMPT"
|
|
24
|
+
|
|
25
|
+
elif [[ "$PROMPT" =~ ^@([a-z-]+) ]]; then
|
|
26
|
+
AGENT="${BASH_REMATCH[1]}"
|
|
27
|
+
|
|
28
|
+
echo ""
|
|
29
|
+
echo "🔒 Context7 Enforcement: Agent Detected"
|
|
30
|
+
echo " Agent: @$AGENT"
|
|
31
|
+
echo ""
|
|
32
|
+
|
|
33
|
+
# Run the agent hook
|
|
34
|
+
node .claude/hooks/pre-agent-context7.js "$PROMPT"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Always allow execution to continue
|
|
38
|
+
exit 0
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claudeautopm/plugin-core",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Core framework functionality for ClaudeAutoPM - universal agents, rules, hooks, and utilities",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"claude",
|
|
11
|
+
"autopm",
|
|
12
|
+
"core",
|
|
13
|
+
"framework",
|
|
14
|
+
"agents",
|
|
15
|
+
"tdd",
|
|
16
|
+
"context7",
|
|
17
|
+
"automation"
|
|
18
|
+
],
|
|
19
|
+
"author": "ClaudeAutoPM Team",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/rafeekpro/ClaudeAutoPM.git",
|
|
24
|
+
"directory": "packages/plugin-core"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/rafeekpro/ClaudeAutoPM#readme",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/rafeekpro/ClaudeAutoPM/issues"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"agents/",
|
|
35
|
+
"commands/",
|
|
36
|
+
"rules/",
|
|
37
|
+
"hooks/",
|
|
38
|
+
"scripts/",
|
|
39
|
+
"plugin.json",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=18.0.0"
|
|
44
|
+
}
|
|
45
|
+
}
|