claude-autopm 2.8.2 → 2.8.4
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/install/install.js +15 -5
- 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,509 @@
|
|
|
1
|
+
# Prompt Engineering Standards
|
|
2
|
+
|
|
3
|
+
## Priority: High
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Comprehensive prompt engineering standards with Context7-verified best practices for effective prompt design, few-shot learning, chain-of-thought reasoning, and structured outputs across OpenAI, Gemini, and LangChain frameworks.
|
|
8
|
+
|
|
9
|
+
## Applies To
|
|
10
|
+
- commands
|
|
11
|
+
- agents
|
|
12
|
+
|
|
13
|
+
## Enforces On
|
|
14
|
+
- openai-python-expert
|
|
15
|
+
- gemini-api-expert
|
|
16
|
+
- langgraph-workflow-expert
|
|
17
|
+
|
|
18
|
+
## Context7 Documentation Sources
|
|
19
|
+
|
|
20
|
+
**MANDATORY:** All prompt implementations MUST consult:
|
|
21
|
+
- `/openai/openai-python` (277 snippets, trust 9.1) - OpenAI prompt patterns
|
|
22
|
+
- `/langchain-ai/langchain` (150 snippets, trust 9.2) - LangChain prompt templates
|
|
23
|
+
- Context7-verified prompt engineering techniques
|
|
24
|
+
|
|
25
|
+
## Standards
|
|
26
|
+
|
|
27
|
+
### 1. System Prompts and Role Definition
|
|
28
|
+
|
|
29
|
+
#### ✅ CORRECT: Clear, specific system prompts
|
|
30
|
+
```python
|
|
31
|
+
from langchain_core.prompts import ChatPromptTemplate
|
|
32
|
+
|
|
33
|
+
# Context7 pattern: Specific role with constraints
|
|
34
|
+
SYSTEM_PROMPT = """You are an expert Python developer assistant.
|
|
35
|
+
|
|
36
|
+
Your responsibilities:
|
|
37
|
+
- Provide accurate, working Python code
|
|
38
|
+
- Follow PEP 8 style guidelines
|
|
39
|
+
- Include comprehensive error handling
|
|
40
|
+
- Add clear docstrings and comments
|
|
41
|
+
- Suggest tests for the code
|
|
42
|
+
|
|
43
|
+
Constraints:
|
|
44
|
+
- Only provide Python code (no other languages unless explicitly asked)
|
|
45
|
+
- Always explain your reasoning
|
|
46
|
+
- If unsure, say "I don't have enough information" rather than guessing
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
prompt_template = ChatPromptTemplate.from_messages([
|
|
50
|
+
("system", SYSTEM_PROMPT),
|
|
51
|
+
("human", "{user_input}")
|
|
52
|
+
])
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
#### ❌ INCORRECT: Vague, generic system prompts
|
|
56
|
+
```python
|
|
57
|
+
# DON'T: Vague system prompt
|
|
58
|
+
SYSTEM_PROMPT = "You are a helpful assistant."
|
|
59
|
+
# Too generic - model has no specific guidance
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Few-Shot Learning Patterns
|
|
63
|
+
|
|
64
|
+
#### ✅ CORRECT: Context7-verified few-shot examples
|
|
65
|
+
```python
|
|
66
|
+
# Context7 pattern: 3-5 examples covering edge cases
|
|
67
|
+
FEW_SHOT_PROMPT = """You are a text classifier for customer support tickets.
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
70
|
+
|
|
71
|
+
Input: "My order hasn't arrived yet and it's been 2 weeks"
|
|
72
|
+
Output: {"category": "delivery_issue", "priority": "high", "sentiment": "frustrated"}
|
|
73
|
+
|
|
74
|
+
Input: "How do I reset my password?"
|
|
75
|
+
Output: {"category": "account_help", "priority": "low", "sentiment": "neutral"}
|
|
76
|
+
|
|
77
|
+
Input: "The product is broken, I want a refund immediately!"
|
|
78
|
+
Output: {"category": "refund_request", "priority": "high", "sentiment": "angry"}
|
|
79
|
+
|
|
80
|
+
Input: "Great service, very happy with my purchase"
|
|
81
|
+
Output: {"category": "feedback", "priority": "low", "sentiment": "positive"}
|
|
82
|
+
|
|
83
|
+
Input: "Can you help me choose between product A and B?"
|
|
84
|
+
Output: {"category": "pre_sales", "priority": "medium", "sentiment": "neutral"}
|
|
85
|
+
|
|
86
|
+
Now classify this ticket:
|
|
87
|
+
{ticket_text}
|
|
88
|
+
|
|
89
|
+
Respond with JSON only."""
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### ❌ INCORRECT: Single example or no examples
|
|
93
|
+
```python
|
|
94
|
+
# DON'T: Only one example
|
|
95
|
+
FEW_SHOT_PROMPT = """Classify tickets.
|
|
96
|
+
Example: "Order issue" -> delivery_issue
|
|
97
|
+
|
|
98
|
+
{ticket_text}"""
|
|
99
|
+
# Not enough examples to establish pattern
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 3. Chain-of-Thought (CoT) Reasoning
|
|
103
|
+
|
|
104
|
+
#### ✅ CORRECT: Explicit reasoning steps (Context7 pattern)
|
|
105
|
+
```python
|
|
106
|
+
# Context7 pattern: Step-by-step reasoning
|
|
107
|
+
COT_PROMPT = """Answer the following question using step-by-step reasoning.
|
|
108
|
+
|
|
109
|
+
Question: {question}
|
|
110
|
+
|
|
111
|
+
Please follow this process:
|
|
112
|
+
1. Identify what the question is asking
|
|
113
|
+
2. List the key information provided
|
|
114
|
+
3. Determine what additional information or assumptions are needed
|
|
115
|
+
4. Work through the solution step by step
|
|
116
|
+
5. State your final answer
|
|
117
|
+
|
|
118
|
+
Let's think through this systematically:"""
|
|
119
|
+
|
|
120
|
+
# Usage
|
|
121
|
+
messages = [
|
|
122
|
+
{"role": "system", "content": "You are a logical reasoning assistant."},
|
|
123
|
+
{"role": "user", "content": COT_PROMPT.format(
|
|
124
|
+
question="If a train travels 120 miles in 2 hours, then 180 miles in the next 3 hours, what is its average speed?"
|
|
125
|
+
)}
|
|
126
|
+
]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### ❌ INCORRECT: Direct answer request without reasoning
|
|
130
|
+
```python
|
|
131
|
+
# DON'T: Skip reasoning process
|
|
132
|
+
PROMPT = "What is the average speed? Answer directly."
|
|
133
|
+
# Missing chain-of-thought guidance
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 4. Structured Output Generation
|
|
137
|
+
|
|
138
|
+
#### ✅ CORRECT: JSON schema with validation (Context7 pattern)
|
|
139
|
+
```python
|
|
140
|
+
from pydantic import BaseModel, Field
|
|
141
|
+
from typing import List, Literal
|
|
142
|
+
import json
|
|
143
|
+
|
|
144
|
+
class AnalysisResult(BaseModel):
|
|
145
|
+
"""Structured output schema"""
|
|
146
|
+
summary: str = Field(description="Brief summary in 1-2 sentences")
|
|
147
|
+
key_points: List[str] = Field(description="3-5 key points")
|
|
148
|
+
sentiment: Literal["positive", "negative", "neutral"] = Field(description="Overall sentiment")
|
|
149
|
+
confidence: float = Field(ge=0.0, le=1.0, description="Confidence score")
|
|
150
|
+
action_items: List[str] = Field(description="Recommended actions")
|
|
151
|
+
|
|
152
|
+
# Context7 pattern: JSON schema in prompt
|
|
153
|
+
STRUCTURED_PROMPT = f"""Analyze the following text and provide your response in this EXACT JSON format:
|
|
154
|
+
|
|
155
|
+
{json.dumps(AnalysisResult.model_json_schema(), indent=2)}
|
|
156
|
+
|
|
157
|
+
Text to analyze:
|
|
158
|
+
{{text}}
|
|
159
|
+
|
|
160
|
+
Respond with ONLY valid JSON matching the schema above. No additional text."""
|
|
161
|
+
|
|
162
|
+
# Validation after response
|
|
163
|
+
async def get_structured_analysis(text: str) -> AnalysisResult:
|
|
164
|
+
response = await client.chat.completions.create(
|
|
165
|
+
model="gpt-4",
|
|
166
|
+
messages=[{"role": "user", "content": STRUCTURED_PROMPT.format(text=text)}],
|
|
167
|
+
response_format={"type": "json_object"} # Context7: Force JSON output
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
# Parse and validate
|
|
171
|
+
result_data = json.loads(response.choices[0].message.content)
|
|
172
|
+
return AnalysisResult(**result_data)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### ❌ INCORRECT: Unstructured output request
|
|
176
|
+
```python
|
|
177
|
+
# DON'T: Unstructured output
|
|
178
|
+
PROMPT = "Analyze this text and tell me what you think."
|
|
179
|
+
# No structure - hard to parse programmatically
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 5. Context Window Management
|
|
183
|
+
|
|
184
|
+
#### ✅ CORRECT: Token counting and truncation (Context7 pattern)
|
|
185
|
+
```python
|
|
186
|
+
import tiktoken
|
|
187
|
+
|
|
188
|
+
class PromptManager:
|
|
189
|
+
"""Context7 pattern: Manage context window with token counting"""
|
|
190
|
+
def __init__(self, model: str = "gpt-4", max_tokens: int = 8000):
|
|
191
|
+
self.model = model
|
|
192
|
+
self.max_tokens = max_tokens
|
|
193
|
+
self.encoding = tiktoken.encoding_for_model(model)
|
|
194
|
+
|
|
195
|
+
def count_tokens(self, text: str) -> int:
|
|
196
|
+
"""Count tokens in text"""
|
|
197
|
+
return len(self.encoding.encode(text))
|
|
198
|
+
|
|
199
|
+
def truncate_to_fit(
|
|
200
|
+
self,
|
|
201
|
+
system_prompt: str,
|
|
202
|
+
user_message: str,
|
|
203
|
+
reserve_for_response: int = 1000
|
|
204
|
+
) -> tuple[str, str]:
|
|
205
|
+
"""Truncate messages to fit in context window"""
|
|
206
|
+
system_tokens = self.count_tokens(system_prompt)
|
|
207
|
+
user_tokens = self.count_tokens(user_message)
|
|
208
|
+
|
|
209
|
+
available_tokens = self.max_tokens - reserve_for_response
|
|
210
|
+
total_tokens = system_tokens + user_tokens
|
|
211
|
+
|
|
212
|
+
if total_tokens > available_tokens:
|
|
213
|
+
# Truncate user message
|
|
214
|
+
tokens_to_remove = total_tokens - available_tokens
|
|
215
|
+
user_encoded = self.encoding.encode(user_message)
|
|
216
|
+
truncated = user_encoded[:len(user_encoded) - tokens_to_remove]
|
|
217
|
+
user_message = self.encoding.decode(truncated) + "\n[...truncated]"
|
|
218
|
+
|
|
219
|
+
return system_prompt, user_message
|
|
220
|
+
|
|
221
|
+
# Usage
|
|
222
|
+
prompt_mgr = PromptManager(model="gpt-4", max_tokens=8000)
|
|
223
|
+
system, user = prompt_mgr.truncate_to_fit(system_prompt, long_user_message)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### ❌ INCORRECT: No token management
|
|
227
|
+
```python
|
|
228
|
+
# DON'T: No token counting
|
|
229
|
+
messages = [
|
|
230
|
+
{"role": "system", "content": very_long_system_prompt},
|
|
231
|
+
{"role": "user", "content": extremely_long_user_message}
|
|
232
|
+
]
|
|
233
|
+
# Will fail if exceeds context window
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### 6. Prompt Templates with Variables
|
|
237
|
+
|
|
238
|
+
#### ✅ CORRECT: Parameterized templates (Context7 LangChain pattern)
|
|
239
|
+
```python
|
|
240
|
+
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
|
|
241
|
+
from langchain_core.output_parsers import StrOutputParser
|
|
242
|
+
from langchain_openai import ChatOpenAI
|
|
243
|
+
|
|
244
|
+
# Context7 pattern: PromptTemplate with clear variables
|
|
245
|
+
code_review_template = PromptTemplate(
|
|
246
|
+
input_variables=["code", "language", "focus_areas"],
|
|
247
|
+
template="""Review the following {language} code and focus on: {focus_areas}
|
|
248
|
+
|
|
249
|
+
Code:
|
|
250
|
+
```{language}
|
|
251
|
+
{code}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Provide:
|
|
255
|
+
1. Overall code quality assessment
|
|
256
|
+
2. Specific issues found
|
|
257
|
+
3. Suggestions for improvement
|
|
258
|
+
4. Security considerations
|
|
259
|
+
|
|
260
|
+
Review:"""
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
# Context7 pattern: Chain with prompt template
|
|
264
|
+
review_chain = (
|
|
265
|
+
code_review_template
|
|
266
|
+
| ChatOpenAI(model="gpt-4", temperature=0)
|
|
267
|
+
| StrOutputParser()
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
# Usage
|
|
271
|
+
result = review_chain.invoke({
|
|
272
|
+
"code": source_code,
|
|
273
|
+
"language": "Python",
|
|
274
|
+
"focus_areas": "security, performance, maintainability"
|
|
275
|
+
})
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
#### ❌ INCORRECT: String concatenation
|
|
279
|
+
```python
|
|
280
|
+
# DON'T: String concatenation without templates
|
|
281
|
+
prompt = f"Review this code: {code}"
|
|
282
|
+
# No structure, hard to modify, prone to injection
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 7. Handling Ambiguous Inputs
|
|
286
|
+
|
|
287
|
+
#### ✅ CORRECT: Clarification prompts (Context7 pattern)
|
|
288
|
+
```python
|
|
289
|
+
# Context7 pattern: Handle ambiguity explicitly
|
|
290
|
+
CLARIFICATION_PROMPT = """I need to complete this task, but some information is missing or ambiguous.
|
|
291
|
+
|
|
292
|
+
Task: {task}
|
|
293
|
+
|
|
294
|
+
Ambiguities I've identified:
|
|
295
|
+
{ambiguities}
|
|
296
|
+
|
|
297
|
+
Please provide clarification for:
|
|
298
|
+
1. {question_1}
|
|
299
|
+
2. {question_2}
|
|
300
|
+
3. {question_3}
|
|
301
|
+
|
|
302
|
+
Or, if you'd prefer, I can make reasonable assumptions:
|
|
303
|
+
{assumptions}
|
|
304
|
+
|
|
305
|
+
How would you like me to proceed?"""
|
|
306
|
+
|
|
307
|
+
# Usage for handling unclear requests
|
|
308
|
+
async def handle_ambiguous_request(task: str):
|
|
309
|
+
# Detect ambiguity
|
|
310
|
+
if is_ambiguous(task):
|
|
311
|
+
clarification = await ask_for_clarification(task)
|
|
312
|
+
return clarification
|
|
313
|
+
else:
|
|
314
|
+
return await process_task(task)
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
#### ❌ INCORRECT: Assume without asking
|
|
318
|
+
```python
|
|
319
|
+
# DON'T: Make assumptions without clarifying
|
|
320
|
+
async def process_request(task):
|
|
321
|
+
# Assumes what user meant without asking
|
|
322
|
+
result = await client.chat.completions.create(...)
|
|
323
|
+
return result
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### 8. Temperature and Parameter Tuning
|
|
327
|
+
|
|
328
|
+
#### ✅ CORRECT: Task-specific temperature (Context7 pattern)
|
|
329
|
+
```python
|
|
330
|
+
from enum import Enum
|
|
331
|
+
|
|
332
|
+
class TaskType(Enum):
|
|
333
|
+
FACTUAL = "factual" # Low temperature
|
|
334
|
+
CREATIVE = "creative" # High temperature
|
|
335
|
+
CODE_GEN = "code_generation" # Low temperature
|
|
336
|
+
BRAINSTORM = "brainstorming" # High temperature
|
|
337
|
+
|
|
338
|
+
# Context7 pattern: Temperature based on task
|
|
339
|
+
TEMPERATURE_MAP = {
|
|
340
|
+
TaskType.FACTUAL: 0.1,
|
|
341
|
+
TaskType.CREATIVE: 0.9,
|
|
342
|
+
TaskType.CODE_GEN: 0.1,
|
|
343
|
+
TaskType.BRAINSTORM: 0.8
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
async def generate_with_appropriate_temp(
|
|
347
|
+
prompt: str,
|
|
348
|
+
task_type: TaskType
|
|
349
|
+
) -> str:
|
|
350
|
+
"""Use Context7-recommended temperature for task"""
|
|
351
|
+
temperature = TEMPERATURE_MAP[task_type]
|
|
352
|
+
|
|
353
|
+
response = await client.chat.completions.create(
|
|
354
|
+
model="gpt-4",
|
|
355
|
+
messages=[{"role": "user", "content": prompt}],
|
|
356
|
+
temperature=temperature,
|
|
357
|
+
top_p=0.95 # Context7: Slight nucleus sampling
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
return response.choices[0].message.content
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
#### ❌ INCORRECT: Fixed temperature for all tasks
|
|
364
|
+
```python
|
|
365
|
+
# DON'T: Same temperature for everything
|
|
366
|
+
response = await client.chat.completions.create(
|
|
367
|
+
model="gpt-4",
|
|
368
|
+
messages=[{"role": "user", "content": prompt}],
|
|
369
|
+
temperature=0.7 # Same for factual and creative tasks
|
|
370
|
+
)
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### 9. Prompt Injection Prevention
|
|
374
|
+
|
|
375
|
+
#### ✅ CORRECT: Input sanitization (Context7 pattern)
|
|
376
|
+
```python
|
|
377
|
+
import re
|
|
378
|
+
|
|
379
|
+
class PromptSanitizer:
|
|
380
|
+
"""Context7 pattern: Prevent prompt injection"""
|
|
381
|
+
DANGEROUS_PATTERNS = [
|
|
382
|
+
r"ignore previous instructions",
|
|
383
|
+
r"disregard all",
|
|
384
|
+
r"new instructions:",
|
|
385
|
+
r"system:",
|
|
386
|
+
r"<\|im_start\|>",
|
|
387
|
+
r"### Instruction",
|
|
388
|
+
]
|
|
389
|
+
|
|
390
|
+
@classmethod
|
|
391
|
+
def sanitize_input(cls, user_input: str) -> str:
|
|
392
|
+
"""Remove potentially dangerous patterns"""
|
|
393
|
+
# Check for injection attempts
|
|
394
|
+
for pattern in cls.DANGEROUS_PATTERNS:
|
|
395
|
+
if re.search(pattern, user_input, re.IGNORECASE):
|
|
396
|
+
raise ValueError(f"Potential prompt injection detected: {pattern}")
|
|
397
|
+
|
|
398
|
+
# Escape special characters
|
|
399
|
+
sanitized = user_input.replace("```", "'''")
|
|
400
|
+
|
|
401
|
+
return sanitized
|
|
402
|
+
|
|
403
|
+
@classmethod
|
|
404
|
+
def create_safe_prompt(cls, user_input: str, template: str) -> str:
|
|
405
|
+
"""Create prompt with sanitized input"""
|
|
406
|
+
sanitized = cls.sanitize_input(user_input)
|
|
407
|
+
return template.format(user_input=sanitized)
|
|
408
|
+
|
|
409
|
+
# Usage
|
|
410
|
+
try:
|
|
411
|
+
safe_prompt = PromptSanitizer.create_safe_prompt(
|
|
412
|
+
user_input,
|
|
413
|
+
"Analyze this: {user_input}"
|
|
414
|
+
)
|
|
415
|
+
except ValueError as e:
|
|
416
|
+
logger.error(f"Injection attempt blocked: {e}")
|
|
417
|
+
return "Invalid input detected"
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
#### ❌ INCORRECT: No input validation
|
|
421
|
+
```python
|
|
422
|
+
# DON'T: Direct user input without sanitization
|
|
423
|
+
prompt = f"Analyze this: {user_input}"
|
|
424
|
+
# Vulnerable to prompt injection
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### 10. Retrieval-Augmented Generation (RAG) Prompts
|
|
428
|
+
|
|
429
|
+
#### ✅ CORRECT: RAG with context citation (Context7 LangChain pattern)
|
|
430
|
+
```python
|
|
431
|
+
from langchain_core.runnables import RunnablePassthrough
|
|
432
|
+
from operator import itemgetter
|
|
433
|
+
|
|
434
|
+
# Context7 pattern: RAG with source citation
|
|
435
|
+
RAG_PROMPT = """Answer the question based ONLY on the following context.
|
|
436
|
+
If the context doesn't contain enough information, say "I don't have enough information to answer that question."
|
|
437
|
+
|
|
438
|
+
Context:
|
|
439
|
+
{context}
|
|
440
|
+
|
|
441
|
+
Question: {question}
|
|
442
|
+
|
|
443
|
+
Answer (cite specific parts of the context used):"""
|
|
444
|
+
|
|
445
|
+
# Context7 pattern: RunnablePassthrough.assign()
|
|
446
|
+
rag_chain = (
|
|
447
|
+
RunnablePassthrough.assign(
|
|
448
|
+
context=itemgetter("question")
|
|
449
|
+
| retriever
|
|
450
|
+
| (lambda docs: "\n\n".join(
|
|
451
|
+
f"[Source {i+1}]: {doc.page_content}"
|
|
452
|
+
for i, doc in enumerate(docs)
|
|
453
|
+
))
|
|
454
|
+
)
|
|
455
|
+
| ChatPromptTemplate.from_template(RAG_PROMPT)
|
|
456
|
+
| ChatOpenAI(model="gpt-4", temperature=0)
|
|
457
|
+
| StrOutputParser()
|
|
458
|
+
)
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
#### ❌ INCORRECT: RAG without context boundaries
|
|
462
|
+
```python
|
|
463
|
+
# DON'T: No instruction to stay within context
|
|
464
|
+
RAG_PROMPT = """Context: {context}
|
|
465
|
+
Question: {question}
|
|
466
|
+
Answer:"""
|
|
467
|
+
# Model may hallucinate beyond provided context
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Enforcement Rules
|
|
471
|
+
|
|
472
|
+
1. **All prompts MUST**:
|
|
473
|
+
- Include clear role definition in system prompts
|
|
474
|
+
- Specify output format explicitly
|
|
475
|
+
- Handle ambiguous inputs gracefully
|
|
476
|
+
- Use appropriate temperature for task type
|
|
477
|
+
- Sanitize user inputs to prevent injection
|
|
478
|
+
|
|
479
|
+
2. **All structured outputs MUST**:
|
|
480
|
+
- Use Pydantic schemas for validation
|
|
481
|
+
- Include JSON schema in prompt
|
|
482
|
+
- Use `response_format={"type": "json_object"}` when available
|
|
483
|
+
- Validate responses after parsing
|
|
484
|
+
|
|
485
|
+
3. **All RAG prompts MUST**:
|
|
486
|
+
- Explicitly instruct to use only provided context
|
|
487
|
+
- Request source citations
|
|
488
|
+
- Include fallback for insufficient information
|
|
489
|
+
- Use RunnablePassthrough.assign() for context injection
|
|
490
|
+
|
|
491
|
+
## Testing Requirements
|
|
492
|
+
|
|
493
|
+
1. **Prompt Testing**: Test with edge cases and adversarial inputs
|
|
494
|
+
2. **Injection Testing**: Verify sanitization blocks injection attempts
|
|
495
|
+
3. **Output Validation**: Ensure structured outputs match schema
|
|
496
|
+
4. **Context Testing**: Test with context window limits
|
|
497
|
+
|
|
498
|
+
## Security Requirements
|
|
499
|
+
|
|
500
|
+
1. **Input Sanitization**: Always sanitize user inputs
|
|
501
|
+
2. **Output Validation**: Validate structured outputs
|
|
502
|
+
3. **Injection Prevention**: Block prompt injection patterns
|
|
503
|
+
4. **PII Protection**: Remove sensitive information from prompts
|
|
504
|
+
|
|
505
|
+
## References
|
|
506
|
+
|
|
507
|
+
- Context7: `/openai/openai-python` - Prompt engineering best practices
|
|
508
|
+
- Context7: `/langchain-ai/langchain` - Prompt templates and chains
|
|
509
|
+
- OWASP LLM Top 10 - Prompt injection prevention
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
HuggingFace Inference Example - Context7 Best Practices
|
|
4
|
+
|
|
5
|
+
Demonstrates HuggingFace patterns from Context7:
|
|
6
|
+
- Pipeline API for simple inference
|
|
7
|
+
- AutoTokenizer and AutoModel patterns
|
|
8
|
+
- Efficient batch processing
|
|
9
|
+
- Device management (CPU/GPU)
|
|
10
|
+
- Model caching and optimization
|
|
11
|
+
|
|
12
|
+
Source: /huggingface/transformers (2,790 snippets, trust 9.6)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import logging
|
|
16
|
+
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
|
|
17
|
+
import torch
|
|
18
|
+
|
|
19
|
+
logging.basicConfig(level=logging.INFO)
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ===================================================================
|
|
24
|
+
# CONTEXT7 PATTERN: Pipeline API (Simplest Approach)
|
|
25
|
+
# ===================================================================
|
|
26
|
+
|
|
27
|
+
def pipeline_inference_example():
|
|
28
|
+
"""
|
|
29
|
+
Context7 Pattern: Use pipeline API for simplicity
|
|
30
|
+
"""
|
|
31
|
+
logger.info("Running pipeline inference example...")
|
|
32
|
+
|
|
33
|
+
# Context7 recommended: pipeline() for quick inference
|
|
34
|
+
generator = pipeline(
|
|
35
|
+
"text-generation",
|
|
36
|
+
model="distilgpt2", # Lightweight model for demo
|
|
37
|
+
device=0 if torch.cuda.is_available() else -1 # Auto device selection
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
prompt = "Artificial intelligence is"
|
|
41
|
+
results = generator(prompt, max_length=50, num_return_sequences=1)
|
|
42
|
+
|
|
43
|
+
logger.info("✓ Pipeline inference complete")
|
|
44
|
+
return results[0]["generated_text"]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def sentiment_analysis_example():
|
|
48
|
+
"""Context7 Pattern: Pre-configured sentiment pipeline"""
|
|
49
|
+
logger.info("Running sentiment analysis...")
|
|
50
|
+
|
|
51
|
+
# Context7 pattern: Pre-configured pipeline
|
|
52
|
+
classifier = pipeline(
|
|
53
|
+
"sentiment-analysis",
|
|
54
|
+
device=-1 # CPU for demo
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
texts = [
|
|
58
|
+
"I love this product! It's amazing!",
|
|
59
|
+
"This is terrible, waste of money.",
|
|
60
|
+
"It's okay, nothing special."
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
results = classifier(texts)
|
|
64
|
+
|
|
65
|
+
logger.info("✓ Sentiment analysis complete")
|
|
66
|
+
return results
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# ===================================================================
|
|
70
|
+
# CONTEXT7 PATTERN: AutoTokenizer and AutoModel
|
|
71
|
+
# ===================================================================
|
|
72
|
+
|
|
73
|
+
def manual_inference_example():
|
|
74
|
+
"""
|
|
75
|
+
Context7 Pattern: AutoTokenizer + AutoModel for flexibility
|
|
76
|
+
"""
|
|
77
|
+
logger.info("Running manual inference with AutoModel...")
|
|
78
|
+
|
|
79
|
+
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
|
|
80
|
+
|
|
81
|
+
# Context7 pattern: Auto classes for model loading
|
|
82
|
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
83
|
+
model = AutoModelForSequenceClassification.from_pretrained(model_name)
|
|
84
|
+
|
|
85
|
+
text = "This movie is fantastic!"
|
|
86
|
+
|
|
87
|
+
# Tokenize
|
|
88
|
+
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
|
|
89
|
+
|
|
90
|
+
# Inference
|
|
91
|
+
with torch.no_grad():
|
|
92
|
+
outputs = model(**inputs)
|
|
93
|
+
|
|
94
|
+
# Get predictions
|
|
95
|
+
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
|
|
96
|
+
sentiment = "POSITIVE" if predictions[0][1] > predictions[0][0] else "NEGATIVE"
|
|
97
|
+
confidence = predictions.max().item()
|
|
98
|
+
|
|
99
|
+
logger.info(f"✓ Manual inference: {sentiment} (confidence: {confidence:.2f})")
|
|
100
|
+
return {"sentiment": sentiment, "confidence": confidence}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# ===================================================================
|
|
104
|
+
# MAIN DEMONSTRATION
|
|
105
|
+
# ===================================================================
|
|
106
|
+
|
|
107
|
+
def main():
|
|
108
|
+
"""Run all HuggingFace pattern demonstrations"""
|
|
109
|
+
print("\n" + "=" * 60)
|
|
110
|
+
print("HuggingFace Inference Example - Context7 Best Practices")
|
|
111
|
+
print("=" * 60 + "\n")
|
|
112
|
+
|
|
113
|
+
# 1. Pipeline inference
|
|
114
|
+
print("1. Pipeline API (Text Generation)")
|
|
115
|
+
print("-" * 60)
|
|
116
|
+
result = pipeline_inference_example()
|
|
117
|
+
print(f"Generated: {result}\n")
|
|
118
|
+
|
|
119
|
+
# 2. Sentiment analysis
|
|
120
|
+
print("\n2. Pipeline API (Sentiment Analysis)")
|
|
121
|
+
print("-" * 60)
|
|
122
|
+
results = sentiment_analysis_example()
|
|
123
|
+
for i, res in enumerate(results, 1):
|
|
124
|
+
print(f"{i}. {res['label']} (score: {res['score']:.3f})")
|
|
125
|
+
|
|
126
|
+
# 3. Manual inference
|
|
127
|
+
print("\n\n3. AutoTokenizer + AutoModel (Manual)")
|
|
128
|
+
print("-" * 60)
|
|
129
|
+
result = manual_inference_example()
|
|
130
|
+
print(f"Result: {result}")
|
|
131
|
+
|
|
132
|
+
# Summary
|
|
133
|
+
print("\n" + "=" * 60)
|
|
134
|
+
print("EXAMPLES COMPLETED SUCCESSFULLY")
|
|
135
|
+
print("=" * 60)
|
|
136
|
+
print("\nContext7 Patterns Demonstrated:")
|
|
137
|
+
print("1. ✅ pipeline() API for quick inference")
|
|
138
|
+
print("2. ✅ AutoTokenizer + AutoModel for flexibility")
|
|
139
|
+
print("3. ✅ torch.no_grad() for inference efficiency")
|
|
140
|
+
print("4. ✅ Device management (CPU/GPU)")
|
|
141
|
+
print("\nSource: /huggingface/transformers (2,790 snippets, trust 9.6)")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
if __name__ == "__main__":
|
|
145
|
+
main()
|