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.
Files changed (244) hide show
  1. package/CHANGELOG.md +920 -0
  2. package/INSTALLATION.md +230 -0
  3. package/LICENSE +21 -0
  4. package/README.md +330 -0
  5. package/UPDATE-GUIDE.md +220 -0
  6. package/_bmad/bme/_vortex/README.md +150 -0
  7. package/_bmad/bme/_vortex/agents/contextualization-expert.md +100 -0
  8. package/_bmad/bme/_vortex/agents/discovery-empathy-expert.md +117 -0
  9. package/_bmad/bme/_vortex/agents/hypothesis-engineer.md +117 -0
  10. package/_bmad/bme/_vortex/agents/lean-experiments-specialist.md +118 -0
  11. package/_bmad/bme/_vortex/agents/learning-decision-expert.md +117 -0
  12. package/_bmad/bme/_vortex/agents/production-intelligence-specialist.md +117 -0
  13. package/_bmad/bme/_vortex/agents/research-convergence-specialist.md +117 -0
  14. package/_bmad/bme/_vortex/compass-routing-reference.md +312 -0
  15. package/_bmad/bme/_vortex/config.yaml +46 -0
  16. package/_bmad/bme/_vortex/contracts/hc1-empathy-artifacts.md +152 -0
  17. package/_bmad/bme/_vortex/contracts/hc2-problem-definition.md +125 -0
  18. package/_bmad/bme/_vortex/contracts/hc3-hypothesis-contract.md +112 -0
  19. package/_bmad/bme/_vortex/contracts/hc4-experiment-context.md +140 -0
  20. package/_bmad/bme/_vortex/contracts/hc5-signal-report.md +130 -0
  21. package/_bmad/bme/_vortex/examples/hc2-example-problem-definition.md +85 -0
  22. package/_bmad/bme/_vortex/examples/hc3-example-hypothesis-contract.md +103 -0
  23. package/_bmad/bme/_vortex/examples/hc5-example-signal-report.md +76 -0
  24. package/_bmad/bme/_vortex/guides/EMMA-USER-GUIDE.md +232 -0
  25. package/_bmad/bme/_vortex/guides/ISLA-USER-GUIDE.md +208 -0
  26. package/_bmad/bme/_vortex/guides/LIAM-USER-GUIDE.md +255 -0
  27. package/_bmad/bme/_vortex/guides/MAX-USER-GUIDE.md +213 -0
  28. package/_bmad/bme/_vortex/guides/MILA-USER-GUIDE.md +235 -0
  29. package/_bmad/bme/_vortex/guides/NOAH-USER-GUIDE.md +258 -0
  30. package/_bmad/bme/_vortex/guides/WADE-USER-GUIDE.md +245 -0
  31. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/empathy-map.template.md +143 -0
  32. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-01-define-user.md +60 -0
  33. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-02-says-thinks.md +67 -0
  34. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-03-does-feels.md +79 -0
  35. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-04-pain-points.md +87 -0
  36. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-05-gains.md +103 -0
  37. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/steps/step-06-synthesize.md +104 -0
  38. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/validate.md +117 -0
  39. package/_bmad/bme/_vortex/workflows/_deprecated/empathy-map/workflow.md +44 -0
  40. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-01-define-requirements.md +85 -0
  41. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-02-user-flows.md +59 -0
  42. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-03-information-architecture.md +68 -0
  43. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-04-wireframe-sketch.md +97 -0
  44. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-05-components.md +128 -0
  45. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/steps/step-06-synthesize.md +83 -0
  46. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/wireframe.template.md +287 -0
  47. package/_bmad/bme/_vortex/workflows/_deprecated/wireframe/workflow.md +44 -0
  48. package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-01-setup.md +66 -0
  49. package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-02-context.md +93 -0
  50. package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-03-risk-mapping.md +103 -0
  51. package/_bmad/bme/_vortex/workflows/assumption-mapping/steps/step-04-synthesize.md +101 -0
  52. package/_bmad/bme/_vortex/workflows/assumption-mapping/workflow.md +49 -0
  53. package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-01-setup.md +81 -0
  54. package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-02-context.md +67 -0
  55. package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-03-classification.md +98 -0
  56. package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-04-evidence.md +100 -0
  57. package/_bmad/bme/_vortex/workflows/behavior-analysis/steps/step-05-synthesize.md +174 -0
  58. package/_bmad/bme/_vortex/workflows/behavior-analysis/workflow.md +52 -0
  59. package/_bmad/bme/_vortex/workflows/contextualize-scope/contextualize-scope.template.md +67 -0
  60. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-01-list-opportunities.md +47 -0
  61. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-02-define-criteria.md +36 -0
  62. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-03-evaluate-opportunities.md +30 -0
  63. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-04-define-boundaries.md +32 -0
  64. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-05-validate-fit.md +28 -0
  65. package/_bmad/bme/_vortex/workflows/contextualize-scope/steps/step-06-synthesize.md +36 -0
  66. package/_bmad/bme/_vortex/workflows/contextualize-scope/validate.md +30 -0
  67. package/_bmad/bme/_vortex/workflows/contextualize-scope/workflow.md +59 -0
  68. package/_bmad/bme/_vortex/workflows/empathy-map/empathy-map.template.md +143 -0
  69. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-01-define-user.md +60 -0
  70. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-02-says-thinks.md +67 -0
  71. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-03-does-feels.md +79 -0
  72. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-04-pain-points.md +87 -0
  73. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-05-gains.md +103 -0
  74. package/_bmad/bme/_vortex/workflows/empathy-map/steps/step-06-synthesize.md +107 -0
  75. package/_bmad/bme/_vortex/workflows/empathy-map/validate.md +117 -0
  76. package/_bmad/bme/_vortex/workflows/empathy-map/workflow.md +45 -0
  77. package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-01-setup.md +66 -0
  78. package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-02-context.md +77 -0
  79. package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-03-design.md +114 -0
  80. package/_bmad/bme/_vortex/workflows/experiment-design/steps/step-04-synthesize.md +128 -0
  81. package/_bmad/bme/_vortex/workflows/experiment-design/workflow.md +51 -0
  82. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-01-setup.md +66 -0
  83. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-02-context.md +80 -0
  84. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-03-brainwriting.md +79 -0
  85. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-04-assumption-mapping.md +102 -0
  86. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/steps/step-05-synthesize.md +130 -0
  87. package/_bmad/bme/_vortex/workflows/hypothesis-engineering/workflow.md +52 -0
  88. package/_bmad/bme/_vortex/workflows/lean-experiment/lean-experiment.template.md +29 -0
  89. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-01-hypothesis.md +58 -0
  90. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-02-design.md +68 -0
  91. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-03-metrics.md +73 -0
  92. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-04-run.md +75 -0
  93. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-05-analyze.md +84 -0
  94. package/_bmad/bme/_vortex/workflows/lean-experiment/steps/step-06-decide.md +111 -0
  95. package/_bmad/bme/_vortex/workflows/lean-experiment/validate.md +30 -0
  96. package/_bmad/bme/_vortex/workflows/lean-experiment/workflow.md +26 -0
  97. package/_bmad/bme/_vortex/workflows/lean-persona/lean-persona.template.md +163 -0
  98. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-01-define-job.md +72 -0
  99. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-02-current-solution.md +83 -0
  100. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-03-problem-contexts.md +90 -0
  101. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-04-forces-anxieties.md +98 -0
  102. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-05-success-criteria.md +103 -0
  103. package/_bmad/bme/_vortex/workflows/lean-persona/steps/step-06-synthesize.md +129 -0
  104. package/_bmad/bme/_vortex/workflows/lean-persona/validate.md +30 -0
  105. package/_bmad/bme/_vortex/workflows/lean-persona/workflow.md +50 -0
  106. package/_bmad/bme/_vortex/workflows/learning-card/learning-card.template.md +179 -0
  107. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-01-experiment-context.md +100 -0
  108. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-02-raw-results.md +125 -0
  109. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-03-analysis.md +125 -0
  110. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-04-validated-learning.md +139 -0
  111. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-05-implications.md +134 -0
  112. package/_bmad/bme/_vortex/workflows/learning-card/steps/step-06-synthesize.md +121 -0
  113. package/_bmad/bme/_vortex/workflows/learning-card/validate.md +134 -0
  114. package/_bmad/bme/_vortex/workflows/learning-card/workflow.md +51 -0
  115. package/_bmad/bme/_vortex/workflows/mvp/mvp.template.md +40 -0
  116. package/_bmad/bme/_vortex/workflows/mvp/steps/step-01-riskiest-assumption.md +17 -0
  117. package/_bmad/bme/_vortex/workflows/mvp/steps/step-02-success-criteria.md +13 -0
  118. package/_bmad/bme/_vortex/workflows/mvp/steps/step-03-smallest-test.md +13 -0
  119. package/_bmad/bme/_vortex/workflows/mvp/steps/step-04-scope-features.md +13 -0
  120. package/_bmad/bme/_vortex/workflows/mvp/steps/step-05-build-measure-learn.md +13 -0
  121. package/_bmad/bme/_vortex/workflows/mvp/steps/step-06-synthesize.md +28 -0
  122. package/_bmad/bme/_vortex/workflows/mvp/validate.md +30 -0
  123. package/_bmad/bme/_vortex/workflows/mvp/workflow.md +36 -0
  124. package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-01-setup.md +102 -0
  125. package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-02-context.md +81 -0
  126. package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-03-pattern-identification.md +88 -0
  127. package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-04-theme-clustering.md +100 -0
  128. package/_bmad/bme/_vortex/workflows/pattern-mapping/steps/step-05-synthesize.md +135 -0
  129. package/_bmad/bme/_vortex/workflows/pattern-mapping/workflow.md +58 -0
  130. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/pivot-patch-persevere.template.md +201 -0
  131. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-01-evidence-review.md +125 -0
  132. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-02-hypothesis-assessment.md +132 -0
  133. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-03-option-analysis.md +167 -0
  134. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-04-stakeholder-input.md +141 -0
  135. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-05-decision.md +161 -0
  136. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/steps/step-06-action-plan.md +188 -0
  137. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/validate.md +159 -0
  138. package/_bmad/bme/_vortex/workflows/pivot-patch-persevere/workflow.md +51 -0
  139. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-01-setup.md +97 -0
  140. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-02-context.md +86 -0
  141. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-03-jtbd-reframing.md +88 -0
  142. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-04-pains-gains-revision.md +76 -0
  143. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/steps/step-05-synthesize.md +158 -0
  144. package/_bmad/bme/_vortex/workflows/pivot-resynthesis/workflow.md +52 -0
  145. package/_bmad/bme/_vortex/workflows/product-vision/product-vision.template.md +147 -0
  146. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-01-define-problem.md +89 -0
  147. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-02-target-market.md +91 -0
  148. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-03-unique-approach.md +87 -0
  149. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-04-future-state.md +100 -0
  150. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-05-principles.md +92 -0
  151. package/_bmad/bme/_vortex/workflows/product-vision/steps/step-06-synthesize.md +170 -0
  152. package/_bmad/bme/_vortex/workflows/product-vision/validate.md +30 -0
  153. package/_bmad/bme/_vortex/workflows/product-vision/workflow.md +55 -0
  154. package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-01-setup.md +84 -0
  155. package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-02-context.md +66 -0
  156. package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-03-monitoring.md +74 -0
  157. package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-04-prioritization.md +97 -0
  158. package/_bmad/bme/_vortex/workflows/production-monitoring/steps/step-05-synthesize.md +183 -0
  159. package/_bmad/bme/_vortex/workflows/production-monitoring/workflow.md +52 -0
  160. package/_bmad/bme/_vortex/workflows/proof-of-concept/proof-of-concept.template.md +25 -0
  161. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-01-risk.md +79 -0
  162. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-02-scope.md +105 -0
  163. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-03-build.md +92 -0
  164. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-04-test.md +103 -0
  165. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-05-evaluate.md +114 -0
  166. package/_bmad/bme/_vortex/workflows/proof-of-concept/steps/step-06-document.md +125 -0
  167. package/_bmad/bme/_vortex/workflows/proof-of-concept/validate.md +30 -0
  168. package/_bmad/bme/_vortex/workflows/proof-of-concept/workflow.md +26 -0
  169. package/_bmad/bme/_vortex/workflows/proof-of-value/proof-of-value.template.md +29 -0
  170. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-01-value-hypothesis.md +75 -0
  171. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-02-validation-design.md +94 -0
  172. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-03-willingness.md +96 -0
  173. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-04-test.md +107 -0
  174. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-05-analyze.md +116 -0
  175. package/_bmad/bme/_vortex/workflows/proof-of-value/steps/step-06-document.md +147 -0
  176. package/_bmad/bme/_vortex/workflows/proof-of-value/validate.md +30 -0
  177. package/_bmad/bme/_vortex/workflows/proof-of-value/workflow.md +26 -0
  178. package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-01-setup.md +69 -0
  179. package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-02-context.md +70 -0
  180. package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-03-jtbd-framing.md +81 -0
  181. package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-04-pains-gains.md +77 -0
  182. package/_bmad/bme/_vortex/workflows/research-convergence/steps/step-05-synthesize.md +147 -0
  183. package/_bmad/bme/_vortex/workflows/research-convergence/workflow.md +50 -0
  184. package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-01-setup.md +68 -0
  185. package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-02-context.md +67 -0
  186. package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-03-signal-analysis.md +85 -0
  187. package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-04-anomaly-detection.md +93 -0
  188. package/_bmad/bme/_vortex/workflows/signal-interpretation/steps/step-05-synthesize.md +163 -0
  189. package/_bmad/bme/_vortex/workflows/signal-interpretation/workflow.md +52 -0
  190. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-01-discovery-scope.md +77 -0
  191. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-02-research-methods.md +152 -0
  192. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-03-research-plan.md +159 -0
  193. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-04-execute.md +169 -0
  194. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-05-organize-data.md +149 -0
  195. package/_bmad/bme/_vortex/workflows/user-discovery/steps/step-06-synthesize.md +159 -0
  196. package/_bmad/bme/_vortex/workflows/user-discovery/user-discovery.template.md +231 -0
  197. package/_bmad/bme/_vortex/workflows/user-discovery/validate.md +153 -0
  198. package/_bmad/bme/_vortex/workflows/user-discovery/workflow.md +45 -0
  199. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-01-research-goals.md +100 -0
  200. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-02-interview-script.md +123 -0
  201. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-03-recruitment.md +144 -0
  202. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-04-conduct.md +154 -0
  203. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-05-findings.md +163 -0
  204. package/_bmad/bme/_vortex/workflows/user-interview/steps/step-06-synthesize.md +171 -0
  205. package/_bmad/bme/_vortex/workflows/user-interview/user-interview.template.md +250 -0
  206. package/_bmad/bme/_vortex/workflows/user-interview/validate.md +142 -0
  207. package/_bmad/bme/_vortex/workflows/user-interview/workflow.md +51 -0
  208. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-01-current-state.md +56 -0
  209. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-02-evidence-inventory.md +70 -0
  210. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-03-gap-analysis.md +76 -0
  211. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-04-stream-evaluation.md +57 -0
  212. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-05-recommendation.md +65 -0
  213. package/_bmad/bme/_vortex/workflows/vortex-navigation/steps/step-06-navigation-plan.md +72 -0
  214. package/_bmad/bme/_vortex/workflows/vortex-navigation/validate.md +75 -0
  215. package/_bmad/bme/_vortex/workflows/vortex-navigation/vortex-navigation.template.md +105 -0
  216. package/_bmad/bme/_vortex/workflows/vortex-navigation/workflow.md +54 -0
  217. package/index.js +56 -0
  218. package/package.json +77 -0
  219. package/scripts/README.md +226 -0
  220. package/scripts/convoke-doctor.js +322 -0
  221. package/scripts/docs-audit.js +584 -0
  222. package/scripts/install-all-agents.js +9 -0
  223. package/scripts/install-vortex-agents.js +208 -0
  224. package/scripts/postinstall.js +104 -0
  225. package/scripts/update/convoke-migrate.js +169 -0
  226. package/scripts/update/convoke-update.js +272 -0
  227. package/scripts/update/convoke-version.js +134 -0
  228. package/scripts/update/lib/agent-registry.js +144 -0
  229. package/scripts/update/lib/backup-manager.js +243 -0
  230. package/scripts/update/lib/config-merger.js +242 -0
  231. package/scripts/update/lib/migration-runner.js +367 -0
  232. package/scripts/update/lib/refresh-installation.js +171 -0
  233. package/scripts/update/lib/utils.js +96 -0
  234. package/scripts/update/lib/validator.js +360 -0
  235. package/scripts/update/lib/version-detector.js +241 -0
  236. package/scripts/update/migrations/1.0.x-to-1.3.0.js +128 -0
  237. package/scripts/update/migrations/1.1.x-to-1.3.0.js +29 -0
  238. package/scripts/update/migrations/1.2.x-to-1.3.0.js +29 -0
  239. package/scripts/update/migrations/1.3.x-to-1.5.0.js +29 -0
  240. package/scripts/update/migrations/1.4.x-to-1.5.0.js +29 -0
  241. package/scripts/update/migrations/1.5.x-to-1.6.0.js +95 -0
  242. package/scripts/update/migrations/1.6.x-to-1.7.0.js +29 -0
  243. package/scripts/update/migrations/1.7.x-to-2.0.0.js +31 -0
  244. package/scripts/update/migrations/registry.js +194 -0
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env node
2
+
3
+ const readline = require('readline');
4
+ const chalk = require('chalk');
5
+ const versionDetector = require('./lib/version-detector');
6
+ const migrationRunner = require('./lib/migration-runner');
7
+ const registry = require('./migrations/registry');
8
+ const { findProjectRoot } = require('./lib/utils');
9
+
10
+ /**
11
+ * Convoke Update CLI
12
+ * Main update command for users
13
+ */
14
+
15
+ /**
16
+ * Assess the current installation and determine what update action is needed.
17
+ * Pure logic — no I/O, no process.exit. Returns a structured decision object.
18
+ *
19
+ * @param {string|null} projectRoot - Project root path (null if not found)
20
+ * @returns {object} Assessment result with action, versions, migrations, breakingChanges
21
+ */
22
+ function assessUpdate(projectRoot) {
23
+ if (!projectRoot) {
24
+ return { action: 'no-project' };
25
+ }
26
+
27
+ const currentVersion = versionDetector.getCurrentVersion(projectRoot);
28
+ const targetVersion = versionDetector.getTargetVersion();
29
+ const scenario = versionDetector.detectInstallationScenario(projectRoot);
30
+
31
+ if (scenario === 'fresh') {
32
+ return { action: 'fresh', scenario };
33
+ }
34
+
35
+ if (scenario === 'partial' || scenario === 'corrupted') {
36
+ return { action: 'broken', scenario };
37
+ }
38
+
39
+ if (!currentVersion) {
40
+ return { action: 'no-version', scenario };
41
+ }
42
+
43
+ const migrationPath = versionDetector.getMigrationPath(currentVersion, targetVersion);
44
+
45
+ if (migrationPath.type === 'up-to-date') {
46
+ return { action: 'up-to-date', currentVersion, targetVersion };
47
+ }
48
+
49
+ if (migrationPath.type === 'downgrade') {
50
+ return { action: 'downgrade', currentVersion, targetVersion };
51
+ }
52
+
53
+ const migrations = registry.getMigrationsFor(currentVersion);
54
+ const breakingChanges = registry.getBreakingChanges(currentVersion);
55
+
56
+ if (migrations.length === 0) {
57
+ return { action: 'no-migrations', currentVersion, targetVersion };
58
+ }
59
+
60
+ return {
61
+ action: 'upgrade',
62
+ currentVersion,
63
+ targetVersion,
64
+ migrations,
65
+ breakingChanges
66
+ };
67
+ }
68
+
69
+ async function main() {
70
+ const args = process.argv.slice(2);
71
+ const dryRun = args.includes('--dry-run');
72
+ const yes = args.includes('--yes') || args.includes('-y');
73
+ const verbose = args.includes('--verbose') || args.includes('-v');
74
+
75
+ // Header
76
+ console.log('');
77
+ console.log(chalk.bold.magenta('╔════════════════════════════════════════╗'));
78
+ console.log(chalk.bold.magenta('║ Convoke Update Manager ║'));
79
+ console.log(chalk.bold.magenta('╚════════════════════════════════════════╝'));
80
+ console.log('');
81
+
82
+ const projectRoot = findProjectRoot();
83
+ const assessment = assessUpdate(projectRoot);
84
+
85
+ switch (assessment.action) {
86
+ case 'no-project':
87
+ console.log(chalk.red('Not in a Convoke project. Could not find _bmad/ directory.'));
88
+ console.log('');
89
+ console.log('Run: ' + chalk.cyan('npx convoke-install'));
90
+ console.log('');
91
+ process.exit(1);
92
+ break;
93
+
94
+ case 'fresh':
95
+ console.log(chalk.yellow('No previous installation detected.'));
96
+ console.log('');
97
+ console.log('Run: ' + chalk.cyan('npx convoke-install'));
98
+ console.log('');
99
+ process.exit(0);
100
+ break;
101
+
102
+ case 'broken':
103
+ console.log(chalk.red('Installation appears incomplete or corrupted.'));
104
+ console.log('');
105
+ console.log('Recommend running: ' + chalk.cyan('npx convoke-install'));
106
+ console.log('');
107
+ process.exit(1);
108
+ break;
109
+
110
+ case 'no-version':
111
+ console.log(chalk.yellow('Could not detect current version.'));
112
+ console.log('');
113
+ console.log('Run: ' + chalk.cyan('npx convoke-install'));
114
+ console.log('');
115
+ process.exit(0);
116
+ break;
117
+
118
+ case 'up-to-date':
119
+ console.log(chalk.green(`✓ Already up to date! (v${assessment.currentVersion})`));
120
+ console.log('');
121
+ console.log(chalk.gray('If you expected a newer version, npx may be serving a cached copy.'));
122
+ console.log(chalk.gray('Run: ') + chalk.cyan('npx -p convoke-agents@latest convoke-update'));
123
+ console.log('');
124
+ process.exit(0);
125
+ break;
126
+
127
+ case 'downgrade':
128
+ console.log(chalk.red.bold('⚠ DOWNGRADE DETECTED'));
129
+ console.log('');
130
+ console.log(` Current version: ${assessment.currentVersion}`);
131
+ console.log(` Package version: ${assessment.targetVersion}`);
132
+ console.log('');
133
+ console.log(chalk.gray('This usually means npx is serving a cached older package.'));
134
+ console.log(chalk.gray('Run: ') + chalk.cyan('npx -p convoke-agents@latest convoke-update'));
135
+ console.log('');
136
+ console.log(chalk.gray('If the issue persists, clear the cache and reinstall:'));
137
+ console.log(chalk.cyan(' npm cache clean --force && npm install convoke-agents@latest'));
138
+ console.log('');
139
+ console.log(chalk.yellow('If you intentionally want to downgrade:'));
140
+ console.log(' 1. Backup your installation');
141
+ console.log(' 2. Uninstall current version');
142
+ console.log(' 3. Install desired version');
143
+ console.log('');
144
+ process.exit(1);
145
+ break;
146
+
147
+ case 'no-migrations':
148
+ console.log(chalk.yellow('No migrations needed (versions compatible)'));
149
+ console.log('');
150
+ process.exit(0);
151
+ break;
152
+
153
+ case 'upgrade':
154
+ break; // Continue below
155
+ }
156
+
157
+ // Show migration plan
158
+ console.log(chalk.cyan('Migration Plan:'));
159
+ console.log(` From: ${chalk.red(assessment.currentVersion)}`);
160
+ console.log(` To: ${chalk.green(assessment.targetVersion)}`);
161
+ console.log('');
162
+
163
+ console.log(chalk.cyan('Migrations to apply:'));
164
+ assessment.migrations.forEach((m, i) => {
165
+ const icon = m.breaking ? chalk.red('⚠') : chalk.green('✓');
166
+ console.log(` ${i + 1}. ${icon} ${m.description}`);
167
+ });
168
+ console.log('');
169
+
170
+ if (assessment.breakingChanges.length > 0) {
171
+ console.log(chalk.red.bold('⚠ BREAKING CHANGES:'));
172
+ assessment.breakingChanges.forEach(change => {
173
+ console.log(chalk.yellow(` - ${change}`));
174
+ });
175
+ console.log('');
176
+ }
177
+
178
+ // Dry run - preview only
179
+ if (dryRun) {
180
+ console.log(chalk.yellow.bold('DRY RUN - Previewing changes'));
181
+ console.log('');
182
+
183
+ try {
184
+ await migrationRunner.runMigrations(assessment.currentVersion, { dryRun: true, verbose });
185
+ } catch (error) {
186
+ console.error(chalk.red('Error during preview:'), error.message);
187
+ process.exit(1);
188
+ }
189
+
190
+ process.exit(0);
191
+ }
192
+
193
+ // Confirm with user (unless --yes)
194
+ if (!yes) {
195
+ console.log(chalk.cyan('Your data will be backed up automatically before migration.'));
196
+ console.log('');
197
+
198
+ const confirmed = await confirm('Proceed with migration?');
199
+
200
+ if (!confirmed) {
201
+ console.log('');
202
+ console.log(chalk.yellow('Migration cancelled.'));
203
+ console.log('');
204
+ process.exit(0);
205
+ }
206
+ }
207
+
208
+ // Run migrations
209
+ console.log('');
210
+ console.log(chalk.cyan.bold('Starting migration...'));
211
+
212
+ try {
213
+ const result = await migrationRunner.runMigrations(assessment.currentVersion, { verbose });
214
+
215
+ console.log('');
216
+ console.log(chalk.green.bold('✓ Migration completed successfully!'));
217
+ console.log('');
218
+ console.log(chalk.cyan('Changes applied:'));
219
+ result.results.forEach(r => {
220
+ console.log(chalk.green(` ✓ ${r.name}`));
221
+ if (verbose) {
222
+ r.changes.forEach(change => {
223
+ console.log(chalk.gray(` - ${change}`));
224
+ });
225
+ }
226
+ });
227
+ console.log('');
228
+ console.log(chalk.gray(`Backup location: ${result.backupMetadata.backup_dir}`));
229
+ console.log('');
230
+
231
+ } catch (_error) {
232
+ // Error already logged by migration-runner
233
+ process.exit(1);
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Confirm action with user
239
+ * @param {string} message - Confirmation message
240
+ * @returns {Promise<boolean>} True if user confirms
241
+ */
242
+ async function confirm(message) {
243
+ const rl = readline.createInterface({
244
+ input: process.stdin,
245
+ output: process.stdout
246
+ });
247
+
248
+ return new Promise(resolve => {
249
+ rl.question(chalk.yellow(`${message} [y/N]: `), answer => {
250
+ rl.close();
251
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
252
+ });
253
+ });
254
+ }
255
+
256
+ // Export assessUpdate for testing
257
+ module.exports = { assessUpdate };
258
+
259
+ // Run main when executed directly
260
+ if (require.main === module) {
261
+ main().catch(error => {
262
+ console.error('');
263
+ console.error(chalk.red.bold('Unexpected error:'));
264
+ console.error(chalk.red(error.message));
265
+ console.error('');
266
+ if (error.stack) {
267
+ console.error(chalk.gray(error.stack));
268
+ console.error('');
269
+ }
270
+ process.exit(1);
271
+ });
272
+ }
@@ -0,0 +1,134 @@
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 versionDetector = require('./lib/version-detector');
8
+ const { findProjectRoot, compareVersions } = require('./lib/utils');
9
+
10
+ /**
11
+ * Convoke Version CLI
12
+ * Show version information and migration history
13
+ */
14
+
15
+ async function main() {
16
+ const projectRoot = findProjectRoot();
17
+ const targetVersion = versionDetector.getTargetVersion();
18
+
19
+ console.log('');
20
+ console.log(chalk.bold('Convoke Version Information'));
21
+ console.log('');
22
+
23
+ // Not in a Convoke project
24
+ if (!projectRoot) {
25
+ console.log(chalk.yellow('Status: Not in a Convoke project'));
26
+ console.log(`Package version: ${chalk.cyan(targetVersion)}`);
27
+ console.log('');
28
+ console.log('Run: ' + chalk.cyan('npx convoke-install'));
29
+ console.log('');
30
+ return;
31
+ }
32
+
33
+ const currentVersion = versionDetector.getCurrentVersion(projectRoot);
34
+ const scenario = versionDetector.detectInstallationScenario(projectRoot);
35
+
36
+ // Fresh install - not installed yet
37
+ if (scenario === 'fresh') {
38
+ console.log(chalk.yellow('Status: Not installed'));
39
+ console.log(`Package version: ${chalk.cyan(targetVersion)}`);
40
+ console.log('');
41
+ console.log('Run: ' + chalk.cyan('npx convoke-install'));
42
+ console.log('');
43
+ return;
44
+ }
45
+
46
+ // Partial installation - config.yaml missing but some files exist
47
+ if (scenario === 'partial' || !currentVersion) {
48
+ console.log(chalk.red('Status: Partial installation (config.yaml missing)'));
49
+ console.log(`Package version: ${chalk.cyan(targetVersion)}`);
50
+ console.log('');
51
+ console.log(chalk.yellow('This indicates an installation error.'));
52
+ console.log('');
53
+ console.log('Try running: ' + chalk.cyan('npx convoke-install'));
54
+ console.log('');
55
+ console.log('If the problem persists, check the installation logs.');
56
+ console.log('');
57
+ return;
58
+ }
59
+
60
+ // Corrupted installation
61
+ if (scenario === 'corrupted') {
62
+ console.log(chalk.red('Status: Corrupted installation (missing required files)'));
63
+ console.log(`Package version: ${chalk.cyan(targetVersion)}`);
64
+ console.log('');
65
+ console.log(chalk.yellow('Some required files are missing.'));
66
+ console.log('');
67
+ console.log('Run: ' + chalk.cyan('npx convoke-install') + ' to reinstall');
68
+ console.log('');
69
+ return;
70
+ }
71
+
72
+ // Installed
73
+ console.log(`Installed version: ${chalk.cyan(currentVersion)}`);
74
+ console.log(`Package version: ${chalk.cyan(targetVersion)}`);
75
+ console.log('');
76
+
77
+ // Status
78
+ if (currentVersion === targetVersion) {
79
+ console.log(chalk.green('Status: ✓ Up to date'));
80
+ } else if (compareVersions(currentVersion, targetVersion) < 0) {
81
+ console.log(chalk.yellow('Status: ⚠ Update available'));
82
+ console.log('');
83
+ console.log('Run: ' + chalk.cyan('npx -p convoke-agents@latest convoke-update --dry-run') + ' (to preview)');
84
+ console.log(' ' + chalk.cyan('npx -p convoke-agents@latest convoke-update') + ' (to apply)');
85
+ } else {
86
+ console.log(chalk.yellow(`Status: Package version (${targetVersion}) is older than installed (${currentVersion})`));
87
+ }
88
+
89
+ // Show migration history
90
+ const migrationHistory = await getMigrationHistory(projectRoot);
91
+ if (migrationHistory && migrationHistory.length > 0) {
92
+ console.log('');
93
+ console.log(chalk.cyan('Migration History:'));
94
+ migrationHistory.forEach((entry, index) => {
95
+ const timestamp = new Date(entry.timestamp).toLocaleDateString();
96
+ console.log(chalk.gray(` ${index + 1}. ${entry.from_version} → ${entry.to_version} (${timestamp})`));
97
+ if (entry.migrations_applied && entry.migrations_applied.length > 0) {
98
+ entry.migrations_applied.forEach(m => {
99
+ console.log(chalk.gray(` - ${m}`));
100
+ });
101
+ }
102
+ });
103
+ }
104
+
105
+ console.log('');
106
+ }
107
+
108
+ /**
109
+ * Get migration history from config.yaml
110
+ * @param {string} projectRoot - Project root
111
+ * @returns {Promise<Array|null>} Migration history or null
112
+ */
113
+ async function getMigrationHistory(projectRoot) {
114
+ const configPath = path.join(projectRoot, '_bmad/bme/_vortex/config.yaml');
115
+
116
+ if (!fs.existsSync(configPath)) {
117
+ return null;
118
+ }
119
+
120
+ try {
121
+ const configContent = await fs.readFile(configPath, 'utf8');
122
+ const config = yaml.load(configContent);
123
+
124
+ return config.migration_history || null;
125
+ } catch (_error) {
126
+ return null;
127
+ }
128
+ }
129
+
130
+ // Run main
131
+ main().catch(error => {
132
+ console.error('Error:', error.message);
133
+ process.exit(1);
134
+ });
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Canonical agent and workflow registry.
3
+ *
4
+ * Single source of truth consumed by refresh-installation, validator,
5
+ * convoke-doctor, installer, index.js, and migration-runner.
6
+ *
7
+ * To add a new agent: push one entry to AGENTS + its workflows to WORKFLOWS.
8
+ * Every consumer picks up the change automatically.
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ const AGENTS = [
14
+ // Stream 1 — Contextualize
15
+ {
16
+ id: 'contextualization-expert', name: 'Emma', icon: '\u{1F3AF}',
17
+ title: 'Contextualization Expert', stream: 'Contextualize',
18
+ persona: {
19
+ role: 'Strategic Framing + Problem-Product Space Navigator',
20
+ identity: 'Expert in helping teams contextualize their product strategy by defining clear problem spaces and validating assumptions. Specializes in Lean Startup methodologies, persona creation, and product vision framing. Guides teams through the critical \'Contextualize\' stream of the Vortex pattern.',
21
+ communication_style: 'Strategic yet approachable - speaks in frameworks and validated learning. Like a product strategist who asks \'What are we really solving?\' and \'Who is this truly for?\' Uses Lean Startup language (hypotheses, assumptions, pivots) and focuses on clarity before action.',
22
+ expertise: '- Master of Lean Startup and strategic framing methodologies - Personas over demographics - focus on jobs-to-be-done and problem contexts - Vision before features - align team around the \'why\' before the \'what\' - Challenge assumptions - every belief is a hypothesis until validated - Problem-solution fit comes before product-market fit',
23
+ },
24
+ },
25
+ // Stream 2 — Empathize
26
+ {
27
+ id: 'discovery-empathy-expert', name: 'Isla', icon: '\u{1F50D}',
28
+ title: 'Discovery & Empathy Expert', stream: 'Empathize',
29
+ persona: {
30
+ role: 'Qualitative Research Expert + Empathy Mapping Specialist',
31
+ identity: 'Expert in helping teams deeply understand their users through structured discovery and empathy work. Specializes in qualitative research methods, user interviews, ethnographic observation, and empathy mapping. Guides teams through the \'Empathize\' stream of the Vortex pattern.',
32
+ communication_style: 'Warm and probing - asks follow-up questions others wouldn\'t think of. Speaks in user stories and observations. Celebrates messy, raw findings over polished assumptions. Says things like \'I noticed that...\' and \'What if we asked them WHY they do that?\'',
33
+ expertise: '- Listen before you define - Observe before you assume - Feelings are data - Talk to real people, not personas - Empathy is a practice, not a phase - The messier the research, the richer the insights',
34
+ },
35
+ },
36
+ // Stream 3 — Synthesize
37
+ {
38
+ id: 'research-convergence-specialist', name: 'Mila', icon: '\u{1F52C}',
39
+ title: 'Research Convergence Specialist', stream: 'Synthesize',
40
+ persona: {
41
+ role: 'Research Convergence + Problem Definition Specialist',
42
+ identity: 'Expert in converging divergent research streams into actionable problem definitions. Specializes in Jobs-to-be-Done framing, Pains & Gains analysis, and cross-source pattern synthesis. Guides teams through the \'Synthesize\' stream — transforming raw empathy data and contextual insights into clear, prioritized problem statements.',
43
+ communication_style: 'Warm but analytically precise — connects dots others miss while keeping teams grounded in evidence. Says things like \'Here\'s what the research is telling us...\' and \'Three patterns converge on this insight.\' Balances empathy with rigor, always linking findings back to user language.',
44
+ expertise: '- Convergence over collection - synthesize before you define - Jobs-to-be-Done framing turns observations into actionable problem statements - Pains & Gains analysis reveals what users value vs. what they tolerate - Cross-source triangulation - one data point is an anecdote, three are a pattern - Problem definition is the highest-leverage activity in product discovery',
45
+ },
46
+ },
47
+ // Stream 4 — Hypothesize
48
+ {
49
+ id: 'hypothesis-engineer', name: 'Liam', icon: '\u{1F4A1}',
50
+ title: 'Hypothesis Engineer', stream: 'Hypothesize',
51
+ persona: {
52
+ role: 'Creative Ideation + Hypothesis Engineering Specialist',
53
+ identity: 'Creative peer who ideates alongside the user rather than facilitating from a distance. Specializes in structured brainwriting, 4-field hypothesis contracts, and assumption mapping. Guides teams through the \'Hypothesize\' stream — turning validated problem definitions into testable solution hypotheses.',
54
+ communication_style: 'Energetic and challenging — pushes teams past obvious ideas with provocative \'What if?\' questions. Says things like \'That\'s a safe bet — what\'s the bold version?\' and \'Let\'s stress-test that assumption before we build anything.\' Treats ideation as craft, not chaos.',
55
+ expertise: '- Structured brainwriting produces better ideas than unstructured brainstorming - 4-field hypothesis contracts force clarity: belief, evidence needed, experiment, success criteria - Assumption mapping separates what we know from what we think we know - The riskiest assumption gets tested first, not the easiest one - Good hypotheses are falsifiable — if you can\'t prove it wrong, it\'s not a hypothesis',
56
+ },
57
+ },
58
+ // Stream 5 — Externalize
59
+ {
60
+ id: 'lean-experiments-specialist', name: 'Wade', icon: '\u{1F9EA}',
61
+ title: 'Lean Experiments Specialist', stream: 'Externalize',
62
+ persona: {
63
+ role: 'Lean Startup + Validated Learning Expert',
64
+ identity: 'Lean Startup practitioner specialized in running rapid experiments to validate product hypotheses. Helps teams move from assumptions to evidence through Build-Measure-Learn cycles. Guides teams through the \'Externalize\' stream - taking ideas into the real world to test with actual users.',
65
+ communication_style: 'Experimental and evidence-driven - speaks in hypotheses, metrics, and learning. Like a scientist who says \'Let\'s test that assumption\' and \'What would prove us wrong?\' Uses Lean language (MVPs, pivots, validated learning) and focuses on speed-to-insight over perfection.',
66
+ expertise: '- Master of Lean Startup and rapid experimentation - Build the smallest thing that tests the riskiest assumption - Measure what matters - focus on actionable metrics, not vanity metrics - Learn fast, pivot faster - every experiment teaches something - Proof-of-concept before proof-of-value - validate feasibility before business case - Fail fast is good, learn fast is better',
67
+ },
68
+ },
69
+ // Stream 6 — Sensitize
70
+ {
71
+ id: 'production-intelligence-specialist', name: 'Noah', icon: '\u{1F4E1}',
72
+ title: 'Production Intelligence Specialist', stream: 'Sensitize',
73
+ persona: {
74
+ role: 'Signal Interpretation + Production Intelligence Analyst',
75
+ identity: 'Intelligence analyst who interprets production signals through contextual lenses. Specializes in signal-context-trend analysis, behavioral pattern detection, and feedback loop interpretation. Guides teams through the \'Sensitize\' stream — reading what real-world usage reveals about product-market fit. Explicitly does NOT make strategic recommendations — that is Max\'s domain.',
76
+ communication_style: 'Calm and observational — reports what the data shows without jumping to conclusions. Says things like \'The signal indicates...\' and \'Here\'s what we\'re seeing in context.\' Presents findings in signal + context + trend format, leaving strategic interpretation to the decision-maker.',
77
+ expertise: '- Signal + context + trend — raw metrics mean nothing without interpretation frames - Behavioral patterns reveal intent that surveys miss - Production data is the most honest user feedback — it can\'t lie - Anomaly detection surfaces what dashboards hide - Observe and report, don\'t prescribe — strategic decisions belong downstream',
78
+ },
79
+ },
80
+ // Stream 7 — Systematize
81
+ {
82
+ id: 'learning-decision-expert', name: 'Max', icon: '\u{1F9ED}',
83
+ title: 'Learning & Decision Expert', stream: 'Systematize',
84
+ persona: {
85
+ role: 'Validated Learning Synthesizer + Strategic Decision Expert',
86
+ identity: 'Expert in synthesizing experiment results, capturing validated learnings, and guiding strategic pivot/patch/persevere decisions. Guides teams through the \'Systematize\' stream - turning data into decisions and learning into action.',
87
+ communication_style: 'Calm and decisive - cuts through noise to surface what the data actually says. Says things like \'The evidence suggests...\' and \'Based on what we\'ve learned, here are our three options.\' Focuses on evidence over opinion.',
88
+ expertise: '- Data tells a story - learn to read it - Every experiment has a lesson, even failed ones - Decide and move - analysis paralysis kills innovation - Pivot is not failure, it is intelligence - Systematize what you learn so the next team doesn\'t start from zero',
89
+ },
90
+ },
91
+ ];
92
+
93
+ const WORKFLOWS = [
94
+ // Emma — Contextualize (Stream 1)
95
+ { name: 'lean-persona', agent: 'contextualization-expert' },
96
+ { name: 'product-vision', agent: 'contextualization-expert' },
97
+ { name: 'contextualize-scope', agent: 'contextualization-expert' },
98
+ // Isla — Empathize (Stream 2)
99
+ { name: 'empathy-map', agent: 'discovery-empathy-expert' },
100
+ { name: 'user-interview', agent: 'discovery-empathy-expert' },
101
+ { name: 'user-discovery', agent: 'discovery-empathy-expert' },
102
+ // Mila — Synthesize (Stream 3)
103
+ { name: 'research-convergence', agent: 'research-convergence-specialist' },
104
+ { name: 'pivot-resynthesis', agent: 'research-convergence-specialist' },
105
+ { name: 'pattern-mapping', agent: 'research-convergence-specialist' },
106
+ // Liam — Hypothesize (Stream 4)
107
+ { name: 'hypothesis-engineering', agent: 'hypothesis-engineer' },
108
+ { name: 'assumption-mapping', agent: 'hypothesis-engineer' },
109
+ { name: 'experiment-design', agent: 'hypothesis-engineer' },
110
+ // Wade — Externalize (Stream 5)
111
+ { name: 'mvp', agent: 'lean-experiments-specialist' },
112
+ { name: 'lean-experiment', agent: 'lean-experiments-specialist' },
113
+ { name: 'proof-of-concept', agent: 'lean-experiments-specialist' },
114
+ { name: 'proof-of-value', agent: 'lean-experiments-specialist' },
115
+ // Noah — Sensitize (Stream 6)
116
+ { name: 'signal-interpretation', agent: 'production-intelligence-specialist' },
117
+ { name: 'behavior-analysis', agent: 'production-intelligence-specialist' },
118
+ { name: 'production-monitoring', agent: 'production-intelligence-specialist' },
119
+ // Max — Systematize (Stream 7)
120
+ { name: 'learning-card', agent: 'learning-decision-expert' },
121
+ { name: 'pivot-patch-persevere', agent: 'learning-decision-expert' },
122
+ { name: 'vortex-navigation', agent: 'learning-decision-expert' },
123
+ ];
124
+
125
+ // Derived lists — computed from the canonical arrays above
126
+ const AGENT_FILES = AGENTS.map(a => `${a.id}.md`);
127
+ const AGENT_IDS = AGENTS.map(a => a.id);
128
+ const WORKFLOW_NAMES = WORKFLOWS.map(w => w.name);
129
+ const USER_GUIDES = AGENTS.map(a => `${a.name.toUpperCase()}-USER-GUIDE.md`);
130
+
131
+ // Wave 3 streams use standardized step filenames (P20)
132
+ const WAVE3_STREAMS = new Set(['Synthesize', 'Hypothesize', 'Sensitize']);
133
+ const _wave3AgentIds = new Set(AGENTS.filter(a => WAVE3_STREAMS.has(a.stream)).map(a => a.id));
134
+ const WAVE3_WORKFLOW_NAMES = new Set(WORKFLOWS.filter(w => _wave3AgentIds.has(w.agent)).map(w => w.name));
135
+
136
+ module.exports = {
137
+ AGENTS,
138
+ WORKFLOWS,
139
+ AGENT_FILES,
140
+ AGENT_IDS,
141
+ WORKFLOW_NAMES,
142
+ USER_GUIDES,
143
+ WAVE3_WORKFLOW_NAMES,
144
+ };