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,221 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# GitHub Operations Utility Library
|
|
3
|
+
# Provides reusable functions for GitHub CLI operations
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Load dependencies
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
source "${SCRIPT_DIR}/logging-utils.sh"
|
|
10
|
+
|
|
11
|
+
# Check if GitHub CLI is authenticated
|
|
12
|
+
check_gh_auth() {
|
|
13
|
+
log_debug "Checking GitHub CLI authentication"
|
|
14
|
+
|
|
15
|
+
if ! command -v gh >/dev/null 2>&1; then
|
|
16
|
+
log_error "GitHub CLI (gh) is not installed"
|
|
17
|
+
echo "❌ GitHub CLI not found. Install: https://cli.github.com/"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
if ! gh auth status >/dev/null 2>&1; then
|
|
22
|
+
log_error "GitHub CLI not authenticated"
|
|
23
|
+
echo "❌ GitHub CLI not authenticated. Run: gh auth login"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
log_debug "GitHub CLI authentication verified"
|
|
28
|
+
return 0
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Check repository protection against template repos
|
|
32
|
+
check_repo_protection() {
|
|
33
|
+
log_debug "Checking repository protection"
|
|
34
|
+
|
|
35
|
+
local remote_url
|
|
36
|
+
remote_url=$(git remote get-url origin 2>/dev/null || echo "")
|
|
37
|
+
|
|
38
|
+
if [[ "$remote_url" == *"rlagowski/autopm"* ]] || [[ "$remote_url" == *"rafeekpro/ClaudeAutoPM"* ]]; then
|
|
39
|
+
log_error "Attempting to sync with template repository: $remote_url"
|
|
40
|
+
echo "❌ ERROR: Cannot sync to AutoPM template repository!"
|
|
41
|
+
echo ""
|
|
42
|
+
echo "This repository is a template for others to use."
|
|
43
|
+
echo "You should NOT create issues or PRs here."
|
|
44
|
+
echo ""
|
|
45
|
+
echo "To fix this:"
|
|
46
|
+
echo "1. Fork this repository to your own GitHub account"
|
|
47
|
+
echo "2. Update your remote origin:"
|
|
48
|
+
echo " git remote set-url origin https://github.com/YOUR_USERNAME/YOUR_REPO.git"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "Current remote: $remote_url"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
if [[ -z "$remote_url" ]]; then
|
|
55
|
+
log_warning "No remote origin found"
|
|
56
|
+
echo "⚠️ No remote origin configured. This may be a local-only repository."
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
log_debug "Repository protection check passed"
|
|
60
|
+
return 0
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# Create GitHub issue with proper error handling
|
|
64
|
+
create_github_issue() {
|
|
65
|
+
local title="$1"
|
|
66
|
+
local body_file="$2"
|
|
67
|
+
local labels="$3"
|
|
68
|
+
|
|
69
|
+
log_info "Creating GitHub issue: $title"
|
|
70
|
+
|
|
71
|
+
# Validate inputs
|
|
72
|
+
if [[ -z "$title" ]]; then
|
|
73
|
+
log_error "Issue title cannot be empty"
|
|
74
|
+
return 1
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
if [[ ! -f "$body_file" ]]; then
|
|
78
|
+
log_error "Issue body file not found: $body_file"
|
|
79
|
+
return 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Check authentication
|
|
83
|
+
check_gh_auth
|
|
84
|
+
|
|
85
|
+
# Create issue
|
|
86
|
+
local issue_number
|
|
87
|
+
if ! issue_output=$(gh issue create \
|
|
88
|
+
--title "$title" \
|
|
89
|
+
--body-file "$body_file" \
|
|
90
|
+
--label "$labels" \
|
|
91
|
+
--json number 2>/dev/null); then
|
|
92
|
+
log_error "Failed to create GitHub issue"
|
|
93
|
+
return 1
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# Extract just the number from JSON output
|
|
97
|
+
local issue_number
|
|
98
|
+
issue_number=$(echo "$issue_output" | grep -o '"number":[0-9]*' | cut -d: -f2)
|
|
99
|
+
|
|
100
|
+
log_success "Created GitHub issue #$issue_number"
|
|
101
|
+
echo "$issue_number"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Create GitHub sub-issue (if gh-sub-issue extension available)
|
|
105
|
+
create_github_subissue() {
|
|
106
|
+
local parent_issue="$1"
|
|
107
|
+
local title="$2"
|
|
108
|
+
local body_file="$3"
|
|
109
|
+
local labels="$4"
|
|
110
|
+
|
|
111
|
+
log_info "Creating GitHub sub-issue under #$parent_issue: $title"
|
|
112
|
+
|
|
113
|
+
# Check if gh-sub-issue extension is available
|
|
114
|
+
if gh extension list | grep -q "yahsan2/gh-sub-issue"; then
|
|
115
|
+
local issue_number
|
|
116
|
+
if ! issue_number=$(gh sub-issue create \
|
|
117
|
+
--parent "$parent_issue" \
|
|
118
|
+
--title "$title" \
|
|
119
|
+
--body-file "$body_file" \
|
|
120
|
+
--label "$labels" \
|
|
121
|
+
--json number -q .number 2>/dev/null); then
|
|
122
|
+
log_error "Failed to create GitHub sub-issue"
|
|
123
|
+
return 1
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
log_success "Created GitHub sub-issue #$issue_number"
|
|
127
|
+
echo "$issue_number"
|
|
128
|
+
else
|
|
129
|
+
log_debug "gh-sub-issue extension not available, using regular issue"
|
|
130
|
+
# Fallback to regular issue creation
|
|
131
|
+
create_github_issue "$title" "$body_file" "$labels"
|
|
132
|
+
fi
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Post comment to GitHub issue
|
|
136
|
+
post_github_comment() {
|
|
137
|
+
local issue_number="$1"
|
|
138
|
+
local comment_file="$2"
|
|
139
|
+
|
|
140
|
+
log_info "Posting comment to GitHub issue #$issue_number"
|
|
141
|
+
|
|
142
|
+
# Validate inputs
|
|
143
|
+
if [[ -z "$issue_number" ]] || [[ "$issue_number" =~ ^[0-9]+$ ]]; then
|
|
144
|
+
if [[ -z "$issue_number" ]]; then
|
|
145
|
+
log_error "Issue number cannot be empty"
|
|
146
|
+
return 1
|
|
147
|
+
fi
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
if [[ ! -f "$comment_file" ]]; then
|
|
151
|
+
log_error "Comment file not found: $comment_file"
|
|
152
|
+
return 1
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
# Check file size (GitHub limit: 65,536 characters)
|
|
156
|
+
local file_size
|
|
157
|
+
file_size=$(wc -c < "$comment_file")
|
|
158
|
+
if [[ "$file_size" -gt 65536 ]]; then
|
|
159
|
+
log_warning "Comment file exceeds GitHub limit (${file_size}/65536 chars)"
|
|
160
|
+
echo "⚠️ Comment truncated due to size. Full details in local files."
|
|
161
|
+
# Truncate file
|
|
162
|
+
head -c 65000 "$comment_file" > "${comment_file}.truncated"
|
|
163
|
+
echo -e "\n\n---\n*Comment truncated due to size limit*" >> "${comment_file}.truncated"
|
|
164
|
+
comment_file="${comment_file}.truncated"
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
# Check authentication and post comment
|
|
168
|
+
check_gh_auth
|
|
169
|
+
|
|
170
|
+
if ! gh issue comment "$issue_number" --body-file "$comment_file" >/dev/null 2>&1; then
|
|
171
|
+
log_error "Failed to post comment to issue #$issue_number"
|
|
172
|
+
return 1
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
log_success "Posted comment to GitHub issue #$issue_number"
|
|
176
|
+
return 0
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
# Get repository information
|
|
180
|
+
get_repo_info() {
|
|
181
|
+
check_gh_auth
|
|
182
|
+
|
|
183
|
+
local repo_info
|
|
184
|
+
if ! repo_info=$(gh repo view --json nameWithOwner,url -q '{nameWithOwner: .nameWithOwner, url: .url}' 2>/dev/null); then
|
|
185
|
+
log_error "Failed to get repository information"
|
|
186
|
+
return 1
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
echo "$repo_info"
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
# Check if issue exists and get its state
|
|
193
|
+
check_issue_exists() {
|
|
194
|
+
local issue_number="$1"
|
|
195
|
+
|
|
196
|
+
log_debug "Checking if issue #$issue_number exists"
|
|
197
|
+
|
|
198
|
+
check_gh_auth
|
|
199
|
+
|
|
200
|
+
local issue_state
|
|
201
|
+
if ! issue_state=$(gh issue view "$issue_number" --json state -q .state 2>/dev/null); then
|
|
202
|
+
log_debug "Issue #$issue_number not found"
|
|
203
|
+
return 1
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
log_debug "Issue #$issue_number exists with state: $issue_state"
|
|
207
|
+
echo "$issue_state"
|
|
208
|
+
return 0
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
# Utility function to validate issue number format
|
|
212
|
+
validate_issue_number() {
|
|
213
|
+
local issue_number="$1"
|
|
214
|
+
|
|
215
|
+
if [[ ! "$issue_number" =~ ^[0-9]+$ ]]; then
|
|
216
|
+
log_error "Invalid issue number format: $issue_number"
|
|
217
|
+
return 1
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
return 0
|
|
221
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Logging Utility Library
|
|
3
|
+
# Provides consistent logging across all scripts
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Colors for output (only define if not already defined)
|
|
8
|
+
if [[ -z "${RED:-}" ]]; then
|
|
9
|
+
readonly RED='\033[0;31m'
|
|
10
|
+
readonly GREEN='\033[0;32m'
|
|
11
|
+
readonly YELLOW='\033[1;33m'
|
|
12
|
+
readonly BLUE='\033[0;34m'
|
|
13
|
+
readonly PURPLE='\033[0;35m'
|
|
14
|
+
readonly CYAN='\033[0;36m'
|
|
15
|
+
readonly WHITE='\033[1;37m'
|
|
16
|
+
readonly NC='\033[0m' # No Color
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Log levels (only define if not already defined)
|
|
20
|
+
if [[ -z "${LOG_LEVEL_DEBUG:-}" ]]; then
|
|
21
|
+
readonly LOG_LEVEL_DEBUG=0
|
|
22
|
+
readonly LOG_LEVEL_INFO=1
|
|
23
|
+
readonly LOG_LEVEL_WARNING=2
|
|
24
|
+
readonly LOG_LEVEL_ERROR=3
|
|
25
|
+
readonly LOG_LEVEL_SUCCESS=4
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Default log level (can be overridden by AUTOPM_LOG_LEVEL env var)
|
|
29
|
+
LOG_LEVEL=${AUTOPM_LOG_LEVEL:-$LOG_LEVEL_INFO}
|
|
30
|
+
|
|
31
|
+
# Get current timestamp in ISO format
|
|
32
|
+
get_timestamp() {
|
|
33
|
+
date -u +"%Y-%m-%dT%H:%M:%SZ"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Generic log function
|
|
37
|
+
_log() {
|
|
38
|
+
local level="$1"
|
|
39
|
+
local color="$2"
|
|
40
|
+
local prefix="$3"
|
|
41
|
+
local message="$4"
|
|
42
|
+
|
|
43
|
+
if [[ "$level" -ge "$LOG_LEVEL" ]]; then
|
|
44
|
+
local timestamp
|
|
45
|
+
timestamp=$(get_timestamp)
|
|
46
|
+
|
|
47
|
+
if [[ -t 1 ]]; then
|
|
48
|
+
# Terminal output - use colors
|
|
49
|
+
echo -e "${color}[${timestamp}] ${prefix}${NC} ${message}" >&2
|
|
50
|
+
else
|
|
51
|
+
# Non-terminal output - no colors
|
|
52
|
+
echo "[${timestamp}] ${prefix} ${message}" >&2
|
|
53
|
+
fi
|
|
54
|
+
fi
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Log debug message
|
|
58
|
+
log_debug() {
|
|
59
|
+
_log "$LOG_LEVEL_DEBUG" "$CYAN" "DEBUG" "$*"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Log info message
|
|
63
|
+
log_info() {
|
|
64
|
+
_log "$LOG_LEVEL_INFO" "$BLUE" "INFO " "$*"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# Log warning message
|
|
68
|
+
log_warning() {
|
|
69
|
+
_log "$LOG_LEVEL_WARNING" "$YELLOW" "WARN " "$*"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# Log error message
|
|
73
|
+
log_error() {
|
|
74
|
+
_log "$LOG_LEVEL_ERROR" "$RED" "ERROR" "$*"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Log success message
|
|
78
|
+
log_success() {
|
|
79
|
+
_log "$LOG_LEVEL_SUCCESS" "$GREEN" "OK " "$*"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# Log function entry (for debugging)
|
|
83
|
+
log_function_entry() {
|
|
84
|
+
local function_name="$1"
|
|
85
|
+
shift
|
|
86
|
+
log_debug "ENTER: ${function_name}($*)"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# Log function exit (for debugging)
|
|
90
|
+
log_function_exit() {
|
|
91
|
+
local function_name="$1"
|
|
92
|
+
local exit_code="${2:-0}"
|
|
93
|
+
log_debug "EXIT: ${function_name} (code: ${exit_code})"
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# Progress indicator for long operations
|
|
97
|
+
show_progress() {
|
|
98
|
+
local message="$1"
|
|
99
|
+
local delay="${2:-0.1}"
|
|
100
|
+
|
|
101
|
+
echo -n "$message"
|
|
102
|
+
while true; do
|
|
103
|
+
for char in '|' '/' '-' '\'; do
|
|
104
|
+
echo -ne "\r$message $char"
|
|
105
|
+
sleep "$delay"
|
|
106
|
+
done
|
|
107
|
+
done
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Stop progress indicator
|
|
111
|
+
stop_progress() {
|
|
112
|
+
echo -e "\r$1 ✓"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# Print separator line
|
|
116
|
+
print_separator() {
|
|
117
|
+
local char="${1:--}"
|
|
118
|
+
local length="${2:-50}"
|
|
119
|
+
|
|
120
|
+
printf "%*s\n" "$length" | tr ' ' "$char"
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# Print section header
|
|
124
|
+
print_section() {
|
|
125
|
+
local title="$1"
|
|
126
|
+
local color="${2:-$WHITE}"
|
|
127
|
+
|
|
128
|
+
echo
|
|
129
|
+
print_separator "="
|
|
130
|
+
echo -e "${color}${title}${NC}"
|
|
131
|
+
print_separator "="
|
|
132
|
+
echo
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Print banner with script name
|
|
136
|
+
print_banner() {
|
|
137
|
+
local script_name="$1"
|
|
138
|
+
local version="${2:-}"
|
|
139
|
+
|
|
140
|
+
print_section "🚀 ClaudeAutoPM - ${script_name}" "$CYAN"
|
|
141
|
+
|
|
142
|
+
if [[ -n "$version" ]]; then
|
|
143
|
+
echo -e "${BLUE}Version: ${version}${NC}"
|
|
144
|
+
echo
|
|
145
|
+
fi
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# Error handling wrapper
|
|
149
|
+
with_error_handling() {
|
|
150
|
+
local operation="$1"
|
|
151
|
+
shift
|
|
152
|
+
|
|
153
|
+
log_info "Starting: $operation"
|
|
154
|
+
|
|
155
|
+
if "$@"; then
|
|
156
|
+
log_success "Completed: $operation"
|
|
157
|
+
return 0
|
|
158
|
+
else
|
|
159
|
+
local exit_code=$?
|
|
160
|
+
log_error "Failed: $operation (exit code: $exit_code)"
|
|
161
|
+
return $exit_code
|
|
162
|
+
fi
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
# Confirmation prompt
|
|
166
|
+
confirm() {
|
|
167
|
+
local message="$1"
|
|
168
|
+
local default="${2:-n}"
|
|
169
|
+
|
|
170
|
+
local prompt="$message"
|
|
171
|
+
if [[ "$default" == "y" ]]; then
|
|
172
|
+
prompt="$prompt [Y/n]: "
|
|
173
|
+
else
|
|
174
|
+
prompt="$prompt [y/N]: "
|
|
175
|
+
fi
|
|
176
|
+
|
|
177
|
+
echo -n "$prompt"
|
|
178
|
+
read -r response
|
|
179
|
+
|
|
180
|
+
case "$response" in
|
|
181
|
+
[Yy]|[Yy][Ee][Ss])
|
|
182
|
+
return 0
|
|
183
|
+
;;
|
|
184
|
+
[Nn]|[Nn][Oo])
|
|
185
|
+
return 1
|
|
186
|
+
;;
|
|
187
|
+
"")
|
|
188
|
+
if [[ "$default" == "y" ]]; then
|
|
189
|
+
return 0
|
|
190
|
+
else
|
|
191
|
+
return 1
|
|
192
|
+
fi
|
|
193
|
+
;;
|
|
194
|
+
*)
|
|
195
|
+
echo "Please answer yes or no."
|
|
196
|
+
confirm "$message" "$default"
|
|
197
|
+
;;
|
|
198
|
+
esac
|
|
199
|
+
}
|