bmalph 2.7.6 → 2.8.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 (448) hide show
  1. package/README.md +4 -4
  2. package/bmad/bmm/agents/analyst.agent.yaml +6 -6
  3. package/bmad/bmm/agents/architect.agent.yaml +2 -2
  4. package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
  5. package/bmad/bmm/agents/dev.agent.yaml +2 -2
  6. package/bmad/bmm/agents/pm.agent.yaml +6 -6
  7. package/bmad/bmm/agents/qa.agent.yaml +1 -1
  8. package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
  9. package/bmad/bmm/agents/sm.agent.yaml +4 -4
  10. package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  11. package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  12. package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
  13. package/bmad/bmm/module-help.csv +26 -25
  14. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
  15. package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
  16. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
  17. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
  18. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
  19. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
  20. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
  21. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
  22. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
  23. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
  24. package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
  25. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
  26. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
  27. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
  28. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
  29. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
  30. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
  31. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
  32. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
  33. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
  34. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
  35. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
  36. package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
  37. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
  38. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
  39. package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
  40. package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
  41. package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
  42. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
  43. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
  44. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
  45. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
  46. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  47. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  48. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  49. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  50. package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
  51. package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
  52. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
  53. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
  54. package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
  55. package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
  56. package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
  57. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
  58. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
  59. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
  60. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
  61. package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
  62. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
  63. package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
  64. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
  65. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
  66. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
  67. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
  68. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
  69. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
  70. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
  71. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
  72. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
  73. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
  74. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
  75. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
  76. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
  77. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
  78. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
  79. package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
  80. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
  81. package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
  82. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
  83. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
  84. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
  85. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
  86. package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
  87. package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
  88. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
  89. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
  90. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
  91. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
  92. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
  93. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  94. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  95. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  96. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  97. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  98. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  99. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  100. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  101. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  102. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  103. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  104. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  105. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  106. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  107. package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
  108. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
  109. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  110. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
  111. package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
  112. package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
  113. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
  114. package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
  115. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
  116. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
  117. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
  118. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
  119. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
  120. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
  121. package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
  122. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
  123. package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
  124. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
  125. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
  126. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
  127. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
  128. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
  129. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
  130. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
  131. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
  132. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
  133. package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
  134. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
  135. package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
  136. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
  137. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
  138. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
  139. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
  140. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
  141. package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
  142. package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
  143. package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
  144. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
  145. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
  146. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
  147. package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
  148. package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
  149. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
  150. package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
  151. package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
  152. package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
  153. package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
  154. package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
  155. package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
  156. package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
  157. package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
  158. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
  159. package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
  160. package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
  161. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
  162. package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
  163. package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
  164. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
  165. package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
  166. package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
  167. package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
  168. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
  169. package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
  170. package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
  171. package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
  172. package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
  173. package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
  174. package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
  175. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
  176. package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  177. package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
  178. package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  179. package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
  180. package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
  181. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
  182. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
  183. package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
  184. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
  185. package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
  186. package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
  187. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
  188. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
  189. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
  190. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
  191. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
  192. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
  193. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
  194. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
  195. package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
  196. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  197. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  198. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
  199. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
  200. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
  201. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
  202. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
  203. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  204. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
  205. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
  206. package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
  207. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
  208. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
  209. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
  210. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
  211. package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
  212. package/bmad/core/module-help.csv +10 -8
  213. package/bmad/core/module.yaml +1 -1
  214. package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
  215. package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
  216. package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
  217. package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
  218. package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
  219. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
  220. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
  221. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
  222. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
  223. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
  224. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
  225. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
  226. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
  227. package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
  228. package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
  229. package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
  230. package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
  231. package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
  232. package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
  233. package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
  234. package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
  235. package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
  236. package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
  237. package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
  238. package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
  239. package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
  240. package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
  241. package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
  242. package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
  243. package/bmad/core/skills/bmad-help/SKILL.md +6 -0
  244. package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
  245. package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
  246. package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
  247. package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
  248. package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
  249. package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
  250. package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
  251. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
  252. package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
  253. package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
  254. package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  255. package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
  256. package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
  257. package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  258. package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
  259. package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
  260. package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
  261. package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
  262. package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
  263. package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
  264. package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
  265. package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
  266. package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
  267. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
  268. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
  269. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
  270. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
  271. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
  272. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
  273. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
  274. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
  275. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
  276. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
  277. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
  278. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
  279. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
  280. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
  281. package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
  282. package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
  283. package/bundled-versions.json +1 -1
  284. package/dist/commands/doctor-checks.js +14 -5
  285. package/dist/commands/doctor-checks.js.map +1 -1
  286. package/dist/commands/doctor.js +13 -4
  287. package/dist/commands/doctor.js.map +1 -1
  288. package/dist/commands/init.js +12 -2
  289. package/dist/commands/init.js.map +1 -1
  290. package/dist/commands/run.js +11 -2
  291. package/dist/commands/run.js.map +1 -1
  292. package/dist/commands/status.js +3 -2
  293. package/dist/commands/status.js.map +1 -1
  294. package/dist/commands/watch.js +5 -0
  295. package/dist/commands/watch.js.map +1 -1
  296. package/dist/installer/commands.js +33 -15
  297. package/dist/installer/commands.js.map +1 -1
  298. package/dist/installer/install.js +1 -1
  299. package/dist/installer/install.js.map +1 -1
  300. package/dist/installer/project-files.js +4 -4
  301. package/dist/installer/project-files.js.map +1 -1
  302. package/dist/installer/template-files.js +72 -6
  303. package/dist/installer/template-files.js.map +1 -1
  304. package/dist/platform/codex.js +6 -1
  305. package/dist/platform/codex.js.map +1 -1
  306. package/dist/platform/detect.js +7 -3
  307. package/dist/platform/detect.js.map +1 -1
  308. package/dist/platform/doctor-checks.js +2 -2
  309. package/dist/platform/doctor-checks.js.map +1 -1
  310. package/dist/platform/guidance.js +66 -0
  311. package/dist/platform/guidance.js.map +1 -0
  312. package/dist/platform/instructions-snippet.js +15 -0
  313. package/dist/platform/instructions-snippet.js.map +1 -1
  314. package/dist/platform/opencode.js +20 -0
  315. package/dist/platform/opencode.js.map +1 -0
  316. package/dist/platform/registry.js +2 -0
  317. package/dist/platform/registry.js.map +1 -1
  318. package/dist/platform/types.js +1 -0
  319. package/dist/platform/types.js.map +1 -1
  320. package/dist/reset.js +3 -3
  321. package/dist/reset.js.map +1 -1
  322. package/dist/run/ralph-process.js +51 -7
  323. package/dist/run/ralph-process.js.map +1 -1
  324. package/dist/run/run-dashboard.js +22 -9
  325. package/dist/run/run-dashboard.js.map +1 -1
  326. package/dist/transition/artifact-scan.js +14 -5
  327. package/dist/transition/artifact-scan.js.map +1 -1
  328. package/dist/transition/context.js +11 -3
  329. package/dist/transition/context.js.map +1 -1
  330. package/dist/utils/constants.js +4 -2
  331. package/dist/utils/constants.js.map +1 -1
  332. package/dist/watch/dashboard.js +36 -21
  333. package/dist/watch/dashboard.js.map +1 -1
  334. package/dist/watch/frame-writer.js +83 -0
  335. package/dist/watch/frame-writer.js.map +1 -0
  336. package/dist/watch/renderer.js +179 -54
  337. package/dist/watch/renderer.js.map +1 -1
  338. package/dist/watch/state-reader.js +8 -0
  339. package/dist/watch/state-reader.js.map +1 -1
  340. package/package.json +1 -1
  341. package/ralph/RALPH-REFERENCE.md +4 -4
  342. package/ralph/drivers/claude-code.sh +4 -2
  343. package/ralph/drivers/opencode.sh +147 -0
  344. package/ralph/lib/enable_core.sh +10 -2
  345. package/ralph/lib/response_analyzer.sh +337 -96
  346. package/ralph/lib/wizard_utils.sh +4 -4
  347. package/ralph/ralph_import.sh +9 -1
  348. package/ralph/ralph_loop.sh +428 -15
  349. package/ralph/templates/PROMPT.md +15 -5
  350. package/ralph/templates/ralphrc.template +31 -5
  351. package/slash-commands/advanced-elicitation.md +1 -1
  352. package/slash-commands/adversarial-review.md +1 -1
  353. package/slash-commands/bmad-help.md +1 -1
  354. package/slash-commands/bmalph.md +1 -1
  355. package/slash-commands/brainstorm-project.md +1 -1
  356. package/slash-commands/brainstorming.md +1 -1
  357. package/slash-commands/correct-course.md +1 -1
  358. package/slash-commands/create-architecture.md +1 -1
  359. package/slash-commands/create-brief.md +1 -1
  360. package/slash-commands/create-epics-stories.md +1 -1
  361. package/slash-commands/create-prd.md +1 -1
  362. package/slash-commands/create-story.md +1 -1
  363. package/slash-commands/create-ux.md +1 -1
  364. package/slash-commands/distillator.md +1 -0
  365. package/slash-commands/document-project.md +1 -1
  366. package/slash-commands/domain-research.md +1 -1
  367. package/slash-commands/edge-case-hunter.md +1 -0
  368. package/slash-commands/edit-prd.md +1 -0
  369. package/slash-commands/editorial-prose.md +1 -1
  370. package/slash-commands/editorial-structure.md +1 -1
  371. package/slash-commands/generate-project-context.md +1 -1
  372. package/slash-commands/implementation-readiness.md +1 -1
  373. package/slash-commands/index-docs.md +1 -1
  374. package/slash-commands/market-research.md +1 -1
  375. package/slash-commands/party-mode.md +1 -1
  376. package/slash-commands/qa-automate.md +1 -1
  377. package/slash-commands/quick-dev-new.md +1 -0
  378. package/slash-commands/quick-dev.md +1 -1
  379. package/slash-commands/retrospective.md +1 -1
  380. package/slash-commands/shard-doc.md +1 -1
  381. package/slash-commands/sprint-planning.md +1 -1
  382. package/slash-commands/sprint-status.md +1 -1
  383. package/slash-commands/tech-spec.md +1 -1
  384. package/slash-commands/technical-research.md +1 -1
  385. package/slash-commands/validate-architecture.md +1 -1
  386. package/slash-commands/validate-brief.md +1 -1
  387. package/slash-commands/validate-epics-stories.md +1 -1
  388. package/slash-commands/validate-prd.md +1 -1
  389. package/slash-commands/validate-story.md +1 -1
  390. package/slash-commands/validate-ux.md +1 -1
  391. package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
  392. package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  393. package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
  394. package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
  395. package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  396. package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
  397. package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
  398. package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
  399. package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  400. package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  401. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
  402. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  403. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  404. package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
  405. package/bmad/core/agents/bmad-master.agent.yaml +0 -30
  406. package/bmad/core/tasks/editorial-review-prose.xml +0 -102
  407. package/bmad/core/tasks/editorial-review-structure.xml +0 -209
  408. package/bmad/core/tasks/index-docs.xml +0 -65
  409. package/bmad/core/tasks/review-adversarial-general.xml +0 -48
  410. package/bmad/core/tasks/shard-doc.xml +0 -108
  411. package/bmad/core/tasks/workflow.xml +0 -235
  412. package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
  413. package/slash-commands/execute-workflow.md +0 -1
  414. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
  415. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
  416. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
  417. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
  418. /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
  419. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
  420. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
  421. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
  422. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
  423. /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
  424. /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
  425. /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
  426. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
  427. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
  428. /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
  429. /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
  430. /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
  431. /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
  432. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
  433. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
  434. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
  435. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
  436. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
  437. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
  438. /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
  439. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
  440. /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
  441. /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
  442. /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
  443. /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
  444. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
  445. /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
  446. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
  447. /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
  448. /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,wDAAwD;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,+FAA+F;AAC/F,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,oDAAoD;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEhC,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AAEnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAE9C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AAExC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEhD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,yDAAyD;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,wDAAwD;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,+FAA+F;AAC/F,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,oDAAoD;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEhC,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AAEnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAE9C,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,qDAAqD;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AAExC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEhD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,yDAAyD;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC"}
@@ -1,34 +1,49 @@
1
1
  import { readDashboardState } from "./state-reader.js";
2
2
  import { renderDashboard } from "./renderer.js";
3
+ import { createTerminalFrameWriter } from "./frame-writer.js";
3
4
  import { FileWatcher } from "./file-watcher.js";
4
- const CLEAR_SCREEN = "\x1B[2J\x1B[H";
5
- const HIDE_CURSOR = "\x1B[?25l";
6
- const SHOW_CURSOR = "\x1B[?25h";
7
- export function createRefreshCallback(projectDir, write) {
5
+ export function createRefreshCallback(projectDir, write, options = {}) {
6
+ const now = options.now ?? (() => new Date());
7
+ let lastMeaningfulUpdate;
8
+ let lastRenderedBody;
9
+ const renderOptions = options.footerRenderer
10
+ ? { footerRenderer: options.footerRenderer }
11
+ : undefined;
8
12
  return async () => {
9
13
  const state = await readDashboardState(projectDir);
10
- const output = renderDashboard(state);
11
- write(CLEAR_SCREEN + output + "\n");
12
- };
13
- }
14
- export function setupTerminal() {
15
- if (process.stdout.isTTY) {
16
- process.stdout.write(HIDE_CURSOR);
17
- }
18
- return () => {
19
- if (process.stdout.isTTY) {
20
- process.stdout.write(SHOW_CURSOR);
14
+ if (lastMeaningfulUpdate === undefined) {
15
+ lastMeaningfulUpdate = now();
21
16
  }
22
- if (process.stdin.isTTY && process.stdin.setRawMode) {
23
- process.stdin.setRawMode(false);
17
+ let frame = renderDashboard({
18
+ ...state,
19
+ lastUpdated: lastMeaningfulUpdate,
20
+ }, undefined, renderOptions);
21
+ let body = stripFooterLine(frame);
22
+ if (lastRenderedBody !== undefined && body !== lastRenderedBody) {
23
+ lastMeaningfulUpdate = now();
24
+ frame = renderDashboard({
25
+ ...state,
26
+ lastUpdated: lastMeaningfulUpdate,
27
+ }, undefined, renderOptions);
28
+ body = stripFooterLine(frame);
24
29
  }
25
- process.stdin.pause();
30
+ lastRenderedBody = body;
31
+ write(frame);
26
32
  };
27
33
  }
34
+ function stripFooterLine(frame) {
35
+ const footerIndex = frame.lastIndexOf("\n");
36
+ if (footerIndex === -1) {
37
+ return frame;
38
+ }
39
+ return frame.slice(0, footerIndex);
40
+ }
28
41
  export async function startDashboard(options) {
29
42
  const { projectDir, interval } = options;
30
- const cleanup = setupTerminal();
31
- const refresh = createRefreshCallback(projectDir, (s) => process.stdout.write(s));
43
+ const frameWriter = createTerminalFrameWriter();
44
+ const refresh = createRefreshCallback(projectDir, (frame) => {
45
+ frameWriter.write(frame);
46
+ });
32
47
  const watcher = new FileWatcher(refresh, interval);
33
48
  return new Promise((resolve) => {
34
49
  const handleKey = (data) => {
@@ -48,7 +63,7 @@ export async function startDashboard(options) {
48
63
  return;
49
64
  stopped = true;
50
65
  watcher.stop();
51
- cleanup();
66
+ frameWriter.cleanup();
52
67
  process.removeListener("SIGINT", onSignal);
53
68
  process.removeListener("SIGTERM", onSignal);
54
69
  process.stdout.removeListener("resize", onResize);
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/watch/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/watch/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ const HIDE_CURSOR = "\x1B[?25l";
2
+ const SHOW_CURSOR = "\x1B[?25h";
3
+ const CLEAR_LINE = "\x1B[2K";
4
+ const NEXT_LINE = "\x1B[E";
5
+ export function getDashboardTerminalSupport(output = process.stdout, input = process.stdin, env = process.env) {
6
+ if (!output.isTTY || !input.isTTY) {
7
+ return {
8
+ supported: false,
9
+ reason: "Dashboard requires an interactive terminal with cursor support.",
10
+ };
11
+ }
12
+ if (typeof output.columns !== "number" || output.columns < 20) {
13
+ return {
14
+ supported: false,
15
+ reason: "Dashboard requires a terminal with a usable width.",
16
+ };
17
+ }
18
+ if ((env.TERM ?? "").toLowerCase() === "dumb") {
19
+ return {
20
+ supported: false,
21
+ reason: "Dashboard is not supported when TERM=dumb.",
22
+ };
23
+ }
24
+ return { supported: true };
25
+ }
26
+ export function createTerminalFrameWriter(options = {}) {
27
+ const output = options.output ?? process.stdout;
28
+ const input = options.input ?? process.stdin;
29
+ let previousLines = [];
30
+ if (output.isTTY) {
31
+ output.write(HIDE_CURSOR);
32
+ }
33
+ return {
34
+ cleanup() {
35
+ if (output.isTTY) {
36
+ output.write(SHOW_CURSOR);
37
+ }
38
+ if (input.isTTY && input.setRawMode) {
39
+ input.setRawMode(false);
40
+ }
41
+ input.pause();
42
+ },
43
+ write(frame) {
44
+ const nextLines = frame.split("\n");
45
+ if (sameLines(previousLines, nextLines)) {
46
+ return false;
47
+ }
48
+ if (previousLines.length === 0) {
49
+ output.write(`${frame}\n`);
50
+ previousLines = nextLines;
51
+ return true;
52
+ }
53
+ output.write(`\x1B[${String(previousLines.length)}F`);
54
+ const totalLines = Math.max(previousLines.length, nextLines.length);
55
+ for (let index = 0; index < totalLines; index += 1) {
56
+ const nextLine = nextLines[index] ?? "";
57
+ const previousLine = previousLines[index] ?? "";
58
+ if (nextLine !== previousLine) {
59
+ output.write(`${CLEAR_LINE}${nextLine}`);
60
+ }
61
+ output.write(NEXT_LINE);
62
+ }
63
+ const shrinkBy = previousLines.length - nextLines.length;
64
+ if (shrinkBy > 0) {
65
+ output.write(`\x1B[${String(shrinkBy)}F`);
66
+ }
67
+ previousLines = nextLines;
68
+ return true;
69
+ },
70
+ };
71
+ }
72
+ function sameLines(previousLines, nextLines) {
73
+ if (previousLines.length !== nextLines.length) {
74
+ return false;
75
+ }
76
+ for (let index = 0; index < previousLines.length; index += 1) {
77
+ if (previousLines[index] !== nextLines[index]) {
78
+ return false;
79
+ }
80
+ }
81
+ return true;
82
+ }
83
+ //# sourceMappingURL=frame-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-writer.js","sourceRoot":"","sources":["../../src/watch/frame-writer.ts"],"names":[],"mappings":"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"}
@@ -17,16 +17,120 @@ const BOX_CHARS = {
17
17
  const PROGRESS_FILLED = "\u2588";
18
18
  const PROGRESS_EMPTY = "\u2591";
19
19
  // eslint-disable-next-line no-control-regex
20
- const ANSI_PATTERN = /\x1B\[\d+m/g;
20
+ const ANSI_PATTERN = /\x1B\[[0-9;]*m/g;
21
+ // eslint-disable-next-line no-control-regex
22
+ const ANSI_PREFIX_PATTERN = /^\x1B\[[0-9;]*m/;
23
+ // eslint-disable-next-line no-control-regex
24
+ const VT_ESCAPE_PATTERN = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1B\\))/g;
25
+ // eslint-disable-next-line no-control-regex
26
+ const CONTROL_CHAR_PATTERN = /[\x00-\x08\x0B-\x1F\x7F]/g;
27
+ const DISPLAY_SEGMENTER = new Intl.Segmenter(undefined, { granularity: "grapheme" });
28
+ const COMBINING_MARK_PATTERN = /\p{Mark}/u;
29
+ const EMOJI_PATTERN = /\p{Extended_Pictographic}/u;
21
30
  function stripAnsi(str) {
22
31
  return str.replace(ANSI_PATTERN, "");
23
32
  }
33
+ function sanitizeExternalText(str) {
34
+ return str
35
+ .replace(VT_ESCAPE_PATTERN, "")
36
+ .replace(/\r\n?/g, " ")
37
+ .replace(/\n/g, " ")
38
+ .replace(/\t/g, " ")
39
+ .replace(CONTROL_CHAR_PATTERN, "");
40
+ }
41
+ function displayWidth(str) {
42
+ return Array.from(DISPLAY_SEGMENTER.segment(stripAnsi(str))).reduce((width, segment) => {
43
+ return width + graphemeDisplayWidth(segment.segment);
44
+ }, 0);
45
+ }
46
+ function graphemeDisplayWidth(grapheme) {
47
+ let width = 0;
48
+ for (const char of grapheme) {
49
+ const codePoint = char.codePointAt(0);
50
+ if (codePoint === undefined || isZeroWidthChar(char, codePoint)) {
51
+ continue;
52
+ }
53
+ if (EMOJI_PATTERN.test(char) || isWideCodePoint(codePoint)) {
54
+ return 2;
55
+ }
56
+ width = 1;
57
+ }
58
+ return width;
59
+ }
60
+ function isZeroWidthChar(char, codePoint) {
61
+ return (COMBINING_MARK_PATTERN.test(char) ||
62
+ codePoint === 0x200c ||
63
+ codePoint === 0x200d ||
64
+ isVariationSelector(codePoint));
65
+ }
66
+ function isVariationSelector(codePoint) {
67
+ return ((codePoint >= 0xfe00 && codePoint <= 0xfe0f) || (codePoint >= 0xe0100 && codePoint <= 0xe01ef));
68
+ }
69
+ function isWideCodePoint(codePoint) {
70
+ return (codePoint >= 0x1100 &&
71
+ (codePoint <= 0x115f ||
72
+ codePoint === 0x2329 ||
73
+ codePoint === 0x232a ||
74
+ (codePoint >= 0x2e80 && codePoint <= 0x3247 && codePoint !== 0x303f) ||
75
+ (codePoint >= 0x3250 && codePoint <= 0x4dbf) ||
76
+ (codePoint >= 0x4e00 && codePoint <= 0xa4c6) ||
77
+ (codePoint >= 0xa960 && codePoint <= 0xa97c) ||
78
+ (codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
79
+ (codePoint >= 0xf900 && codePoint <= 0xfaff) ||
80
+ (codePoint >= 0xfe10 && codePoint <= 0xfe19) ||
81
+ (codePoint >= 0xfe30 && codePoint <= 0xfe6b) ||
82
+ (codePoint >= 0xff01 && codePoint <= 0xff60) ||
83
+ (codePoint >= 0xffe0 && codePoint <= 0xffe6) ||
84
+ (codePoint >= 0x1f300 && codePoint <= 0x1f64f) ||
85
+ (codePoint >= 0x1f900 && codePoint <= 0x1f9ff) ||
86
+ (codePoint >= 0x20000 && codePoint <= 0x3fffd)));
87
+ }
88
+ function truncateAnsi(str, len) {
89
+ if (len <= 0) {
90
+ return "";
91
+ }
92
+ if (displayWidth(str) <= len) {
93
+ return str;
94
+ }
95
+ let result = "";
96
+ let index = 0;
97
+ let visibleCount = 0;
98
+ let sawAnsi = false;
99
+ outer: while (index < str.length) {
100
+ const ansiMatch = str.slice(index).match(ANSI_PREFIX_PATTERN);
101
+ if (ansiMatch) {
102
+ result += ansiMatch[0];
103
+ index += ansiMatch[0].length;
104
+ sawAnsi = true;
105
+ continue;
106
+ }
107
+ const nextAnsiIndex = str.indexOf("\x1B", index);
108
+ const textChunk = nextAnsiIndex === -1 ? str.slice(index) : str.slice(index, nextAnsiIndex);
109
+ for (const segment of DISPLAY_SEGMENTER.segment(textChunk)) {
110
+ const width = graphemeDisplayWidth(segment.segment);
111
+ if (visibleCount + width > len) {
112
+ break outer;
113
+ }
114
+ result += segment.segment;
115
+ visibleCount += width;
116
+ }
117
+ index += textChunk.length;
118
+ }
119
+ if (sawAnsi) {
120
+ result += "\x1B[0m";
121
+ }
122
+ return result;
123
+ }
24
124
  export function padRight(str, len) {
25
- const visualLen = stripAnsi(str).length;
125
+ if (len <= 0) {
126
+ return "";
127
+ }
128
+ const fitted = truncateAnsi(str, len);
129
+ const visualLen = displayWidth(fitted);
26
130
  if (visualLen >= len) {
27
- return str;
131
+ return fitted;
28
132
  }
29
- return str + " ".repeat(len - visualLen);
133
+ return fitted + " ".repeat(len - visualLen);
30
134
  }
31
135
  export function progressBar(completed, total, width) {
32
136
  if (total <= 0) {
@@ -36,13 +140,12 @@ export function progressBar(completed, total, width) {
36
140
  const filled = Math.round(ratio * width);
37
141
  return chalk.green(PROGRESS_FILLED.repeat(filled)) + PROGRESS_EMPTY.repeat(width - filled);
38
142
  }
39
- export function formatSessionAge(createdAt) {
40
- const now = Date.now();
143
+ export function formatSessionAge(createdAt, referenceTime = Date.now()) {
41
144
  const start = new Date(createdAt).getTime();
42
145
  if (Number.isNaN(start)) {
43
146
  return "0m 0s";
44
147
  }
45
- const diffSeconds = Math.max(0, Math.floor((now - start) / 1000));
148
+ const diffSeconds = Math.max(0, Math.floor((referenceTime - start) / 1000));
46
149
  const hours = Math.floor(diffSeconds / 3600);
47
150
  const minutes = Math.floor((diffSeconds % 3600) / 60);
48
151
  const seconds = diffSeconds % 60;
@@ -78,31 +181,33 @@ function formatTime(date) {
78
181
  return `${h}:${m}:${s}`;
79
182
  }
80
183
  function extractTime(timestamp) {
81
- const timePart = timestamp.split(" ")[1];
82
- return timePart ?? formatTime(new Date(timestamp));
184
+ const safeTimestamp = sanitizeExternalText(timestamp);
185
+ const timePart = safeTimestamp.split(" ")[1];
186
+ return timePart ?? formatTime(new Date(safeTimestamp));
83
187
  }
84
188
  export function box(title, lines, cols) {
85
- const innerWidth = cols - 2;
86
- const titleStr = title ? `\u2500 ${title} ` : "";
189
+ const innerWidth = Math.max(0, cols - 2);
190
+ const titleStr = title ? truncateAnsi(`\u2500 ${title} `, innerWidth) : "";
87
191
  const topBorder = BOX_CHARS.topLeft +
88
192
  titleStr +
89
- BOX_CHARS.horizontal.repeat(Math.max(0, innerWidth - titleStr.length)) +
193
+ BOX_CHARS.horizontal.repeat(Math.max(0, innerWidth - displayWidth(titleStr))) +
90
194
  BOX_CHARS.topRight;
91
195
  const bottomBorder = BOX_CHARS.bottomLeft + BOX_CHARS.horizontal.repeat(innerWidth) + BOX_CHARS.bottomRight;
92
- const contentLines = lines.map((line) => BOX_CHARS.vertical + " " + padRight(line, innerWidth - 1) + BOX_CHARS.vertical);
196
+ const contentLines = lines.map((line) => BOX_CHARS.vertical + " " + padRight(line, Math.max(0, innerWidth - 1)) + BOX_CHARS.vertical);
93
197
  return [topBorder, ...contentLines, bottomBorder].join("\n");
94
198
  }
95
199
  export function renderHeader(cols) {
96
- const innerWidth = cols - 2;
97
- const title = "RALPH MONITOR";
98
- const padding = Math.max(0, Math.floor((innerWidth - title.length) / 2));
99
- const centeredTitle = " ".repeat(padding) + title + " ".repeat(innerWidth - padding - title.length);
200
+ const innerWidth = Math.max(0, cols - 2);
201
+ const title = truncateAnsi("RALPH MONITOR", innerWidth);
202
+ const titleLength = displayWidth(title);
203
+ const padding = Math.max(0, Math.floor((innerWidth - titleLength) / 2));
204
+ const centeredTitle = " ".repeat(padding) + title + " ".repeat(Math.max(0, innerWidth - padding - titleLength));
100
205
  const topBorder = BOX_CHARS.headerLeft + BOX_CHARS.headerHoriz.repeat(innerWidth) + BOX_CHARS.headerRight;
101
206
  const titleLine = BOX_CHARS.headerVert + chalk.bold(centeredTitle) + BOX_CHARS.headerVert;
102
207
  const bottomBorder = BOX_CHARS.headerBottom + BOX_CHARS.headerHoriz.repeat(innerWidth) + BOX_CHARS.headerBottomRight;
103
208
  return [topBorder, titleLine, bottomBorder].join("\n");
104
209
  }
105
- export function renderLoopPanel(loop, execution, session, cols) {
210
+ export function renderLoopPanel(loop, execution, session, cols, referenceTime = Date.now()) {
106
211
  if (loop === null) {
107
212
  return box("Loop Status", ["Status: waiting for data"], cols);
108
213
  }
@@ -110,29 +215,29 @@ export function renderLoopPanel(loop, execution, session, cols) {
110
215
  ? Math.round((loop.callsMadeThisHour / loop.maxCallsPerHour) * 100)
111
216
  : 0;
112
217
  const loopStr = `Loop: #${String(loop.loopCount)}`;
113
- const statusStr = `Status: ${formatStatus(loop.status)}`;
218
+ const statusStr = `Status: ${formatStatus(sanitizeExternalText(loop.status))}`;
114
219
  const apiStr = `API: ${String(loop.callsMadeThisHour)}/${String(loop.maxCallsPerHour)} (${String(apiPercent)}%)`;
115
220
  const line1 = `${padRight(loopStr, 17)}${padRight(statusStr, 21)}${apiStr}`;
116
- const sessionStr = session !== null ? `Session: ${formatSessionAge(session.createdAt)}` : "";
221
+ const sessionStr = session !== null ? `Session: ${formatSessionAge(session.createdAt, referenceTime)}` : "";
117
222
  const innerWidth = cols - 4;
118
223
  let line2;
119
224
  if (execution !== null) {
120
225
  const elapsedStr = formatElapsed(execution.elapsedSeconds);
121
- const executingStr = `${execution.indicator} executing (${elapsedStr})`;
122
- const sessionPad = Math.max(0, innerWidth - executingStr.length - sessionStr.length);
226
+ const safeIndicator = sanitizeExternalText(execution.indicator);
227
+ const executingStr = `${safeIndicator} executing (${elapsedStr})`;
228
+ const sessionPad = Math.max(0, innerWidth - displayWidth(executingStr) - displayWidth(sessionStr));
123
229
  line2 = `${executingStr}${" ".repeat(sessionPad)}${sessionStr}`;
124
230
  }
125
231
  else {
126
- const actionStr = `Action: ${loop.lastAction}`;
127
- const sessionPad = Math.max(0, innerWidth - actionStr.length - sessionStr.length);
232
+ const actionStr = `Action: ${sanitizeExternalText(loop.lastAction)}`;
233
+ const sessionPad = Math.max(0, innerWidth - displayWidth(actionStr) - displayWidth(sessionStr));
128
234
  line2 = `${actionStr}${" ".repeat(sessionPad)}${sessionStr}`;
129
235
  }
130
236
  const lines = [line1, line2];
131
237
  if (execution !== null && execution.lastOutput.length > 0) {
238
+ const safeOutput = sanitizeExternalText(execution.lastOutput);
132
239
  const maxOutputLen = Math.max(0, innerWidth - 2);
133
- const truncated = execution.lastOutput.length > maxOutputLen
134
- ? execution.lastOutput.slice(0, maxOutputLen)
135
- : execution.lastOutput;
240
+ const truncated = truncateAnsi(safeOutput, maxOutputLen);
136
241
  lines.push(chalk.dim(` ${truncated}`));
137
242
  }
138
243
  return box("Loop Status", lines, cols);
@@ -143,12 +248,12 @@ export function renderCircuitBreakerPanel(cb, cols) {
143
248
  return box("Circuit Breaker", ["N/A"], halfCols);
144
249
  }
145
250
  const lines = [
146
- `State: ${formatCBState(cb.state)}`,
251
+ `State: ${formatCBState(sanitizeExternalText(cb.state))}`,
147
252
  `No-progress: ${String(cb.consecutiveNoProgress)}`,
148
253
  `Opens: ${String(cb.totalOpens)}`,
149
254
  ];
150
255
  if (cb.state === "OPEN" && cb.reason) {
151
- lines.push(`Reason: ${cb.reason}`);
256
+ lines.push(`Reason: ${sanitizeExternalText(cb.reason)}`);
152
257
  }
153
258
  return box("Circuit Breaker", lines, halfCols);
154
259
  }
@@ -166,7 +271,7 @@ export function renderStoriesPanel(stories, cols) {
166
271
  `[${bar}]`,
167
272
  ];
168
273
  if (stories.nextStory !== null) {
169
- lines.push(`Next: ${stories.nextStory}`);
274
+ lines.push(`Next: ${sanitizeExternalText(stories.nextStory)}`);
170
275
  }
171
276
  return box("Stories", lines, halfCols);
172
277
  }
@@ -188,17 +293,23 @@ export function renderAnalysisPanel(analysis, cols) {
188
293
  return box("Last Analysis", ["N/A"], cols);
189
294
  }
190
295
  const yesNo = (v) => (v ? "yes" : "no");
191
- const line1 = [
192
- `Files: ${String(analysis.filesModified)}`,
193
- `Confidence: ${String(analysis.confidenceScore)}%`,
194
- `Test-only: ${yesNo(analysis.isTestOnly)}`,
195
- `Stuck: ${yesNo(analysis.isStuck)}`,
196
- ].join(" ");
197
- const line2 = [
198
- `Exit signal: ${yesNo(analysis.exitSignal)}`,
199
- `Permission denials: ${String(analysis.permissionDenialCount)}`,
200
- ].join(" ");
201
- return box("Last Analysis", [line1, line2], cols);
296
+ const lines = [
297
+ [
298
+ `Files: ${String(analysis.filesModified)}`,
299
+ `Confidence: ${String(analysis.confidenceScore)}%`,
300
+ ].join(" "),
301
+ [`Test-only: ${yesNo(analysis.isTestOnly)}`, `Stuck: ${yesNo(analysis.isStuck)}`].join(" "),
302
+ [
303
+ `Exit signal: ${yesNo(analysis.exitSignal)}`,
304
+ `Permission denials: ${String(analysis.permissionDenialCount)}`,
305
+ ].join(" "),
306
+ [
307
+ `Claimed tasks: ${String(analysis.tasksCompletedThisLoop)}`,
308
+ `Checkbox delta: ${String(analysis.fixPlanCompletedDelta)}`,
309
+ ].join(" "),
310
+ `Progress mismatch: ${yesNo(analysis.hasProgressTrackingMismatch)}`,
311
+ ];
312
+ return box("Last Analysis", lines, cols);
202
313
  }
203
314
  export function renderLogsPanel(logs, cols) {
204
315
  if (logs.length === 0) {
@@ -207,10 +318,11 @@ export function renderLogsPanel(logs, cols) {
207
318
  const innerWidth = cols - 4;
208
319
  const lines = logs.map((entry) => {
209
320
  const time = extractTime(entry.timestamp);
210
- const level = padRight(entry.level, 7);
321
+ const level = padRight(sanitizeExternalText(entry.level), 7);
211
322
  const prefix = `[${time}] ${level}`;
212
- const maxMsg = Math.max(0, innerWidth - prefix.length - 1);
213
- const msg = entry.message.length > maxMsg ? entry.message.slice(0, maxMsg) : entry.message;
323
+ const maxMsg = Math.max(0, innerWidth - displayWidth(prefix) - 1);
324
+ const safeMessage = sanitizeExternalText(entry.message);
325
+ const msg = truncateAnsi(safeMessage, maxMsg);
214
326
  return `${chalk.dim(`[${time}]`)} ${level} ${msg}`;
215
327
  });
216
328
  return box("Recent Activity", lines, cols);
@@ -221,16 +333,23 @@ export function renderLiveLogPanel(liveLog, cols) {
221
333
  }
222
334
  const innerWidth = cols - 4;
223
335
  const lines = liveLog.map((line) => {
224
- const trimmed = line.length > innerWidth ? line.slice(0, innerWidth) : line;
336
+ const safeLine = sanitizeExternalText(line);
337
+ const trimmed = truncateAnsi(safeLine, innerWidth);
225
338
  return chalk.dim(trimmed);
226
339
  });
227
340
  return box("Live Output", lines, cols);
228
341
  }
342
+ export function renderFooterLine(leftText, rightText, cols) {
343
+ const availableWidth = Math.max(0, cols - 1);
344
+ const minimumWidth = displayWidth(leftText) + 1 + displayWidth(rightText);
345
+ if (availableWidth < minimumWidth) {
346
+ return ` ${truncateAnsi(`${leftText} ${rightText}`, availableWidth)}`;
347
+ }
348
+ const gap = availableWidth - displayWidth(leftText) - displayWidth(rightText);
349
+ return ` ${chalk.dim(leftText)}${" ".repeat(gap)}${chalk.dim(rightText)}`;
350
+ }
229
351
  export function renderFooter(lastUpdated, cols) {
230
- const left = chalk.dim("q quit");
231
- const right = `Updated: ${formatTime(lastUpdated)}`;
232
- const gap = Math.max(1, cols - "q quit".length - right.length);
233
- return ` ${left}${" ".repeat(gap - 1)}${chalk.dim(right)}`;
352
+ return renderFooterLine("q quit", `Updated: ${formatTime(lastUpdated)}`, cols);
234
353
  }
235
354
  function hasAnyData(state) {
236
355
  return (state.loop !== null ||
@@ -242,20 +361,22 @@ function hasAnyData(state) {
242
361
  state.recentLogs.length > 0 ||
243
362
  state.liveLog.length > 0);
244
363
  }
245
- export function renderDashboard(state, cols) {
364
+ export function renderDashboard(state, cols, options = {}) {
246
365
  const width = cols ?? process.stdout.columns ?? 80;
366
+ const referenceTime = state.lastUpdated.getTime();
367
+ const footerRenderer = options.footerRenderer ?? renderFooter;
247
368
  if (!hasAnyData(state)) {
248
369
  const lines = [];
249
370
  lines.push(renderHeader(width));
250
371
  lines.push("");
251
372
  lines.push(chalk.dim(padRight(" Waiting for Ralph to start...", width)));
252
373
  lines.push("");
253
- lines.push(renderFooter(state.lastUpdated, width));
374
+ lines.push(footerRenderer(state.lastUpdated, width));
254
375
  return lines.join("\n");
255
376
  }
256
377
  const sections = [];
257
378
  sections.push(renderHeader(width));
258
- sections.push(renderLoopPanel(state.loop, state.execution, state.session, width));
379
+ sections.push(renderLoopPanel(state.loop, state.execution, state.session, width, referenceTime));
259
380
  const leftPanel = renderCircuitBreakerPanel(state.circuitBreaker, width);
260
381
  const rightPanel = renderStoriesPanel(state.stories, width);
261
382
  sections.push(renderSideBySide(leftPanel, rightPanel, width));
@@ -264,7 +385,11 @@ export function renderDashboard(state, cols) {
264
385
  sections.push(renderLiveLogPanel(state.liveLog, width));
265
386
  }
266
387
  sections.push(renderLogsPanel(state.recentLogs, width));
267
- sections.push(renderFooter(state.lastUpdated, width));
268
- return sections.join("\n");
388
+ sections.push(footerRenderer(state.lastUpdated, width));
389
+ return sections
390
+ .join("\n")
391
+ .split("\n")
392
+ .map((line) => truncateAnsi(line, width))
393
+ .join("\n");
269
394
  }
270
395
  //# sourceMappingURL=renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"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"}