bmalph 1.0.0 → 2.2.1

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 (455) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +398 -217
  3. package/bmad/bmm/agents/analyst.agent.yaml +43 -36
  4. package/bmad/bmm/agents/architect.agent.yaml +29 -28
  5. package/bmad/bmm/agents/dev.agent.yaml +38 -38
  6. package/bmad/bmm/agents/pm.agent.yaml +44 -46
  7. package/bmad/bmm/agents/qa.agent.yaml +58 -0
  8. package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -32
  9. package/bmad/bmm/agents/sm.agent.yaml +37 -36
  10. package/bmad/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +223 -223
  11. package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -45
  12. package/bmad/bmm/agents/ux-designer.agent.yaml +27 -26
  13. package/bmad/bmm/data/project-context-template.md +26 -26
  14. package/bmad/bmm/module-help.csv +31 -31
  15. package/bmad/bmm/module.yaml +50 -44
  16. package/bmad/bmm/teams/default-party.csv +20 -21
  17. package/bmad/bmm/teams/team-fullstack.yaml +12 -12
  18. package/bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -10
  19. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -177
  20. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -161
  21. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -199
  22. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -202
  23. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -205
  24. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -219
  25. package/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -162
  26. package/bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -58
  27. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -137
  28. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -229
  29. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -238
  30. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -206
  31. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -234
  32. package/bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -443
  33. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -182
  34. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -237
  35. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -249
  36. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -259
  37. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -177
  38. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -475
  39. package/bmad/bmm/workflows/1-analysis/research/research.template.md +29 -29
  40. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -137
  41. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -239
  42. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -248
  43. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -202
  44. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -239
  45. package/bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -486
  46. package/bmad/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  47. package/bmad/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  48. package/bmad/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  49. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/data/domain-complexity.csv +14 -12
  50. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/data/prd-purpose.md +197 -197
  51. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/data/project-types.csv +10 -10
  52. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-01-init.md +191 -191
  53. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-01b-continue.md +153 -153
  54. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-02-discovery.md +224 -224
  55. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
  56. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
  57. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-03-success.md +226 -226
  58. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-04-journeys.md +213 -213
  59. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-05-domain.md +207 -207
  60. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-06-innovation.md +226 -226
  61. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-07-project-type.md +237 -237
  62. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-08-scoping.md +228 -228
  63. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-09-functional.md +231 -231
  64. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-10-nonfunctional.md +242 -242
  65. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-11-polish.md +217 -217
  66. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-c/step-12-complete.md +124 -124
  67. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-e/step-e-01-discovery.md +247 -247
  68. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-e/step-e-01b-legacy-conversion.md +208 -208
  69. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-e/step-e-02-review.md +249 -249
  70. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-e/step-e-03-edit.md +253 -253
  71. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-e/step-e-04-complete.md +168 -168
  72. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-01-discovery.md +226 -218
  73. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-02-format-detection.md +191 -191
  74. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-02b-parity-check.md +209 -209
  75. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-03-density-validation.md +174 -174
  76. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-04-brief-coverage-validation.md +214 -214
  77. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-05-measurability-validation.md +228 -228
  78. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-06-traceability-validation.md +217 -217
  79. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-07-implementation-leakage-validation.md +205 -205
  80. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-08-domain-compliance-validation.md +243 -243
  81. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-09-project-type-validation.md +263 -263
  82. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-10-smart-validation.md +209 -209
  83. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-11-holistic-quality-validation.md +264 -264
  84. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-12-completeness-validation.md +242 -242
  85. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/steps-v/step-v-13-report-complete.md +231 -231
  86. package/bmad/bmm/workflows/2-plan-workflows/{prd → create-prd}/templates/prd-template.md +10 -10
  87. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
  88. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  89. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  90. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -135
  91. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -127
  92. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -190
  93. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -216
  94. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -219
  95. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -234
  96. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -252
  97. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -254
  98. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -224
  99. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -224
  100. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -241
  101. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -248
  102. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -237
  103. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -264
  104. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -171
  105. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -13
  106. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -43
  107. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -190
  108. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -178
  109. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -179
  110. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -139
  111. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -252
  112. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -135
  113. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -4
  114. package/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -55
  115. package/bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -12
  116. package/bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +12 -10
  117. package/bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +6 -6
  118. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -153
  119. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -164
  120. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -224
  121. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -331
  122. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -318
  123. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -359
  124. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -379
  125. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -359
  126. package/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -76
  127. package/bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -50
  128. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -259
  129. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -233
  130. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -272
  131. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -149
  132. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -57
  133. package/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -59
  134. package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -23
  135. package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +226 -226
  136. package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +44 -51
  137. package/bmad/bmm/workflows/4-implementation/correct-course/checklist.md +288 -288
  138. package/bmad/bmm/workflows/4-implementation/correct-course/instructions.md +207 -206
  139. package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +54 -60
  140. package/bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -358
  141. package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +346 -345
  142. package/bmad/bmm/workflows/4-implementation/create-story/template.md +49 -49
  143. package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +53 -61
  144. package/bmad/bmm/workflows/4-implementation/dev-story/checklist.md +80 -80
  145. package/bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -410
  146. package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +21 -27
  147. package/bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -1443
  148. package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +53 -58
  149. package/bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -33
  150. package/bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -225
  151. package/bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -55
  152. package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -54
  153. package/bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -229
  154. package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -36
  155. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -156
  156. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -120
  157. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -113
  158. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -113
  159. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -106
  160. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -140
  161. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -50
  162. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +191 -189
  163. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -144
  164. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +127 -128
  165. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -191
  166. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -74
  167. package/bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -79
  168. package/bmad/bmm/workflows/document-project/checklist.md +245 -245
  169. package/bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -12
  170. package/bmad/bmm/workflows/document-project/instructions.md +130 -221
  171. package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -345
  172. package/bmad/bmm/workflows/document-project/templates/index-template.md +169 -169
  173. package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -103
  174. package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -160
  175. package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -135
  176. package/bmad/bmm/workflows/document-project/workflow.yaml +22 -30
  177. package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -298
  178. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -31
  179. package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -1106
  180. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -31
  181. package/bmad/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  182. package/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  183. package/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  184. package/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  185. package/bmad/bmm/workflows/generate-project-context/workflow.md +49 -0
  186. package/bmad/bmm/workflows/qa/automate/checklist.md +33 -0
  187. package/bmad/bmm/workflows/qa/automate/instructions.md +110 -0
  188. package/bmad/bmm/workflows/qa/automate/workflow.yaml +44 -0
  189. package/bmad/core/agents/bmad-master.agent.yaml +30 -30
  190. package/bmad/core/module-help.csv +9 -11
  191. package/bmad/core/module.yaml +25 -25
  192. package/bmad/core/tasks/editorial-review-prose.xml +102 -91
  193. package/bmad/core/tasks/editorial-review-structure.xml +209 -198
  194. package/bmad/core/tasks/help.md +85 -0
  195. package/bmad/core/tasks/index-docs.xml +64 -64
  196. package/bmad/core/tasks/review-adversarial-general.xml +48 -48
  197. package/bmad/core/tasks/shard-doc.xml +107 -108
  198. package/bmad/core/tasks/workflow.xml +234 -234
  199. package/bmad/core/workflows/advanced-elicitation/methods.csv +51 -51
  200. package/bmad/core/workflows/advanced-elicitation/workflow.xml +116 -116
  201. package/bmad/core/workflows/brainstorming/brain-methods.csv +61 -61
  202. package/bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -197
  203. package/bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
  204. package/bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
  205. package/bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
  206. package/bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
  207. package/bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
  208. package/bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -399
  209. package/bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
  210. package/bmad/core/workflows/brainstorming/template.md +15 -15
  211. package/bmad/core/workflows/brainstorming/workflow.md +58 -58
  212. package/bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -138
  213. package/bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -187
  214. package/bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -157
  215. package/bmad/core/workflows/party-mode/workflow.md +194 -194
  216. package/bundled-versions.json +3 -0
  217. package/dist/cli.js +61 -6
  218. package/dist/commands/check-updates.d.ts +5 -0
  219. package/dist/commands/check-updates.js +63 -0
  220. package/dist/commands/doctor.d.ts +39 -1
  221. package/dist/commands/doctor.js +348 -79
  222. package/dist/commands/init.d.ts +2 -0
  223. package/dist/commands/init.js +41 -15
  224. package/dist/commands/status.d.ts +7 -1
  225. package/dist/commands/status.js +111 -42
  226. package/dist/commands/upgrade.d.ts +7 -1
  227. package/dist/commands/upgrade.js +43 -12
  228. package/dist/installer.d.ts +19 -2
  229. package/dist/installer.js +305 -66
  230. package/dist/transition/artifacts.d.ts +2 -0
  231. package/dist/transition/artifacts.js +46 -0
  232. package/dist/transition/context.d.ts +19 -0
  233. package/dist/transition/context.js +261 -0
  234. package/dist/transition/fix-plan.d.ts +15 -0
  235. package/dist/transition/fix-plan.js +94 -0
  236. package/dist/transition/index.d.ts +9 -0
  237. package/dist/transition/index.js +16 -0
  238. package/dist/transition/orchestration.d.ts +2 -0
  239. package/dist/transition/orchestration.js +243 -0
  240. package/dist/transition/specs-changelog.d.ts +3 -0
  241. package/dist/transition/specs-changelog.js +75 -0
  242. package/dist/transition/specs-index.d.ts +22 -0
  243. package/dist/transition/specs-index.js +157 -0
  244. package/dist/transition/story-parsing.d.ts +7 -0
  245. package/dist/transition/story-parsing.js +124 -0
  246. package/dist/transition/tech-stack.d.ts +3 -0
  247. package/dist/transition/tech-stack.js +79 -0
  248. package/dist/transition/types.d.ts +60 -0
  249. package/dist/transition/types.js +1 -0
  250. package/dist/utils/config.d.ts +4 -0
  251. package/dist/utils/config.js +14 -4
  252. package/dist/utils/constants.d.ts +70 -0
  253. package/dist/utils/constants.js +97 -0
  254. package/dist/utils/dryrun.d.ts +7 -0
  255. package/dist/utils/dryrun.js +48 -0
  256. package/dist/utils/errors.d.ts +63 -0
  257. package/dist/utils/errors.js +86 -0
  258. package/dist/utils/file-system.d.ts +24 -0
  259. package/dist/utils/file-system.js +99 -0
  260. package/dist/utils/github.d.ts +83 -0
  261. package/dist/utils/github.js +230 -0
  262. package/dist/utils/json.js +3 -3
  263. package/dist/utils/logger.d.ts +6 -0
  264. package/dist/utils/logger.js +27 -0
  265. package/dist/utils/state.d.ts +4 -7
  266. package/dist/utils/state.js +147 -26
  267. package/dist/utils/validate.d.ts +40 -0
  268. package/dist/utils/validate.js +175 -1
  269. package/package.json +75 -59
  270. package/ralph/RALPH-REFERENCE.md +412 -0
  271. package/ralph/lib/circuit_breaker.sh +463 -330
  272. package/ralph/lib/date_utils.sh +104 -53
  273. package/ralph/lib/enable_core.sh +815 -0
  274. package/ralph/lib/response_analyzer.sh +884 -768
  275. package/ralph/lib/task_sources.sh +577 -0
  276. package/ralph/lib/timeout_utils.sh +145 -145
  277. package/ralph/lib/wizard_utils.sh +547 -0
  278. package/ralph/ralph_import.sh +636 -0
  279. package/ralph/ralph_loop.sh +1793 -1391
  280. package/ralph/ralph_monitor.sh +125 -0
  281. package/ralph/templates/AGENT.md +158 -158
  282. package/ralph/templates/PROMPT.md +285 -292
  283. package/ralph/templates/fix_plan.md +27 -27
  284. package/ralph/templates/ralphrc.template +102 -0
  285. package/ralph/templates/specs/.gitkeep +1 -1
  286. package/slash-commands/advanced-elicitation.md +1 -1
  287. package/slash-commands/adversarial-review.md +1 -1
  288. package/slash-commands/analyst.md +1 -1
  289. package/slash-commands/architect.md +1 -1
  290. package/slash-commands/bmad-help.md +1 -1
  291. package/slash-commands/bmalph-implement.md +152 -152
  292. package/slash-commands/brainstorm-project.md +1 -1
  293. package/slash-commands/brainstorming.md +1 -1
  294. package/slash-commands/correct-course.md +1 -1
  295. package/slash-commands/create-architecture.md +1 -1
  296. package/slash-commands/create-brief.md +1 -1
  297. package/slash-commands/create-epics-stories.md +1 -1
  298. package/slash-commands/create-prd.md +1 -1
  299. package/slash-commands/create-story.md +1 -1
  300. package/slash-commands/create-ux.md +1 -1
  301. package/slash-commands/dev.md +1 -1
  302. package/slash-commands/document-project.md +1 -1
  303. package/slash-commands/domain-research.md +1 -1
  304. package/slash-commands/editorial-prose.md +1 -1
  305. package/slash-commands/editorial-structure.md +1 -1
  306. package/slash-commands/execute-workflow.md +1 -1
  307. package/slash-commands/generate-project-context.md +1 -0
  308. package/slash-commands/implementation-readiness.md +1 -1
  309. package/slash-commands/index-docs.md +1 -1
  310. package/slash-commands/market-research.md +1 -1
  311. package/slash-commands/party-mode.md +1 -1
  312. package/slash-commands/pm.md +1 -1
  313. package/slash-commands/qa-automate.md +1 -0
  314. package/slash-commands/qa.md +1 -0
  315. package/slash-commands/quick-dev.md +1 -1
  316. package/slash-commands/quick-flow-solo-dev.md +1 -1
  317. package/slash-commands/retrospective.md +1 -1
  318. package/slash-commands/shard-doc.md +1 -1
  319. package/slash-commands/sm.md +1 -1
  320. package/slash-commands/sprint-planning.md +1 -1
  321. package/slash-commands/sprint-status.md +1 -1
  322. package/slash-commands/tech-spec.md +1 -1
  323. package/slash-commands/tech-writer.md +1 -0
  324. package/slash-commands/technical-research.md +1 -1
  325. package/slash-commands/ux-designer.md +1 -1
  326. package/slash-commands/validate-architecture.md +1 -1
  327. package/slash-commands/validate-brief.md +1 -1
  328. package/slash-commands/validate-epics-stories.md +1 -1
  329. package/slash-commands/validate-prd.md +1 -1
  330. package/slash-commands/validate-story.md +1 -1
  331. package/slash-commands/validate-ux.md +1 -1
  332. package/bmad/bmm/agents/tea.agent.yaml +0 -63
  333. package/bmad/bmm/sub-modules/claude-code/config.yaml +0 -4
  334. package/bmad/bmm/sub-modules/claude-code/injections.yaml +0 -242
  335. package/bmad/bmm/sub-modules/claude-code/readme.md +0 -87
  336. package/bmad/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +0 -350
  337. package/bmad/bmm/testarch/knowledge/api-request.md +0 -442
  338. package/bmad/bmm/testarch/knowledge/api-testing-patterns.md +0 -843
  339. package/bmad/bmm/testarch/knowledge/auth-session.md +0 -552
  340. package/bmad/bmm/testarch/knowledge/burn-in.md +0 -273
  341. package/bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  342. package/bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  343. package/bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  344. package/bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  345. package/bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  346. package/bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  347. package/bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  348. package/bmad/bmm/testarch/knowledge/file-utils.md +0 -463
  349. package/bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  350. package/bmad/bmm/testarch/knowledge/fixtures-composition.md +0 -382
  351. package/bmad/bmm/testarch/knowledge/intercept-network-call.md +0 -430
  352. package/bmad/bmm/testarch/knowledge/log.md +0 -429
  353. package/bmad/bmm/testarch/knowledge/network-error-monitor.md +0 -405
  354. package/bmad/bmm/testarch/knowledge/network-first.md +0 -486
  355. package/bmad/bmm/testarch/knowledge/network-recorder.md +0 -527
  356. package/bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  357. package/bmad/bmm/testarch/knowledge/overview.md +0 -286
  358. package/bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  359. package/bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  360. package/bmad/bmm/testarch/knowledge/recurse.md +0 -421
  361. package/bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  362. package/bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  363. package/bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  364. package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  365. package/bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  366. package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  367. package/bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  368. package/bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  369. package/bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  370. package/bmad/bmm/testarch/tea-index.csv +0 -35
  371. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +0 -200
  372. package/bmad/bmm/workflows/1-analysis/research/workflow.md +0 -173
  373. package/bmad/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +0 -433
  374. package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.md +0 -150
  375. package/bmad/bmm/workflows/bmad-quick-flow/quick-dev/data/project-levels.yaml +0 -59
  376. package/bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +0 -90
  377. package/bmad/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +0 -127
  378. package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +0 -39
  379. package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +0 -130
  380. package/bmad/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +0 -27
  381. package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +0 -43
  382. package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +0 -141
  383. package/bmad/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +0 -27
  384. package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +0 -49
  385. package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +0 -241
  386. package/bmad/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +0 -27
  387. package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +0 -38
  388. package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +0 -133
  389. package/bmad/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +0 -27
  390. package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  391. package/bmad/bmm/workflows/testarch/atdd/checklist.md +0 -374
  392. package/bmad/bmm/workflows/testarch/atdd/instructions.md +0 -806
  393. package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -47
  394. package/bmad/bmm/workflows/testarch/automate/checklist.md +0 -582
  395. package/bmad/bmm/workflows/testarch/automate/instructions.md +0 -1324
  396. package/bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -54
  397. package/bmad/bmm/workflows/testarch/ci/checklist.md +0 -247
  398. package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -198
  399. package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -149
  400. package/bmad/bmm/workflows/testarch/ci/instructions.md +0 -536
  401. package/bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -47
  402. package/bmad/bmm/workflows/testarch/framework/checklist.md +0 -320
  403. package/bmad/bmm/workflows/testarch/framework/instructions.md +0 -481
  404. package/bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -49
  405. package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -407
  406. package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -726
  407. package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -461
  408. package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -49
  409. package/bmad/bmm/workflows/testarch/test-design/checklist.md +0 -407
  410. package/bmad/bmm/workflows/testarch/test-design/instructions.md +0 -1158
  411. package/bmad/bmm/workflows/testarch/test-design/test-design-architecture-template.md +0 -213
  412. package/bmad/bmm/workflows/testarch/test-design/test-design-qa-template.md +0 -286
  413. package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -294
  414. package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -71
  415. package/bmad/bmm/workflows/testarch/test-review/checklist.md +0 -472
  416. package/bmad/bmm/workflows/testarch/test-review/instructions.md +0 -628
  417. package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -390
  418. package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -48
  419. package/bmad/bmm/workflows/testarch/trace/checklist.md +0 -642
  420. package/bmad/bmm/workflows/testarch/trace/instructions.md +0 -1030
  421. package/bmad/bmm/workflows/testarch/trace/trace-template.md +0 -675
  422. package/bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -57
  423. package/bmad/core/resources/excalidraw/README.md +0 -160
  424. package/bmad/core/resources/excalidraw/excalidraw-helpers.md +0 -127
  425. package/bmad/core/resources/excalidraw/library-loader.md +0 -50
  426. package/bmad/core/resources/excalidraw/validate-json-instructions.md +0 -79
  427. package/bmad/core/tasks/bmad-help.md +0 -62
  428. package/dist/commands/guide.d.ts +0 -1
  429. package/dist/commands/guide.js +0 -19
  430. package/dist/commands/implement.d.ts +0 -1
  431. package/dist/commands/implement.js +0 -83
  432. package/dist/commands/plan.d.ts +0 -5
  433. package/dist/commands/plan.js +0 -44
  434. package/dist/commands/reset.d.ts +0 -5
  435. package/dist/commands/reset.js +0 -35
  436. package/dist/commands/resume.d.ts +0 -1
  437. package/dist/commands/resume.js +0 -44
  438. package/dist/commands/start.d.ts +0 -5
  439. package/dist/commands/start.js +0 -54
  440. package/dist/transition.d.ts +0 -52
  441. package/dist/transition.js +0 -656
  442. package/slash-commands/atdd.md +0 -1
  443. package/slash-commands/continuous-integration.md +0 -1
  444. package/slash-commands/create-dataflow.md +0 -1
  445. package/slash-commands/create-diagram.md +0 -1
  446. package/slash-commands/create-flowchart.md +0 -1
  447. package/slash-commands/create-wireframe.md +0 -1
  448. package/slash-commands/nfr-assess.md +0 -1
  449. package/slash-commands/tea.md +0 -1
  450. package/slash-commands/test-automate.md +0 -1
  451. package/slash-commands/test-design.md +0 -1
  452. package/slash-commands/test-framework.md +0 -1
  453. package/slash-commands/test-review.md +0 -1
  454. package/slash-commands/test-trace.md +0 -1
  455. package/slash-commands/validate-test-design.md +0 -1
@@ -0,0 +1,815 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # enable_core.sh - Shared logic for ralph enable commands
4
+ # Provides idempotency checks, safe file creation, and project detection
5
+ #
6
+ # Used by:
7
+ # - ralph_enable.sh (interactive wizard)
8
+ # - ralph_enable_ci.sh (non-interactive CI version)
9
+
10
+ # Exit codes - specific codes for different failure types
11
+ export ENABLE_SUCCESS=0 # Successful completion
12
+ export ENABLE_ERROR=1 # General error
13
+ export ENABLE_ALREADY_ENABLED=2 # Ralph already enabled (use --force)
14
+ export ENABLE_INVALID_ARGS=3 # Invalid command line arguments
15
+ export ENABLE_FILE_NOT_FOUND=4 # Required file not found (e.g., PRD file)
16
+ export ENABLE_DEPENDENCY_MISSING=5 # Required dependency missing (e.g., jq for --json)
17
+ export ENABLE_PERMISSION_DENIED=6 # Cannot create files/directories
18
+
19
+ # Colors (can be disabled for non-interactive mode)
20
+ export ENABLE_USE_COLORS="${ENABLE_USE_COLORS:-true}"
21
+
22
+ _color() {
23
+ if [[ "$ENABLE_USE_COLORS" == "true" ]]; then
24
+ echo -e "$1"
25
+ else
26
+ echo -e "$2"
27
+ fi
28
+ }
29
+
30
+ # Color codes
31
+ RED='\033[0;31m'
32
+ GREEN='\033[0;32m'
33
+ YELLOW='\033[1;33m'
34
+ BLUE='\033[0;34m'
35
+ CYAN='\033[0;36m'
36
+ NC='\033[0m'
37
+
38
+ # Logging function
39
+ enable_log() {
40
+ local level=$1
41
+ local message=$2
42
+ local color=""
43
+
44
+ case $level in
45
+ "INFO") color=$BLUE ;;
46
+ "WARN") color=$YELLOW ;;
47
+ "ERROR") color=$RED ;;
48
+ "SUCCESS") color=$GREEN ;;
49
+ "SKIP") color=$CYAN ;;
50
+ esac
51
+
52
+ if [[ "$ENABLE_USE_COLORS" == "true" ]]; then
53
+ echo -e "${color}[$level]${NC} $message"
54
+ else
55
+ echo "[$level] $message"
56
+ fi
57
+ }
58
+
59
+ # =============================================================================
60
+ # IDEMPOTENCY CHECKS
61
+ # =============================================================================
62
+
63
+ # check_existing_ralph - Check if .ralph directory exists and its state
64
+ #
65
+ # Returns:
66
+ # 0 - No .ralph directory, safe to proceed
67
+ # 1 - .ralph exists but incomplete (partial setup)
68
+ # 2 - .ralph exists and fully initialized
69
+ #
70
+ # Outputs:
71
+ # Sets global RALPH_STATE: "none" | "partial" | "complete"
72
+ # Sets global RALPH_MISSING_FILES: array of missing files if partial
73
+ #
74
+ check_existing_ralph() {
75
+ RALPH_STATE="none"
76
+ RALPH_MISSING_FILES=()
77
+
78
+ if [[ ! -d ".ralph" ]]; then
79
+ RALPH_STATE="none"
80
+ return 0
81
+ fi
82
+
83
+ # Check for required files
84
+ local required_files=(
85
+ ".ralph/PROMPT.md"
86
+ ".ralph/fix_plan.md"
87
+ ".ralph/AGENT.md"
88
+ )
89
+
90
+ local missing=()
91
+ local found=0
92
+
93
+ for file in "${required_files[@]}"; do
94
+ if [[ -f "$file" ]]; then
95
+ found=$((found + 1))
96
+ else
97
+ missing+=("$file")
98
+ fi
99
+ done
100
+
101
+ RALPH_MISSING_FILES=("${missing[@]}")
102
+
103
+ if [[ $found -eq 0 ]]; then
104
+ RALPH_STATE="none"
105
+ return 0
106
+ elif [[ ${#missing[@]} -gt 0 ]]; then
107
+ RALPH_STATE="partial"
108
+ return 1
109
+ else
110
+ RALPH_STATE="complete"
111
+ return 2
112
+ fi
113
+ }
114
+
115
+ # is_ralph_enabled - Simple check if Ralph is fully enabled
116
+ #
117
+ # Returns:
118
+ # 0 - Ralph is fully enabled
119
+ # 1 - Ralph is not enabled or only partially
120
+ #
121
+ is_ralph_enabled() {
122
+ check_existing_ralph || true
123
+ [[ "$RALPH_STATE" == "complete" ]]
124
+ }
125
+
126
+ # =============================================================================
127
+ # SAFE FILE OPERATIONS
128
+ # =============================================================================
129
+
130
+ # safe_create_file - Create a file only if it doesn't exist (or force overwrite)
131
+ #
132
+ # Parameters:
133
+ # $1 (target) - Target file path
134
+ # $2 (content) - Content to write (can be empty string)
135
+ #
136
+ # Environment:
137
+ # ENABLE_FORCE - If "true", overwrites existing files instead of skipping
138
+ #
139
+ # Returns:
140
+ # 0 - File created/overwritten successfully
141
+ # 1 - File already exists (skipped, only when ENABLE_FORCE is not true)
142
+ # 2 - Error creating file
143
+ #
144
+ # Side effects:
145
+ # Logs [CREATE], [OVERWRITE], or [SKIP] message
146
+ #
147
+ safe_create_file() {
148
+ local target=$1
149
+ local content=$2
150
+ local force="${ENABLE_FORCE:-false}"
151
+
152
+ if [[ -f "$target" ]]; then
153
+ if [[ "$force" == "true" ]]; then
154
+ # Force mode: overwrite existing file
155
+ enable_log "INFO" "Overwriting $target (--force)"
156
+ else
157
+ # Normal mode: skip existing file
158
+ enable_log "SKIP" "$target already exists"
159
+ return 1
160
+ fi
161
+ fi
162
+
163
+ # Create parent directory if needed
164
+ local parent_dir
165
+ parent_dir=$(dirname "$target")
166
+ if [[ ! -d "$parent_dir" ]]; then
167
+ if ! mkdir -p "$parent_dir" 2>/dev/null; then
168
+ enable_log "ERROR" "Failed to create directory: $parent_dir"
169
+ return 2
170
+ fi
171
+ fi
172
+
173
+ # Write content to file using printf to avoid shell injection
174
+ # printf '%s\n' is safer than echo for arbitrary content (handles backslashes, -n, etc.)
175
+ if printf '%s\n' "$content" > "$target" 2>/dev/null; then
176
+ if [[ -f "$target" ]] && [[ "$force" == "true" ]]; then
177
+ enable_log "SUCCESS" "Overwrote $target"
178
+ else
179
+ enable_log "SUCCESS" "Created $target"
180
+ fi
181
+ return 0
182
+ else
183
+ enable_log "ERROR" "Failed to create: $target"
184
+ return 2
185
+ fi
186
+ }
187
+
188
+ # safe_create_dir - Create a directory only if it doesn't exist
189
+ #
190
+ # Parameters:
191
+ # $1 (target) - Target directory path
192
+ #
193
+ # Returns:
194
+ # 0 - Directory created or already exists
195
+ # 1 - Error creating directory
196
+ #
197
+ safe_create_dir() {
198
+ local target=$1
199
+
200
+ if [[ -d "$target" ]]; then
201
+ return 0
202
+ fi
203
+
204
+ if mkdir -p "$target" 2>/dev/null; then
205
+ enable_log "SUCCESS" "Created directory: $target"
206
+ return 0
207
+ else
208
+ enable_log "ERROR" "Failed to create directory: $target"
209
+ return 1
210
+ fi
211
+ }
212
+
213
+ # =============================================================================
214
+ # DIRECTORY STRUCTURE
215
+ # =============================================================================
216
+
217
+ # create_ralph_structure - Create the .ralph/ directory structure
218
+ #
219
+ # Creates:
220
+ # .ralph/
221
+ # .ralph/specs/
222
+ # .ralph/examples/
223
+ # .ralph/logs/
224
+ # .ralph/docs/generated/
225
+ #
226
+ # Returns:
227
+ # 0 - Structure created successfully
228
+ # 1 - Error creating structure
229
+ #
230
+ create_ralph_structure() {
231
+ local dirs=(
232
+ ".ralph"
233
+ ".ralph/specs"
234
+ ".ralph/examples"
235
+ ".ralph/logs"
236
+ ".ralph/docs/generated"
237
+ )
238
+
239
+ for dir in "${dirs[@]}"; do
240
+ if ! safe_create_dir "$dir"; then
241
+ return 1
242
+ fi
243
+ done
244
+
245
+ return 0
246
+ }
247
+
248
+ # =============================================================================
249
+ # PROJECT DETECTION
250
+ # =============================================================================
251
+
252
+ # Exported detection results
253
+ export DETECTED_PROJECT_NAME=""
254
+ export DETECTED_PROJECT_TYPE=""
255
+ export DETECTED_FRAMEWORK=""
256
+ export DETECTED_BUILD_CMD=""
257
+ export DETECTED_TEST_CMD=""
258
+ export DETECTED_RUN_CMD=""
259
+
260
+ # detect_project_context - Detect project type, name, and build commands
261
+ #
262
+ # Detects:
263
+ # - Project type: javascript, typescript, python, rust, go, unknown
264
+ # - Framework: nextjs, fastapi, express, etc.
265
+ # - Build/test/run commands based on detected tooling
266
+ #
267
+ # Sets globals:
268
+ # DETECTED_PROJECT_NAME - Project name (from package.json, folder, etc.)
269
+ # DETECTED_PROJECT_TYPE - Language/type
270
+ # DETECTED_FRAMEWORK - Framework if detected
271
+ # DETECTED_BUILD_CMD - Build command
272
+ # DETECTED_TEST_CMD - Test command
273
+ # DETECTED_RUN_CMD - Run/start command
274
+ #
275
+ detect_project_context() {
276
+ # Reset detection results
277
+ DETECTED_PROJECT_NAME=""
278
+ DETECTED_PROJECT_TYPE="unknown"
279
+ DETECTED_FRAMEWORK=""
280
+ DETECTED_BUILD_CMD=""
281
+ DETECTED_TEST_CMD=""
282
+ DETECTED_RUN_CMD=""
283
+
284
+ # Detect from package.json (JavaScript/TypeScript)
285
+ if [[ -f "package.json" ]]; then
286
+ DETECTED_PROJECT_TYPE="javascript"
287
+
288
+ # Check for TypeScript
289
+ if grep -q '"typescript"' package.json 2>/dev/null || \
290
+ [[ -f "tsconfig.json" ]]; then
291
+ DETECTED_PROJECT_TYPE="typescript"
292
+ fi
293
+
294
+ # Extract project name
295
+ if command -v jq &>/dev/null; then
296
+ DETECTED_PROJECT_NAME=$(jq -r '.name // empty' package.json 2>/dev/null)
297
+ else
298
+ # Fallback: grep for name field
299
+ DETECTED_PROJECT_NAME=$(grep -m1 '"name"' package.json | sed 's/.*: *"\([^"]*\)".*/\1/' 2>/dev/null)
300
+ fi
301
+
302
+ # Detect framework
303
+ if grep -q '"next"' package.json 2>/dev/null; then
304
+ DETECTED_FRAMEWORK="nextjs"
305
+ elif grep -q '"express"' package.json 2>/dev/null; then
306
+ DETECTED_FRAMEWORK="express"
307
+ elif grep -q '"react"' package.json 2>/dev/null; then
308
+ DETECTED_FRAMEWORK="react"
309
+ elif grep -q '"vue"' package.json 2>/dev/null; then
310
+ DETECTED_FRAMEWORK="vue"
311
+ fi
312
+
313
+ # Set build commands
314
+ DETECTED_BUILD_CMD="npm run build"
315
+ DETECTED_TEST_CMD="npm test"
316
+ DETECTED_RUN_CMD="npm start"
317
+
318
+ # Check for yarn
319
+ if [[ -f "yarn.lock" ]]; then
320
+ DETECTED_BUILD_CMD="yarn build"
321
+ DETECTED_TEST_CMD="yarn test"
322
+ DETECTED_RUN_CMD="yarn start"
323
+ fi
324
+
325
+ # Check for pnpm
326
+ if [[ -f "pnpm-lock.yaml" ]]; then
327
+ DETECTED_BUILD_CMD="pnpm build"
328
+ DETECTED_TEST_CMD="pnpm test"
329
+ DETECTED_RUN_CMD="pnpm start"
330
+ fi
331
+ fi
332
+
333
+ # Detect from pyproject.toml or setup.py (Python)
334
+ if [[ -f "pyproject.toml" ]] || [[ -f "setup.py" ]]; then
335
+ DETECTED_PROJECT_TYPE="python"
336
+
337
+ # Extract project name from pyproject.toml
338
+ if [[ -f "pyproject.toml" ]]; then
339
+ DETECTED_PROJECT_NAME=$(grep -m1 '^name' pyproject.toml | sed 's/.*= *"\([^"]*\)".*/\1/' 2>/dev/null)
340
+
341
+ # Detect framework
342
+ if grep -q 'fastapi' pyproject.toml 2>/dev/null; then
343
+ DETECTED_FRAMEWORK="fastapi"
344
+ elif grep -q 'django' pyproject.toml 2>/dev/null; then
345
+ DETECTED_FRAMEWORK="django"
346
+ elif grep -q 'flask' pyproject.toml 2>/dev/null; then
347
+ DETECTED_FRAMEWORK="flask"
348
+ fi
349
+ fi
350
+
351
+ # Set build commands (prefer uv if detected)
352
+ if [[ -f "uv.lock" ]] || command -v uv &>/dev/null; then
353
+ DETECTED_BUILD_CMD="uv sync"
354
+ DETECTED_TEST_CMD="uv run pytest"
355
+ DETECTED_RUN_CMD="uv run python -m ${DETECTED_PROJECT_NAME:-main}"
356
+ else
357
+ DETECTED_BUILD_CMD="pip install -e ."
358
+ DETECTED_TEST_CMD="pytest"
359
+ DETECTED_RUN_CMD="python -m ${DETECTED_PROJECT_NAME:-main}"
360
+ fi
361
+ fi
362
+
363
+ # Detect from Cargo.toml (Rust)
364
+ if [[ -f "Cargo.toml" ]]; then
365
+ DETECTED_PROJECT_TYPE="rust"
366
+ DETECTED_PROJECT_NAME=$(grep -m1 '^name' Cargo.toml | sed 's/.*= *"\([^"]*\)".*/\1/' 2>/dev/null)
367
+ DETECTED_BUILD_CMD="cargo build"
368
+ DETECTED_TEST_CMD="cargo test"
369
+ DETECTED_RUN_CMD="cargo run"
370
+ fi
371
+
372
+ # Detect from go.mod (Go)
373
+ if [[ -f "go.mod" ]]; then
374
+ DETECTED_PROJECT_TYPE="go"
375
+ DETECTED_PROJECT_NAME=$(head -1 go.mod | sed 's/module //' 2>/dev/null)
376
+ DETECTED_BUILD_CMD="go build"
377
+ DETECTED_TEST_CMD="go test ./..."
378
+ DETECTED_RUN_CMD="go run ."
379
+ fi
380
+
381
+ # Fallback project name to folder name
382
+ if [[ -z "$DETECTED_PROJECT_NAME" ]]; then
383
+ DETECTED_PROJECT_NAME=$(basename "$(pwd)")
384
+ fi
385
+ }
386
+
387
+ # detect_git_info - Detect git repository information
388
+ #
389
+ # Sets globals:
390
+ # DETECTED_GIT_REPO - true if in git repo
391
+ # DETECTED_GIT_REMOTE - Remote URL (origin)
392
+ # DETECTED_GIT_GITHUB - true if GitHub remote
393
+ #
394
+ export DETECTED_GIT_REPO="false"
395
+ export DETECTED_GIT_REMOTE=""
396
+ export DETECTED_GIT_GITHUB="false"
397
+
398
+ detect_git_info() {
399
+ DETECTED_GIT_REPO="false"
400
+ DETECTED_GIT_REMOTE=""
401
+ DETECTED_GIT_GITHUB="false"
402
+
403
+ # Check if in git repo
404
+ if git rev-parse --git-dir &>/dev/null; then
405
+ DETECTED_GIT_REPO="true"
406
+
407
+ # Get remote URL
408
+ DETECTED_GIT_REMOTE=$(git remote get-url origin 2>/dev/null || echo "")
409
+
410
+ # Check if GitHub
411
+ if [[ "$DETECTED_GIT_REMOTE" == *"github.com"* ]]; then
412
+ DETECTED_GIT_GITHUB="true"
413
+ fi
414
+ fi
415
+ }
416
+
417
+ # detect_task_sources - Detect available task sources
418
+ #
419
+ # Sets globals:
420
+ # DETECTED_BEADS_AVAILABLE - true if .beads directory exists
421
+ # DETECTED_GITHUB_AVAILABLE - true if GitHub remote detected
422
+ # DETECTED_PRD_FILES - Array of potential PRD files found
423
+ #
424
+ export DETECTED_BEADS_AVAILABLE="false"
425
+ export DETECTED_GITHUB_AVAILABLE="false"
426
+ declare -a DETECTED_PRD_FILES=()
427
+
428
+ detect_task_sources() {
429
+ DETECTED_BEADS_AVAILABLE="false"
430
+ DETECTED_GITHUB_AVAILABLE="false"
431
+ DETECTED_PRD_FILES=()
432
+
433
+ # Check for beads
434
+ if [[ -d ".beads" ]]; then
435
+ DETECTED_BEADS_AVAILABLE="true"
436
+ fi
437
+
438
+ # Check for GitHub (reuse git detection)
439
+ detect_git_info
440
+ DETECTED_GITHUB_AVAILABLE="$DETECTED_GIT_GITHUB"
441
+
442
+ # Search for PRD/spec files
443
+ local search_dirs=("docs" "specs" "." "requirements")
444
+ local prd_patterns=("*prd*.md" "*PRD*.md" "*requirements*.md" "*spec*.md" "*specification*.md")
445
+
446
+ for dir in "${search_dirs[@]}"; do
447
+ if [[ -d "$dir" ]]; then
448
+ for pattern in "${prd_patterns[@]}"; do
449
+ while IFS= read -r -d '' file; do
450
+ DETECTED_PRD_FILES+=("$file")
451
+ done < <(find "$dir" -maxdepth 2 -name "$pattern" -print0 2>/dev/null)
452
+ done
453
+ fi
454
+ done
455
+ }
456
+
457
+ # =============================================================================
458
+ # TEMPLATE GENERATION
459
+ # =============================================================================
460
+
461
+ # get_templates_dir - Get the templates directory path
462
+ #
463
+ # Returns:
464
+ # Echoes the path to templates directory
465
+ # Returns 1 if not found
466
+ #
467
+ get_templates_dir() {
468
+ # Check global installation first
469
+ if [[ -d "$HOME/.ralph/templates" ]]; then
470
+ echo "$HOME/.ralph/templates"
471
+ return 0
472
+ fi
473
+
474
+ # Check local installation (development)
475
+ local script_dir
476
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
477
+ if [[ -d "$script_dir/../templates" ]]; then
478
+ echo "$script_dir/../templates"
479
+ return 0
480
+ fi
481
+
482
+ return 1
483
+ }
484
+
485
+ # generate_prompt_md - Generate PROMPT.md with project context
486
+ #
487
+ # Parameters:
488
+ # $1 (project_name) - Project name
489
+ # $2 (project_type) - Project type (typescript, python, etc.)
490
+ # $3 (framework) - Framework if any (optional)
491
+ # $4 (objectives) - Custom objectives (optional, newline-separated)
492
+ #
493
+ # Outputs to stdout
494
+ #
495
+ generate_prompt_md() {
496
+ local project_name="${1:-$(basename "$(pwd)")}"
497
+ local project_type="${2:-unknown}"
498
+ local framework="${3:-}"
499
+ local objectives="${4:-}"
500
+
501
+ local framework_line=""
502
+ if [[ -n "$framework" ]]; then
503
+ framework_line="**Framework:** $framework"
504
+ fi
505
+
506
+ local objectives_section=""
507
+ if [[ -n "$objectives" ]]; then
508
+ objectives_section="$objectives"
509
+ else
510
+ objectives_section="- Review the codebase and understand the current state
511
+ - Follow tasks in fix_plan.md
512
+ - Implement one task per loop
513
+ - Write tests for new functionality
514
+ - Update documentation as needed"
515
+ fi
516
+
517
+ cat << PROMPTEOF
518
+ # Ralph Development Instructions
519
+
520
+ ## Context
521
+ You are Ralph, an autonomous AI development agent working on the **${project_name}** project.
522
+
523
+ **Project Type:** ${project_type}
524
+ ${framework_line}
525
+
526
+ ## Current Objectives
527
+ ${objectives_section}
528
+
529
+ ## Key Principles
530
+ - ONE task per loop - focus on the most important thing
531
+ - Search the codebase before assuming something isn't implemented
532
+ - Write comprehensive tests with clear documentation
533
+ - Update fix_plan.md with your learnings
534
+ - Commit working changes with descriptive messages
535
+
536
+ ## Testing Guidelines
537
+ - LIMIT testing to ~20% of your total effort per loop
538
+ - PRIORITIZE: Implementation > Documentation > Tests
539
+ - Only write tests for NEW functionality you implement
540
+
541
+ ## Build & Run
542
+ See AGENT.md for build and run instructions.
543
+
544
+ ## Status Reporting (CRITICAL)
545
+
546
+ At the end of your response, ALWAYS include this status block:
547
+
548
+ \`\`\`
549
+ ---RALPH_STATUS---
550
+ STATUS: IN_PROGRESS | COMPLETE | BLOCKED
551
+ TASKS_COMPLETED_THIS_LOOP: <number>
552
+ FILES_MODIFIED: <number>
553
+ TESTS_STATUS: PASSING | FAILING | NOT_RUN
554
+ WORK_TYPE: IMPLEMENTATION | TESTING | DOCUMENTATION | REFACTORING
555
+ EXIT_SIGNAL: false | true
556
+ RECOMMENDATION: <one line summary of what to do next>
557
+ ---END_RALPH_STATUS---
558
+ \`\`\`
559
+
560
+ ## Current Task
561
+ Follow fix_plan.md and choose the most important item to implement next.
562
+ PROMPTEOF
563
+ }
564
+
565
+ # generate_agent_md - Generate AGENT.md with detected build commands
566
+ #
567
+ # Parameters:
568
+ # $1 (build_cmd) - Build command
569
+ # $2 (test_cmd) - Test command
570
+ # $3 (run_cmd) - Run command
571
+ #
572
+ # Outputs to stdout
573
+ #
574
+ generate_agent_md() {
575
+ local build_cmd="${1:-echo 'No build command configured'}"
576
+ local test_cmd="${2:-echo 'No test command configured'}"
577
+ local run_cmd="${3:-echo 'No run command configured'}"
578
+
579
+ cat << AGENTEOF
580
+ # Ralph Agent Configuration
581
+
582
+ ## Build Instructions
583
+
584
+ \`\`\`bash
585
+ # Build the project
586
+ ${build_cmd}
587
+ \`\`\`
588
+
589
+ ## Test Instructions
590
+
591
+ \`\`\`bash
592
+ # Run tests
593
+ ${test_cmd}
594
+ \`\`\`
595
+
596
+ ## Run Instructions
597
+
598
+ \`\`\`bash
599
+ # Start/run the project
600
+ ${run_cmd}
601
+ \`\`\`
602
+
603
+ ## Notes
604
+ - Update this file when build process changes
605
+ - Add environment setup instructions as needed
606
+ - Include any pre-requisites or dependencies
607
+ AGENTEOF
608
+ }
609
+
610
+ # generate_fix_plan_md - Generate fix_plan.md with imported tasks
611
+ #
612
+ # Parameters:
613
+ # $1 (tasks) - Tasks to include (newline-separated, markdown checkbox format)
614
+ #
615
+ # Outputs to stdout
616
+ #
617
+ generate_fix_plan_md() {
618
+ local tasks="${1:-}"
619
+
620
+ local high_priority=""
621
+ local medium_priority=""
622
+ local low_priority=""
623
+
624
+ if [[ -n "$tasks" ]]; then
625
+ high_priority="$tasks"
626
+ else
627
+ high_priority="- [ ] Review codebase and understand architecture
628
+ - [ ] Identify and document key components
629
+ - [ ] Set up development environment"
630
+ medium_priority="- [ ] Implement core features
631
+ - [ ] Add test coverage
632
+ - [ ] Update documentation"
633
+ low_priority="- [ ] Performance optimization
634
+ - [ ] Code cleanup and refactoring"
635
+ fi
636
+
637
+ cat << FIXPLANEOF
638
+ # Ralph Fix Plan
639
+
640
+ ## High Priority
641
+ ${high_priority}
642
+
643
+ ## Medium Priority
644
+ ${medium_priority}
645
+
646
+ ## Low Priority
647
+ ${low_priority}
648
+
649
+ ## Completed
650
+ - [x] Project enabled for Ralph
651
+
652
+ ## Notes
653
+ - Focus on MVP functionality first
654
+ - Ensure each feature is properly tested
655
+ - Update this file after each major milestone
656
+ FIXPLANEOF
657
+ }
658
+
659
+ # generate_ralphrc - Generate .ralphrc configuration file
660
+ #
661
+ # Parameters:
662
+ # $1 (project_name) - Project name
663
+ # $2 (project_type) - Project type
664
+ # $3 (task_sources) - Task sources (local, beads, github)
665
+ #
666
+ # Outputs to stdout
667
+ #
668
+ generate_ralphrc() {
669
+ local project_name="${1:-$(basename "$(pwd)")}"
670
+ local project_type="${2:-unknown}"
671
+ local task_sources="${3:-local}"
672
+
673
+ cat << RALPHRCEOF
674
+ # .ralphrc - Ralph project configuration
675
+ # Generated by: ralph enable
676
+ # Documentation: https://github.com/frankbria/ralph-claude-code
677
+
678
+ # Project identification
679
+ PROJECT_NAME="${project_name}"
680
+ PROJECT_TYPE="${project_type}"
681
+
682
+ # Loop settings
683
+ MAX_CALLS_PER_HOUR=100
684
+ CLAUDE_TIMEOUT_MINUTES=15
685
+ CLAUDE_OUTPUT_FORMAT="json"
686
+
687
+ # Tool permissions
688
+ # Comma-separated list of allowed tools
689
+ ALLOWED_TOOLS="Write,Read,Edit,Bash(git *),Bash(npm *),Bash(pytest)"
690
+
691
+ # Session management
692
+ SESSION_CONTINUITY=true
693
+ SESSION_EXPIRY_HOURS=24
694
+
695
+ # Task sources (for ralph enable --sync)
696
+ # Options: local, beads, github (comma-separated for multiple)
697
+ TASK_SOURCES="${task_sources}"
698
+ GITHUB_TASK_LABEL="ralph-task"
699
+ BEADS_FILTER="status:open"
700
+
701
+ # Circuit breaker thresholds
702
+ CB_NO_PROGRESS_THRESHOLD=3
703
+ CB_SAME_ERROR_THRESHOLD=5
704
+ CB_OUTPUT_DECLINE_THRESHOLD=70
705
+ RALPHRCEOF
706
+ }
707
+
708
+ # =============================================================================
709
+ # MAIN ENABLE LOGIC
710
+ # =============================================================================
711
+
712
+ # enable_ralph_in_directory - Main function to enable Ralph in current directory
713
+ #
714
+ # Parameters:
715
+ # $1 (options) - JSON-like options string or empty
716
+ # force: true/false - Force overwrite existing
717
+ # skip_tasks: true/false - Skip task import
718
+ # project_name: string - Override project name
719
+ # task_content: string - Pre-imported task content
720
+ #
721
+ # Returns:
722
+ # 0 - Success
723
+ # 1 - Error
724
+ # 2 - Already enabled (and no force flag)
725
+ #
726
+ enable_ralph_in_directory() {
727
+ local force="${ENABLE_FORCE:-false}"
728
+ local skip_tasks="${ENABLE_SKIP_TASKS:-false}"
729
+ local project_name="${ENABLE_PROJECT_NAME:-}"
730
+ local project_type="${ENABLE_PROJECT_TYPE:-}"
731
+ local task_content="${ENABLE_TASK_CONTENT:-}"
732
+
733
+ # Check existing state (use || true to prevent set -e from exiting)
734
+ check_existing_ralph || true
735
+
736
+ if [[ "$RALPH_STATE" == "complete" && "$force" != "true" ]]; then
737
+ enable_log "INFO" "Ralph is already enabled in this project"
738
+ enable_log "INFO" "Use --force to overwrite existing configuration"
739
+ return $ENABLE_ALREADY_ENABLED
740
+ fi
741
+
742
+ # Detect project context
743
+ detect_project_context
744
+
745
+ # Use detected or provided project name
746
+ if [[ -z "$project_name" ]]; then
747
+ project_name="$DETECTED_PROJECT_NAME"
748
+ fi
749
+
750
+ # Use detected or provided project type
751
+ if [[ -n "$project_type" ]]; then
752
+ DETECTED_PROJECT_TYPE="$project_type"
753
+ fi
754
+
755
+ enable_log "INFO" "Enabling Ralph for: $project_name"
756
+ enable_log "INFO" "Project type: $DETECTED_PROJECT_TYPE"
757
+ if [[ -n "$DETECTED_FRAMEWORK" ]]; then
758
+ enable_log "INFO" "Framework: $DETECTED_FRAMEWORK"
759
+ fi
760
+
761
+ # Create directory structure
762
+ if ! create_ralph_structure; then
763
+ enable_log "ERROR" "Failed to create .ralph/ structure"
764
+ return $ENABLE_ERROR
765
+ fi
766
+
767
+ # Generate and create files
768
+ local prompt_content
769
+ prompt_content=$(generate_prompt_md "$project_name" "$DETECTED_PROJECT_TYPE" "$DETECTED_FRAMEWORK")
770
+ safe_create_file ".ralph/PROMPT.md" "$prompt_content"
771
+
772
+ local agent_content
773
+ agent_content=$(generate_agent_md "$DETECTED_BUILD_CMD" "$DETECTED_TEST_CMD" "$DETECTED_RUN_CMD")
774
+ safe_create_file ".ralph/AGENT.md" "$agent_content"
775
+
776
+ local fix_plan_content
777
+ fix_plan_content=$(generate_fix_plan_md "$task_content")
778
+ safe_create_file ".ralph/fix_plan.md" "$fix_plan_content"
779
+
780
+ # Detect task sources for .ralphrc
781
+ detect_task_sources
782
+ local task_sources="local"
783
+ if [[ "$DETECTED_BEADS_AVAILABLE" == "true" ]]; then
784
+ task_sources="beads,$task_sources"
785
+ fi
786
+ if [[ "$DETECTED_GITHUB_AVAILABLE" == "true" ]]; then
787
+ task_sources="github,$task_sources"
788
+ fi
789
+
790
+ # Generate .ralphrc
791
+ local ralphrc_content
792
+ ralphrc_content=$(generate_ralphrc "$project_name" "$DETECTED_PROJECT_TYPE" "$task_sources")
793
+ safe_create_file ".ralphrc" "$ralphrc_content"
794
+
795
+ enable_log "SUCCESS" "Ralph enabled successfully!"
796
+
797
+ return $ENABLE_SUCCESS
798
+ }
799
+
800
+ # Export functions for use in other scripts
801
+ export -f enable_log
802
+ export -f check_existing_ralph
803
+ export -f is_ralph_enabled
804
+ export -f safe_create_file
805
+ export -f safe_create_dir
806
+ export -f create_ralph_structure
807
+ export -f detect_project_context
808
+ export -f detect_git_info
809
+ export -f detect_task_sources
810
+ export -f get_templates_dir
811
+ export -f generate_prompt_md
812
+ export -f generate_agent_md
813
+ export -f generate_fix_plan_md
814
+ export -f generate_ralphrc
815
+ export -f enable_ralph_in_directory