convoke-agents 2.0.0
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/CHANGELOG.md +920 -0
- package/INSTALLATION.md +230 -0
- package/LICENSE +21 -0
- package/README.md +330 -0
- package/UPDATE-GUIDE.md +220 -0
- package/_bmad/bme/_vortex/README.md +150 -0
- package/_bmad/bme/_vortex/agents/contextualization-expert.md +100 -0
- package/_bmad/bme/_vortex/agents/discovery-empathy-expert.md +117 -0
- package/_bmad/bme/_vortex/agents/hypothesis-engineer.md +117 -0
- package/_bmad/bme/_vortex/agents/lean-experiments-specialist.md +118 -0
- package/_bmad/bme/_vortex/agents/learning-decision-expert.md +117 -0
- package/_bmad/bme/_vortex/agents/production-intelligence-specialist.md +117 -0
- package/_bmad/bme/_vortex/agents/research-convergence-specialist.md +117 -0
- package/_bmad/bme/_vortex/compass-routing-reference.md +312 -0
- package/_bmad/bme/_vortex/config.yaml +46 -0
- package/_bmad/bme/_vortex/contracts/hc1-empathy-artifacts.md +152 -0
- package/_bmad/bme/_vortex/contracts/hc2-problem-definition.md +125 -0
- package/_bmad/bme/_vortex/contracts/hc3-hypothesis-contract.md +112 -0
- package/_bmad/bme/_vortex/contracts/hc4-experiment-context.md +140 -0
- package/_bmad/bme/_vortex/contracts/hc5-signal-report.md +130 -0
- package/_bmad/bme/_vortex/examples/hc2-example-problem-definition.md +85 -0
- package/_bmad/bme/_vortex/examples/hc3-example-hypothesis-contract.md +103 -0
- package/_bmad/bme/_vortex/examples/hc5-example-signal-report.md +76 -0
- package/_bmad/bme/_vortex/guides/EMMA-USER-GUIDE.md +232 -0
- package/_bmad/bme/_vortex/guides/ISLA-USER-GUIDE.md +208 -0
- package/_bmad/bme/_vortex/guides/LIAM-USER-GUIDE.md +255 -0
- package/_bmad/bme/_vortex/guides/MAX-USER-GUIDE.md +213 -0
- package/_bmad/bme/_vortex/guides/MILA-USER-GUIDE.md +235 -0
- package/_bmad/bme/_vortex/guides/NOAH-USER-GUIDE.md +258 -0
- package/_bmad/bme/_vortex/guides/WADE-USER-GUIDE.md +245 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/empathy-map.template.md +143 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-01-define-user.md +60 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-02-says-thinks.md +67 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-03-does-feels.md +79 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-04-pain-points.md +87 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-05-gains.md +103 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-06-synthesize.md +104 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/validate.md +117 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/workflow.md +44 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-01-define-requirements.md +85 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-02-user-flows.md +59 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-03-information-architecture.md +68 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-04-wireframe-sketch.md +97 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-05-components.md +128 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-06-synthesize.md +83 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/wireframe.template.md +287 -0
- package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/workflow.md +44 -0
- package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-01-setup.md +66 -0
- package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-02-context.md +93 -0
- package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-03-risk-mapping.md +103 -0
- package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-04-synthesize.md +101 -0
- package/_bmad/bme/_vortex/workflows/assumption-mapping/workflow.md +49 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-01-setup.md +81 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-02-context.md +67 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-03-classification.md +98 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-04-evidence.md +100 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-05-synthesize.md +174 -0
- package/_bmad/bme/_vortex/workflows/behavior-analysis/workflow.md +52 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/contextualize-scope.template.md +67 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-01-list-opportunities.md +47 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-02-define-criteria.md +36 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-03-evaluate-opportunities.md +30 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-04-define-boundaries.md +32 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-05-validate-fit.md +28 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-06-synthesize.md +36 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/contextualize-scope/workflow.md +59 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/empathy-map.template.md +143 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-01-define-user.md +60 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-02-says-thinks.md +67 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-03-does-feels.md +79 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-04-pain-points.md +87 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-05-gains.md +103 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-06-synthesize.md +107 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/validate.md +117 -0
- package/_bmad/bme/_vortex/workflows/empathy-map/workflow.md +45 -0
- package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-01-setup.md +66 -0
- package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-02-context.md +77 -0
- package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-03-design.md +114 -0
- package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-04-synthesize.md +128 -0
- package/_bmad/bme/_vortex/workflows/experiment-design/workflow.md +51 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-01-setup.md +66 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-02-context.md +80 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-03-brainwriting.md +79 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-04-assumption-mapping.md +102 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-05-synthesize.md +130 -0
- package/_bmad/bme/_vortex/workflows/hypothesis-engineering/workflow.md +52 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/lean-experiment.template.md +29 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-01-hypothesis.md +58 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-02-design.md +68 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-03-metrics.md +73 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-04-run.md +75 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-05-analyze.md +84 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-06-decide.md +111 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/lean-experiment/workflow.md +26 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/lean-persona.template.md +163 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-01-define-job.md +72 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-02-current-solution.md +83 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-03-problem-contexts.md +90 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-04-forces-anxieties.md +98 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-05-success-criteria.md +103 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-06-synthesize.md +129 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/lean-persona/workflow.md +50 -0
- package/_bmad/bme/_vortex/workflows/learning-card/learning-card.template.md +179 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-01-experiment-context.md +100 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-02-raw-results.md +125 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-03-analysis.md +125 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-04-validated-learning.md +139 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-05-implications.md +134 -0
- package/_bmad/bme/_vortex/workflows/learning-card/steps/step-06-synthesize.md +121 -0
- package/_bmad/bme/_vortex/workflows/learning-card/validate.md +134 -0
- package/_bmad/bme/_vortex/workflows/learning-card/workflow.md +51 -0
- package/_bmad/bme/_vortex/workflows/mvp/mvp.template.md +40 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-01-riskiest-assumption.md +17 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-02-success-criteria.md +13 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-03-smallest-test.md +13 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-04-scope-features.md +13 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-05-build-measure-learn.md +13 -0
- package/_bmad/bme/_vortex/workflows/mvp/steps/step-06-synthesize.md +28 -0
- package/_bmad/bme/_vortex/workflows/mvp/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/mvp/workflow.md +36 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-01-setup.md +102 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-02-context.md +81 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-03-pattern-identification.md +88 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-04-theme-clustering.md +100 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-05-synthesize.md +135 -0
- package/_bmad/bme/_vortex/workflows/pattern-mapping/workflow.md +58 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/pivot-patch-persevere.template.md +201 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-01-evidence-review.md +125 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-02-hypothesis-assessment.md +132 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-03-option-analysis.md +167 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-04-stakeholder-input.md +141 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-05-decision.md +161 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-06-action-plan.md +188 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/validate.md +159 -0
- package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/workflow.md +51 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-01-setup.md +97 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-02-context.md +86 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-03-jtbd-reframing.md +88 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-04-pains-gains-revision.md +76 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-05-synthesize.md +158 -0
- package/_bmad/bme/_vortex/workflows/pivot-resynthesis/workflow.md +52 -0
- package/_bmad/bme/_vortex/workflows/product-vision/product-vision.template.md +147 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-01-define-problem.md +89 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-02-target-market.md +91 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-03-unique-approach.md +87 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-04-future-state.md +100 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-05-principles.md +92 -0
- package/_bmad/bme/_vortex/workflows/product-vision/steps/step-06-synthesize.md +170 -0
- package/_bmad/bme/_vortex/workflows/product-vision/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/product-vision/workflow.md +55 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-01-setup.md +84 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-02-context.md +66 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-03-monitoring.md +74 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-04-prioritization.md +97 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-05-synthesize.md +183 -0
- package/_bmad/bme/_vortex/workflows/production-monitoring/workflow.md +52 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/proof-of-concept.template.md +25 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-01-risk.md +79 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-02-scope.md +105 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-03-build.md +92 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-04-test.md +103 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-05-evaluate.md +114 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-06-document.md +125 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/proof-of-concept/workflow.md +26 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/proof-of-value.template.md +29 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-01-value-hypothesis.md +75 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-02-validation-design.md +94 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-03-willingness.md +96 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-04-test.md +107 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-05-analyze.md +116 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-06-document.md +147 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/validate.md +30 -0
- package/_bmad/bme/_vortex/workflows/proof-of-value/workflow.md +26 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-01-setup.md +69 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-02-context.md +70 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-03-jtbd-framing.md +81 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-04-pains-gains.md +77 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-05-synthesize.md +147 -0
- package/_bmad/bme/_vortex/workflows/research-convergence/workflow.md +50 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-01-setup.md +68 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-02-context.md +67 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-03-signal-analysis.md +85 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-04-anomaly-detection.md +93 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-05-synthesize.md +163 -0
- package/_bmad/bme/_vortex/workflows/signal-interpretation/workflow.md +52 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-01-discovery-scope.md +77 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-02-research-methods.md +152 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-03-research-plan.md +159 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-04-execute.md +169 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-05-organize-data.md +149 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-06-synthesize.md +159 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/user-discovery.template.md +231 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/validate.md +153 -0
- package/_bmad/bme/_vortex/workflows/user-discovery/workflow.md +45 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-01-research-goals.md +100 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-02-interview-script.md +123 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-03-recruitment.md +144 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-04-conduct.md +154 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-05-findings.md +163 -0
- package/_bmad/bme/_vortex/workflows/user-interview/steps/step-06-synthesize.md +171 -0
- package/_bmad/bme/_vortex/workflows/user-interview/user-interview.template.md +250 -0
- package/_bmad/bme/_vortex/workflows/user-interview/validate.md +142 -0
- package/_bmad/bme/_vortex/workflows/user-interview/workflow.md +51 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-01-current-state.md +56 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-02-evidence-inventory.md +70 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-03-gap-analysis.md +76 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-04-stream-evaluation.md +57 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-05-recommendation.md +65 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-06-navigation-plan.md +72 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/validate.md +75 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/vortex-navigation.template.md +105 -0
- package/_bmad/bme/_vortex/workflows/vortex-navigation/workflow.md +54 -0
- package/index.js +56 -0
- package/package.json +77 -0
- package/scripts/README.md +226 -0
- package/scripts/convoke-doctor.js +322 -0
- package/scripts/docs-audit.js +584 -0
- package/scripts/install-all-agents.js +9 -0
- package/scripts/install-vortex-agents.js +208 -0
- package/scripts/postinstall.js +104 -0
- package/scripts/update/convoke-migrate.js +169 -0
- package/scripts/update/convoke-update.js +272 -0
- package/scripts/update/convoke-version.js +134 -0
- package/scripts/update/lib/agent-registry.js +144 -0
- package/scripts/update/lib/backup-manager.js +243 -0
- package/scripts/update/lib/config-merger.js +242 -0
- package/scripts/update/lib/migration-runner.js +367 -0
- package/scripts/update/lib/refresh-installation.js +171 -0
- package/scripts/update/lib/utils.js +96 -0
- package/scripts/update/lib/validator.js +360 -0
- package/scripts/update/lib/version-detector.js +241 -0
- package/scripts/update/migrations/1.0.x-to-1.3.0.js +128 -0
- package/scripts/update/migrations/1.1.x-to-1.3.0.js +29 -0
- package/scripts/update/migrations/1.2.x-to-1.3.0.js +29 -0
- package/scripts/update/migrations/1.3.x-to-1.5.0.js +29 -0
- package/scripts/update/migrations/1.4.x-to-1.5.0.js +29 -0
- package/scripts/update/migrations/1.5.x-to-1.6.0.js +95 -0
- package/scripts/update/migrations/1.6.x-to-1.7.0.js +29 -0
- package/scripts/update/migrations/1.7.x-to-2.0.0.js +31 -0
- package/scripts/update/migrations/registry.js +194 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Convoke Installation Scripts
|
|
2
|
+
|
|
3
|
+
This directory contains npm-based installation scripts for Convoke agents.
|
|
4
|
+
|
|
5
|
+
## Available Scripts
|
|
6
|
+
|
|
7
|
+
### `install-emma.js`
|
|
8
|
+
Installs Emma (empathy-mapper) agent into your project.
|
|
9
|
+
|
|
10
|
+
**What it does:**
|
|
11
|
+
- Creates `_bmad/bme/_vortex/` directory structure
|
|
12
|
+
- Copies Emma agent file (`empathy-mapper.md`)
|
|
13
|
+
- Copies Emma workflow files (lean-persona, product-vision, contextualize-scope)
|
|
14
|
+
- Creates/updates `config.yaml`
|
|
15
|
+
- Updates `agent-manifest.csv`
|
|
16
|
+
- Creates output directory
|
|
17
|
+
|
|
18
|
+
**Usage:**
|
|
19
|
+
```bash
|
|
20
|
+
npm run install:emma
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### `install-wade.js`
|
|
26
|
+
Installs Wade (wireframe-designer) agent into your project.
|
|
27
|
+
|
|
28
|
+
**What it does:**
|
|
29
|
+
- Creates `_bmad/bme/_vortex/` directory structure
|
|
30
|
+
- Copies Wade agent file (`wireframe-designer.md`)
|
|
31
|
+
- Copies Wade workflow files (mvp, lean-experiment, proof-of-concept, proof-of-value)
|
|
32
|
+
- Creates/updates `config.yaml`
|
|
33
|
+
- Updates `agent-manifest.csv`
|
|
34
|
+
- Creates output directory
|
|
35
|
+
|
|
36
|
+
**Usage:**
|
|
37
|
+
```bash
|
|
38
|
+
npm run install:wade
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### `install-all-agents.js`
|
|
44
|
+
Installs both Emma and Wade agents at once.
|
|
45
|
+
|
|
46
|
+
**What it does:**
|
|
47
|
+
- All actions from `install-emma.js`
|
|
48
|
+
- All actions from `install-wade.js`
|
|
49
|
+
- Creates unified `config.yaml` with both agents
|
|
50
|
+
- Copies user guides for both agents
|
|
51
|
+
|
|
52
|
+
**Usage:**
|
|
53
|
+
```bash
|
|
54
|
+
npm run install:agents
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### `postinstall.js`
|
|
60
|
+
Runs automatically after `npm install` to display installation instructions.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Installation Flow
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
npm install convoke
|
|
68
|
+
↓
|
|
69
|
+
postinstall.js runs
|
|
70
|
+
↓
|
|
71
|
+
Displays available commands
|
|
72
|
+
↓
|
|
73
|
+
User runs: npm run install:agents (or individual agent)
|
|
74
|
+
↓
|
|
75
|
+
install-all-agents.js (or individual installer)
|
|
76
|
+
↓
|
|
77
|
+
Checks prerequisites
|
|
78
|
+
↓
|
|
79
|
+
Copies agent files to _bmad/bme/_designos/
|
|
80
|
+
↓
|
|
81
|
+
Creates/updates config.yaml
|
|
82
|
+
↓
|
|
83
|
+
Updates agent-manifest.csv
|
|
84
|
+
↓
|
|
85
|
+
Creates output directory
|
|
86
|
+
↓
|
|
87
|
+
Copies user guides
|
|
88
|
+
↓
|
|
89
|
+
Success! Agents ready to use
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## File Structure Created
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
your-project/
|
|
98
|
+
├── _bmad/
|
|
99
|
+
│ ├── bme/
|
|
100
|
+
│ │ └── _vortex/
|
|
101
|
+
│ │ ├── agents/
|
|
102
|
+
│ │ │ ├── empathy-mapper.md
|
|
103
|
+
│ │ │ └── wireframe-designer.md
|
|
104
|
+
│ │ ├── workflows/
|
|
105
|
+
│ │ │ ├── lean-persona/
|
|
106
|
+
│ │ │ │ ├── workflow.md
|
|
107
|
+
│ │ │ │ └── validate.md
|
|
108
|
+
│ │ │ ├── product-vision/
|
|
109
|
+
│ │ │ │ ├── workflow.md
|
|
110
|
+
│ │ │ │ └── validate.md
|
|
111
|
+
│ │ │ ├── contextualize-scope/
|
|
112
|
+
│ │ │ │ ├── workflow.md
|
|
113
|
+
│ │ │ │ └── validate.md
|
|
114
|
+
│ │ │ ├── mvp/
|
|
115
|
+
│ │ │ │ ├── workflow.md
|
|
116
|
+
│ │ │ │ └── validate.md
|
|
117
|
+
│ │ │ ├── lean-experiment/
|
|
118
|
+
│ │ │ │ ├── workflow.md
|
|
119
|
+
│ │ │ │ └── validate.md
|
|
120
|
+
│ │ │ ├── proof-of-concept/
|
|
121
|
+
│ │ │ │ ├── workflow.md
|
|
122
|
+
│ │ │ │ └── validate.md
|
|
123
|
+
│ │ │ └── proof-of-value/
|
|
124
|
+
│ │ │ ├── workflow.md
|
|
125
|
+
│ │ │ └── validate.md
|
|
126
|
+
│ │ └── config.yaml
|
|
127
|
+
│ └── _config/
|
|
128
|
+
│ └── agent-manifest.csv
|
|
129
|
+
└── _bmad-output/
|
|
130
|
+
└── vortex-artifacts/
|
|
131
|
+
├── EMMA-USER-GUIDE.md
|
|
132
|
+
└── WADE-USER-GUIDE.md
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Configuration
|
|
138
|
+
|
|
139
|
+
### config.yaml
|
|
140
|
+
```yaml
|
|
141
|
+
---
|
|
142
|
+
submodule_name: _vortex
|
|
143
|
+
description: Contextualize and Externalize streams - Strategic framing and validated learning
|
|
144
|
+
module: bme
|
|
145
|
+
version: 1.1.0
|
|
146
|
+
|
|
147
|
+
# Output Configuration
|
|
148
|
+
output_folder: "{project-root}/_bmad-output/vortex-artifacts"
|
|
149
|
+
user_name: "{user}"
|
|
150
|
+
communication_language: "en"
|
|
151
|
+
|
|
152
|
+
# Agents in this submodule
|
|
153
|
+
agents:
|
|
154
|
+
- empathy-mapper # Emma - Contextualization Expert
|
|
155
|
+
- wireframe-designer # Wade - Lean Experiments Specialist
|
|
156
|
+
|
|
157
|
+
# Workflows available
|
|
158
|
+
workflows:
|
|
159
|
+
# Emma - Contextualize Stream
|
|
160
|
+
- lean-persona # Create lean user personas
|
|
161
|
+
- product-vision # Define product vision
|
|
162
|
+
- contextualize-scope # Decide which problem space to investigate
|
|
163
|
+
|
|
164
|
+
# Wade - Externalize Stream
|
|
165
|
+
- mvp # Design Minimum Viable Product
|
|
166
|
+
- lean-experiment # Run Build-Measure-Learn cycle
|
|
167
|
+
- proof-of-concept # Validate technical feasibility
|
|
168
|
+
- proof-of-value # Validate business value
|
|
169
|
+
|
|
170
|
+
# Integration
|
|
171
|
+
party_mode_enabled: true
|
|
172
|
+
core_module: bme
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
You can customize these values after installation.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Troubleshooting
|
|
180
|
+
|
|
181
|
+
### "Cannot find module 'fs-extra'"
|
|
182
|
+
```bash
|
|
183
|
+
npm install fs-extra chalk
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### "Permission denied"
|
|
187
|
+
```bash
|
|
188
|
+
chmod +x scripts/*.js
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### "Config already exists"
|
|
192
|
+
The installers will update existing config files rather than overwriting them.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Development
|
|
197
|
+
|
|
198
|
+
### Testing Installers Locally
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Test Emma installer
|
|
202
|
+
node scripts/install-emma.js
|
|
203
|
+
|
|
204
|
+
# Test Wade installer
|
|
205
|
+
node scripts/install-wade.js
|
|
206
|
+
|
|
207
|
+
# Test all-agents installer
|
|
208
|
+
node scripts/install-all-agents.js
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Adding New Agents
|
|
212
|
+
|
|
213
|
+
To add a new agent installer:
|
|
214
|
+
|
|
215
|
+
1. Copy `install-emma.js` as template
|
|
216
|
+
2. Update agent name, files, and workflows
|
|
217
|
+
3. Add to `package.json` scripts:
|
|
218
|
+
```json
|
|
219
|
+
"install:new-agent": "node scripts/install-new-agent.js"
|
|
220
|
+
```
|
|
221
|
+
4. Update `install-all-agents.js` to include new agent
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
**Version:** 1.1.0
|
|
226
|
+
**Last Updated:** 2026-02-16
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const chalk = require('chalk');
|
|
6
|
+
const yaml = require('js-yaml');
|
|
7
|
+
const { findProjectRoot, getPackageVersion } = require('./update/lib/utils');
|
|
8
|
+
const { AGENT_FILES, WORKFLOW_NAMES } = require('./update/lib/agent-registry');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* convoke-doctor — Diagnose common Convoke installation issues.
|
|
12
|
+
* Runs a series of checks and reports pass/fail with actionable fix suggestions.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
async function main() {
|
|
16
|
+
console.log('');
|
|
17
|
+
console.log(chalk.cyan.bold('Convoke Doctor'));
|
|
18
|
+
console.log(chalk.gray(`Package version: ${getPackageVersion()}`));
|
|
19
|
+
console.log('');
|
|
20
|
+
|
|
21
|
+
const projectRoot = findProjectRoot();
|
|
22
|
+
const checks = [];
|
|
23
|
+
|
|
24
|
+
// 1. Project root detection
|
|
25
|
+
checks.push(checkProjectRoot(projectRoot));
|
|
26
|
+
|
|
27
|
+
if (!projectRoot) {
|
|
28
|
+
printResults(checks);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// 2. Config file
|
|
34
|
+
checks.push(checkConfig(projectRoot));
|
|
35
|
+
|
|
36
|
+
// 3. Agent files
|
|
37
|
+
checks.push(checkAgents(projectRoot));
|
|
38
|
+
|
|
39
|
+
// 4. Workflow directories
|
|
40
|
+
checks.push(checkWorkflows(projectRoot));
|
|
41
|
+
|
|
42
|
+
// 5. Output directory writable
|
|
43
|
+
checks.push(await checkOutputDir(projectRoot));
|
|
44
|
+
|
|
45
|
+
// 6. Stale migration lock
|
|
46
|
+
checks.push(checkMigrationLock(projectRoot));
|
|
47
|
+
|
|
48
|
+
// 7. Version consistency
|
|
49
|
+
checks.push(checkVersionConsistency(projectRoot));
|
|
50
|
+
|
|
51
|
+
printResults(checks);
|
|
52
|
+
|
|
53
|
+
const failed = checks.filter(c => !c.passed);
|
|
54
|
+
process.exit(failed.length > 0 ? 1 : 0);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function checkProjectRoot(projectRoot) {
|
|
58
|
+
if (projectRoot) {
|
|
59
|
+
return {
|
|
60
|
+
name: 'Project root',
|
|
61
|
+
passed: true,
|
|
62
|
+
info: projectRoot
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
name: 'Project root',
|
|
67
|
+
passed: false,
|
|
68
|
+
error: 'Could not find _bmad/ directory',
|
|
69
|
+
fix: 'Run this command from inside a Convoke project, or run: npx convoke-install'
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function checkConfig(projectRoot) {
|
|
74
|
+
const configPath = path.join(projectRoot, '_bmad/bme/_vortex/config.yaml');
|
|
75
|
+
|
|
76
|
+
if (!fs.existsSync(configPath)) {
|
|
77
|
+
return {
|
|
78
|
+
name: 'Config file',
|
|
79
|
+
passed: false,
|
|
80
|
+
error: 'config.yaml not found',
|
|
81
|
+
fix: 'Run: npx convoke-install'
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
87
|
+
const config = yaml.load(content);
|
|
88
|
+
|
|
89
|
+
if (!config || typeof config !== 'object') {
|
|
90
|
+
return {
|
|
91
|
+
name: 'Config file',
|
|
92
|
+
passed: false,
|
|
93
|
+
error: 'config.yaml is empty or invalid',
|
|
94
|
+
fix: 'Delete _bmad/bme/_vortex/config.yaml and run: npx convoke-install'
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!config.agents) {
|
|
99
|
+
return {
|
|
100
|
+
name: 'Config file',
|
|
101
|
+
passed: false,
|
|
102
|
+
error: 'config.yaml missing agents section',
|
|
103
|
+
fix: 'Run: npx convoke-update'
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return { name: 'Config file', passed: true, info: 'Valid YAML with agents section' };
|
|
108
|
+
} catch (err) {
|
|
109
|
+
return {
|
|
110
|
+
name: 'Config file',
|
|
111
|
+
passed: false,
|
|
112
|
+
error: `YAML parse error: ${err.message}`,
|
|
113
|
+
fix: 'Check config.yaml for syntax errors, or delete and run: npx convoke-install'
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function checkAgents(projectRoot) {
|
|
119
|
+
const agentsDir = path.join(projectRoot, '_bmad/bme/_vortex/agents');
|
|
120
|
+
const required = AGENT_FILES;
|
|
121
|
+
|
|
122
|
+
if (!fs.existsSync(agentsDir)) {
|
|
123
|
+
return {
|
|
124
|
+
name: 'Agent files',
|
|
125
|
+
passed: false,
|
|
126
|
+
error: 'agents/ directory not found',
|
|
127
|
+
fix: 'Run: npx convoke-install-vortex'
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const missing = required.filter(f => !fs.existsSync(path.join(agentsDir, f)));
|
|
132
|
+
|
|
133
|
+
if (missing.length > 0) {
|
|
134
|
+
return {
|
|
135
|
+
name: 'Agent files',
|
|
136
|
+
passed: false,
|
|
137
|
+
error: `Missing: ${missing.join(', ')}`,
|
|
138
|
+
fix: 'Run: npx convoke-install-vortex to reinstall'
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Check files are non-empty
|
|
143
|
+
const empty = required.filter(f => {
|
|
144
|
+
const stat = fs.statSync(path.join(agentsDir, f));
|
|
145
|
+
return stat.size === 0;
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
if (empty.length > 0) {
|
|
149
|
+
return {
|
|
150
|
+
name: 'Agent files',
|
|
151
|
+
passed: false,
|
|
152
|
+
error: `Empty agent files: ${empty.join(', ')}`,
|
|
153
|
+
fix: 'Run: npx convoke-install to restore agent files'
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return { name: 'Agent files', passed: true, info: `${required.length} agents present` };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function checkWorkflows(projectRoot) {
|
|
161
|
+
const workflowsDir = path.join(projectRoot, '_bmad/bme/_vortex/workflows');
|
|
162
|
+
const required = WORKFLOW_NAMES;
|
|
163
|
+
|
|
164
|
+
if (!fs.existsSync(workflowsDir)) {
|
|
165
|
+
return {
|
|
166
|
+
name: 'Workflow directories',
|
|
167
|
+
passed: false,
|
|
168
|
+
error: 'workflows/ directory not found',
|
|
169
|
+
fix: 'Run: npx convoke-install'
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const missing = required.filter(w =>
|
|
174
|
+
!fs.existsSync(path.join(workflowsDir, w, 'workflow.md'))
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
if (missing.length > 0) {
|
|
178
|
+
return {
|
|
179
|
+
name: 'Workflow directories',
|
|
180
|
+
passed: false,
|
|
181
|
+
error: `Missing: ${missing.join(', ')}`,
|
|
182
|
+
fix: 'Run: npx convoke-update to restore workflows'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return { name: 'Workflow directories', passed: true, info: `${required.length} workflows present` };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
async function checkOutputDir(projectRoot) {
|
|
190
|
+
const outputDir = path.join(projectRoot, '_bmad-output');
|
|
191
|
+
|
|
192
|
+
if (!fs.existsSync(outputDir)) {
|
|
193
|
+
return {
|
|
194
|
+
name: 'Output directory',
|
|
195
|
+
passed: true,
|
|
196
|
+
info: 'Not created yet (will be created on first use)'
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
try {
|
|
201
|
+
const testFile = path.join(outputDir, '.doctor-write-test');
|
|
202
|
+
await fs.writeFile(testFile, 'test', 'utf8');
|
|
203
|
+
await fs.remove(testFile);
|
|
204
|
+
return { name: 'Output directory', passed: true, info: 'Writable' };
|
|
205
|
+
} catch (_err) {
|
|
206
|
+
return {
|
|
207
|
+
name: 'Output directory',
|
|
208
|
+
passed: false,
|
|
209
|
+
error: '_bmad-output/ is not writable',
|
|
210
|
+
fix: 'Check directory permissions: chmod -R u+w _bmad-output/'
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function checkMigrationLock(projectRoot) {
|
|
216
|
+
const lockFile = path.join(projectRoot, '_bmad-output/.migration-lock');
|
|
217
|
+
|
|
218
|
+
if (!fs.existsSync(lockFile)) {
|
|
219
|
+
return { name: 'Migration lock', passed: true, info: 'No active lock' };
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
try {
|
|
223
|
+
const lock = fs.readJsonSync(lockFile);
|
|
224
|
+
const age = Date.now() - lock.timestamp;
|
|
225
|
+
const minutes = Math.round(age / 60000);
|
|
226
|
+
|
|
227
|
+
if (age > 5 * 60 * 1000) {
|
|
228
|
+
return {
|
|
229
|
+
name: 'Migration lock',
|
|
230
|
+
passed: false,
|
|
231
|
+
error: `Stale lock file (${minutes} minutes old, PID ${lock.pid})`,
|
|
232
|
+
fix: 'Remove the stale lock: rm _bmad-output/.migration-lock'
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return {
|
|
237
|
+
name: 'Migration lock',
|
|
238
|
+
passed: true,
|
|
239
|
+
info: `Active lock (${minutes}m old, PID ${lock.pid}) — migration may be running`
|
|
240
|
+
};
|
|
241
|
+
} catch (_err) {
|
|
242
|
+
return {
|
|
243
|
+
name: 'Migration lock',
|
|
244
|
+
passed: false,
|
|
245
|
+
error: 'Corrupt lock file',
|
|
246
|
+
fix: 'Remove the lock: rm _bmad-output/.migration-lock'
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function checkVersionConsistency(projectRoot) {
|
|
252
|
+
const configPath = path.join(projectRoot, '_bmad/bme/_vortex/config.yaml');
|
|
253
|
+
const packageVersion = getPackageVersion();
|
|
254
|
+
|
|
255
|
+
if (!fs.existsSync(configPath)) {
|
|
256
|
+
return { name: 'Version consistency', passed: true, info: 'No config to check' };
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
try {
|
|
260
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
261
|
+
const config = yaml.load(content);
|
|
262
|
+
const installedVersion = config.version || config.installed_version;
|
|
263
|
+
|
|
264
|
+
if (!installedVersion) {
|
|
265
|
+
return {
|
|
266
|
+
name: 'Version consistency',
|
|
267
|
+
passed: true,
|
|
268
|
+
info: `Package: ${packageVersion} (no installed version recorded in config)`
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (installedVersion === packageVersion) {
|
|
273
|
+
return {
|
|
274
|
+
name: 'Version consistency',
|
|
275
|
+
passed: true,
|
|
276
|
+
info: `${packageVersion} — package and config match`
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return {
|
|
281
|
+
name: 'Version consistency',
|
|
282
|
+
passed: false,
|
|
283
|
+
error: `Package: ${packageVersion}, Config: ${installedVersion}`,
|
|
284
|
+
fix: 'Run: npx convoke-update'
|
|
285
|
+
};
|
|
286
|
+
} catch (_err) {
|
|
287
|
+
return { name: 'Version consistency', passed: true, info: 'Could not read config version' };
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function printResults(checks) {
|
|
292
|
+
const passed = checks.filter(c => c.passed);
|
|
293
|
+
const failed = checks.filter(c => !c.passed);
|
|
294
|
+
|
|
295
|
+
checks.forEach(check => {
|
|
296
|
+
if (check.passed) {
|
|
297
|
+
console.log(chalk.green(` ✓ ${check.name}`));
|
|
298
|
+
if (check.info) {
|
|
299
|
+
console.log(chalk.gray(` ${check.info}`));
|
|
300
|
+
}
|
|
301
|
+
} else {
|
|
302
|
+
console.log(chalk.red(` ✗ ${check.name}`));
|
|
303
|
+
console.log(chalk.red(` ${check.error}`));
|
|
304
|
+
if (check.fix) {
|
|
305
|
+
console.log(chalk.yellow(` Fix: ${check.fix}`));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
console.log('');
|
|
311
|
+
if (failed.length === 0) {
|
|
312
|
+
console.log(chalk.green.bold(`All ${passed.length} checks passed. Installation looks healthy!`));
|
|
313
|
+
} else {
|
|
314
|
+
console.log(chalk.red.bold(`${failed.length} issue(s) found, ${passed.length} checks passed.`));
|
|
315
|
+
}
|
|
316
|
+
console.log('');
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
main().catch(err => {
|
|
320
|
+
console.error(chalk.red(`Doctor failed: ${err.message}`));
|
|
321
|
+
process.exit(1);
|
|
322
|
+
});
|