drt-method 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/AGENTS.md +45 -0
  2. package/GETTING-STARTED.md +269 -0
  3. package/README.md +233 -0
  4. package/drt-method-1.0.0.tgz +0 -0
  5. package/drt-modules.yaml +1 -0
  6. package/package.json +51 -0
  7. package/scripts/install-from-github.ps1 +22 -0
  8. package/scripts/install-from-github.sh +17 -0
  9. package/src/core-skills/drt-advanced-elicitation/SKILL.md +142 -0
  10. package/src/core-skills/drt-advanced-elicitation/methods.csv +72 -0
  11. package/src/core-skills/drt-brainstorming/SKILL.md +80 -0
  12. package/src/core-skills/drt-brainstorming/assets/brain-icons.json +166 -0
  13. package/src/core-skills/drt-brainstorming/assets/brain-methods.csv +109 -0
  14. package/src/core-skills/drt-brainstorming/assets/brain-selector.html +326 -0
  15. package/src/core-skills/drt-brainstorming/customize.toml +84 -0
  16. package/src/core-skills/drt-brainstorming/references/converge.md +24 -0
  17. package/src/core-skills/drt-brainstorming/references/finalize.md +26 -0
  18. package/src/core-skills/drt-brainstorming/references/headless.md +54 -0
  19. package/src/core-skills/drt-brainstorming/references/in-chat-techniques.md +18 -0
  20. package/src/core-skills/drt-brainstorming/references/mode-autonomous.md +10 -0
  21. package/src/core-skills/drt-brainstorming/references/mode-facilitator.md +11 -0
  22. package/src/core-skills/drt-brainstorming/references/mode-partner.md +16 -0
  23. package/src/core-skills/drt-brainstorming/references/resume.md +5 -0
  24. package/src/core-skills/drt-brainstorming/scripts/brain.py +740 -0
  25. package/src/core-skills/drt-customize/SKILL.md +111 -0
  26. package/src/core-skills/drt-customize/scripts/list_customizable_skills.py +231 -0
  27. package/src/core-skills/drt-editorial-review-prose/SKILL.md +86 -0
  28. package/src/core-skills/drt-editorial-review-structure/SKILL.md +179 -0
  29. package/src/core-skills/drt-forge-idea/SKILL.md +107 -0
  30. package/src/core-skills/drt-forge-idea/customize.toml +42 -0
  31. package/src/core-skills/drt-forge-idea/scripts/resolve_personas.py +270 -0
  32. package/src/core-skills/drt-help/SKILL.md +75 -0
  33. package/src/core-skills/drt-index-docs/SKILL.md +66 -0
  34. package/src/core-skills/drt-party-mode/SKILL.md +60 -0
  35. package/src/core-skills/drt-party-mode/customize.toml +211 -0
  36. package/src/core-skills/drt-party-mode/references/create-party.md +70 -0
  37. package/src/core-skills/drt-party-mode/references/mode-agent-team.md +13 -0
  38. package/src/core-skills/drt-party-mode/references/mode-auto.md +13 -0
  39. package/src/core-skills/drt-party-mode/references/mode-subagent.md +31 -0
  40. package/src/core-skills/drt-party-mode/references/party-memory.md +51 -0
  41. package/src/core-skills/drt-party-mode/scripts/resolve_party.py +272 -0
  42. package/src/core-skills/drt-review-adversarial-general/SKILL.md +37 -0
  43. package/src/core-skills/drt-review-edge-case-hunter/SKILL.md +73 -0
  44. package/src/core-skills/drt-review-edge-case-hunter/references/deletion-check.md +14 -0
  45. package/src/core-skills/drt-review-verification-gap/SKILL.md +106 -0
  46. package/src/core-skills/drt-shard-doc/SKILL.md +105 -0
  47. package/src/core-skills/drt-spec/SKILL.md +160 -0
  48. package/src/core-skills/drt-spec/assets/headless-schemas.md +33 -0
  49. package/src/core-skills/drt-spec/assets/spec-template.md +49 -0
  50. package/src/core-skills/drt-spec/assets/stories-schema.md +44 -0
  51. package/src/core-skills/drt-spec/customize.toml +53 -0
  52. package/src/core-skills/module-help.csv +14 -0
  53. package/src/core-skills/module.yaml +33 -0
  54. package/src/drt-skills/1-analysis/drt-agent-analyst/SKILL.md +76 -0
  55. package/src/drt-skills/1-analysis/drt-agent-analyst/customize.toml +90 -0
  56. package/src/drt-skills/1-analysis/drt-agent-tech-writer/SKILL.md +76 -0
  57. package/src/drt-skills/1-analysis/drt-agent-tech-writer/customize.toml +81 -0
  58. package/src/drt-skills/1-analysis/drt-agent-tech-writer/explain-concept.md +20 -0
  59. package/src/drt-skills/1-analysis/drt-agent-tech-writer/mermaid-gen.md +20 -0
  60. package/src/drt-skills/1-analysis/drt-agent-tech-writer/validate-doc.md +19 -0
  61. package/src/drt-skills/1-analysis/drt-agent-tech-writer/write-document.md +20 -0
  62. package/src/drt-skills/1-analysis/drt-document-project/SKILL.md +62 -0
  63. package/src/drt-skills/1-analysis/drt-document-project/checklist.md +245 -0
  64. package/src/drt-skills/1-analysis/drt-document-project/customize.toml +41 -0
  65. package/src/drt-skills/1-analysis/drt-document-project/documentation-requirements.csv +12 -0
  66. package/src/drt-skills/1-analysis/drt-document-project/instructions.md +128 -0
  67. package/src/drt-skills/1-analysis/drt-document-project/templates/deep-dive-template.md +345 -0
  68. package/src/drt-skills/1-analysis/drt-document-project/templates/index-template.md +169 -0
  69. package/src/drt-skills/1-analysis/drt-document-project/templates/project-overview-template.md +103 -0
  70. package/src/drt-skills/1-analysis/drt-document-project/templates/project-scan-report-schema.json +160 -0
  71. package/src/drt-skills/1-analysis/drt-document-project/templates/source-tree-template.md +135 -0
  72. package/src/drt-skills/1-analysis/drt-document-project/workflows/deep-dive-instructions.md +300 -0
  73. package/src/drt-skills/1-analysis/drt-document-project/workflows/deep-dive-workflow.md +34 -0
  74. package/src/drt-skills/1-analysis/drt-document-project/workflows/full-scan-instructions.md +1111 -0
  75. package/src/drt-skills/1-analysis/drt-document-project/workflows/full-scan-workflow.md +34 -0
  76. package/src/drt-skills/1-analysis/drt-prfaq/SKILL.md +135 -0
  77. package/src/drt-skills/1-analysis/drt-prfaq/agents/artifact-analyzer.md +60 -0
  78. package/src/drt-skills/1-analysis/drt-prfaq/agents/web-researcher.md +49 -0
  79. package/src/drt-skills/1-analysis/drt-prfaq/assets/prfaq-template.md +62 -0
  80. package/src/drt-skills/1-analysis/drt-prfaq/bmad-manifest.json +16 -0
  81. package/src/drt-skills/1-analysis/drt-prfaq/customize.toml +41 -0
  82. package/src/drt-skills/1-analysis/drt-prfaq/references/customer-faq.md +55 -0
  83. package/src/drt-skills/1-analysis/drt-prfaq/references/internal-faq.md +51 -0
  84. package/src/drt-skills/1-analysis/drt-prfaq/references/press-release.md +60 -0
  85. package/src/drt-skills/1-analysis/drt-prfaq/references/verdict.md +83 -0
  86. package/src/drt-skills/1-analysis/drt-product-brief/SKILL.md +91 -0
  87. package/src/drt-skills/1-analysis/drt-product-brief/assets/brief-template.md +41 -0
  88. package/src/drt-skills/1-analysis/drt-product-brief/customize.toml +99 -0
  89. package/src/drt-skills/1-analysis/research/drt-domain-research/SKILL.md +96 -0
  90. package/src/drt-skills/1-analysis/research/drt-domain-research/customize.toml +41 -0
  91. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-01-init.md +137 -0
  92. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
  93. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
  94. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
  95. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-05-technical-trends.md +234 -0
  96. package/src/drt-skills/1-analysis/research/drt-domain-research/domain-steps/step-06-research-synthesis.md +450 -0
  97. package/src/drt-skills/1-analysis/research/drt-domain-research/research.template.md +29 -0
  98. package/src/drt-skills/1-analysis/research/drt-market-research/SKILL.md +96 -0
  99. package/src/drt-skills/1-analysis/research/drt-market-research/customize.toml +41 -0
  100. package/src/drt-skills/1-analysis/research/drt-market-research/research.template.md +29 -0
  101. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-01-init.md +184 -0
  102. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-02-customer-behavior.md +239 -0
  103. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-03-customer-pain-points.md +251 -0
  104. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-04-customer-decisions.md +261 -0
  105. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-05-competitive-analysis.md +173 -0
  106. package/src/drt-skills/1-analysis/research/drt-market-research/steps/step-06-research-completion.md +484 -0
  107. package/src/drt-skills/1-analysis/research/drt-technical-research/SKILL.md +96 -0
  108. package/src/drt-skills/1-analysis/research/drt-technical-research/customize.toml +41 -0
  109. package/src/drt-skills/1-analysis/research/drt-technical-research/research.template.md +29 -0
  110. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-01-init.md +137 -0
  111. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-02-technical-overview.md +239 -0
  112. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
  113. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
  114. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-05-implementation-research.md +233 -0
  115. package/src/drt-skills/1-analysis/research/drt-technical-research/technical-steps/step-06-research-synthesis.md +493 -0
  116. package/src/drt-skills/2-plan-workflows/drt-agent-pm/SKILL.md +76 -0
  117. package/src/drt-skills/2-plan-workflows/drt-agent-pm/customize.toml +75 -0
  118. package/src/drt-skills/2-plan-workflows/drt-agent-ux-designer/SKILL.md +76 -0
  119. package/src/drt-skills/2-plan-workflows/drt-agent-ux-designer/customize.toml +60 -0
  120. package/src/drt-skills/2-plan-workflows/drt-create-prd/SKILL.md +30 -0
  121. package/src/drt-skills/2-plan-workflows/drt-create-prd/customize.toml +41 -0
  122. package/src/drt-skills/2-plan-workflows/drt-edit-prd/SKILL.md +30 -0
  123. package/src/drt-skills/2-plan-workflows/drt-edit-prd/customize.toml +42 -0
  124. package/src/drt-skills/2-plan-workflows/drt-prd/SKILL.md +92 -0
  125. package/src/drt-skills/2-plan-workflows/drt-prd/assets/headless-schemas.md +76 -0
  126. package/src/drt-skills/2-plan-workflows/drt-prd/assets/prd-template.md +165 -0
  127. package/src/drt-skills/2-plan-workflows/drt-prd/assets/prd-validation-checklist.md +135 -0
  128. package/src/drt-skills/2-plan-workflows/drt-prd/assets/validation-report-template.html +325 -0
  129. package/src/drt-skills/2-plan-workflows/drt-prd/customize.toml +147 -0
  130. package/src/drt-skills/2-plan-workflows/drt-prd/references/headless.md +39 -0
  131. package/src/drt-skills/2-plan-workflows/drt-prd/references/validate.md +97 -0
  132. package/src/drt-skills/2-plan-workflows/drt-ux/SKILL.md +90 -0
  133. package/src/drt-skills/2-plan-workflows/drt-ux/assets/color-themes.md +9 -0
  134. package/src/drt-skills/2-plan-workflows/drt-ux/assets/design-directions.md +9 -0
  135. package/src/drt-skills/2-plan-workflows/drt-ux/assets/design-example-editorial.md +158 -0
  136. package/src/drt-skills/2-plan-workflows/drt-ux/assets/design-example-mobile.md +93 -0
  137. package/src/drt-skills/2-plan-workflows/drt-ux/assets/design-example-shadcn.md +109 -0
  138. package/src/drt-skills/2-plan-workflows/drt-ux/assets/excalidraw-wireframe.md +19 -0
  139. package/src/drt-skills/2-plan-workflows/drt-ux/assets/experience-example-mobile.md +112 -0
  140. package/src/drt-skills/2-plan-workflows/drt-ux/assets/experience-example-shadcn.md +133 -0
  141. package/src/drt-skills/2-plan-workflows/drt-ux/assets/headless-schemas.md +84 -0
  142. package/src/drt-skills/2-plan-workflows/drt-ux/assets/key-screens.md +29 -0
  143. package/src/drt-skills/2-plan-workflows/drt-ux/assets/validation-report-template.html +319 -0
  144. package/src/drt-skills/2-plan-workflows/drt-ux/customize.toml +100 -0
  145. package/src/drt-skills/2-plan-workflows/drt-ux/references/creative-tools.md +19 -0
  146. package/src/drt-skills/2-plan-workflows/drt-ux/references/design-md-spec.md +50 -0
  147. package/src/drt-skills/2-plan-workflows/drt-ux/references/headless.md +37 -0
  148. package/src/drt-skills/2-plan-workflows/drt-ux/references/validate.md +115 -0
  149. package/src/drt-skills/2-plan-workflows/drt-validate-prd/SKILL.md +30 -0
  150. package/src/drt-skills/2-plan-workflows/drt-validate-prd/customize.toml +42 -0
  151. package/src/drt-skills/3-solutioning/drt-agent-architect/SKILL.md +76 -0
  152. package/src/drt-skills/3-solutioning/drt-agent-architect/customize.toml +65 -0
  153. package/src/drt-skills/3-solutioning/drt-architecture/SKILL.md +85 -0
  154. package/src/drt-skills/3-solutioning/drt-architecture/assets/spine-template.md +79 -0
  155. package/src/drt-skills/3-solutioning/drt-architecture/customize.toml +100 -0
  156. package/src/drt-skills/3-solutioning/drt-architecture/references/headless.md +26 -0
  157. package/src/drt-skills/3-solutioning/drt-architecture/references/reviewer-gate.md +13 -0
  158. package/src/drt-skills/3-solutioning/drt-architecture/scripts/lint_spine.py +257 -0
  159. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/SKILL.md +91 -0
  160. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/customize.toml +41 -0
  161. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
  162. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
  163. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
  164. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
  165. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
  166. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/steps/step-06-final-assessment.md +132 -0
  167. package/src/drt-skills/3-solutioning/drt-check-implementation-readiness/templates/readiness-report-template.md +4 -0
  168. package/src/drt-skills/3-solutioning/drt-create-architecture/SKILL.md +30 -0
  169. package/src/drt-skills/3-solutioning/drt-create-architecture/customize.toml +41 -0
  170. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/SKILL.md +93 -0
  171. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/customize.toml +41 -0
  172. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/steps/step-01-validate-prerequisites.md +263 -0
  173. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/steps/step-02-design-epics.md +242 -0
  174. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
  175. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/steps/step-04-final-validation.md +143 -0
  176. package/src/drt-skills/3-solutioning/drt-create-epics-and-stories/templates/epics-template.md +61 -0
  177. package/src/drt-skills/3-solutioning/drt-generate-project-context/SKILL.md +81 -0
  178. package/src/drt-skills/3-solutioning/drt-generate-project-context/customize.toml +41 -0
  179. package/src/drt-skills/3-solutioning/drt-generate-project-context/project-context-template.md +21 -0
  180. package/src/drt-skills/3-solutioning/drt-generate-project-context/steps/step-01-discover.md +186 -0
  181. package/src/drt-skills/3-solutioning/drt-generate-project-context/steps/step-02-generate.md +321 -0
  182. package/src/drt-skills/3-solutioning/drt-generate-project-context/steps/step-03-complete.md +284 -0
  183. package/src/drt-skills/4-implementation/drt-agent-dev/SKILL.md +76 -0
  184. package/src/drt-skills/4-implementation/drt-agent-dev/customize.toml +95 -0
  185. package/src/drt-skills/4-implementation/drt-checkpoint-preview/SKILL.md +68 -0
  186. package/src/drt-skills/4-implementation/drt-checkpoint-preview/customize.toml +41 -0
  187. package/src/drt-skills/4-implementation/drt-checkpoint-preview/generate-trail.md +38 -0
  188. package/src/drt-skills/4-implementation/drt-checkpoint-preview/step-01-orientation.md +105 -0
  189. package/src/drt-skills/4-implementation/drt-checkpoint-preview/step-02-walkthrough.md +89 -0
  190. package/src/drt-skills/4-implementation/drt-checkpoint-preview/step-03-detail-pass.md +106 -0
  191. package/src/drt-skills/4-implementation/drt-checkpoint-preview/step-04-testing.md +74 -0
  192. package/src/drt-skills/4-implementation/drt-checkpoint-preview/step-05-wrapup.md +30 -0
  193. package/src/drt-skills/4-implementation/drt-code-review/SKILL.md +90 -0
  194. package/src/drt-skills/4-implementation/drt-code-review/customize.toml +93 -0
  195. package/src/drt-skills/4-implementation/drt-code-review/steps/step-01-gather-context.md +84 -0
  196. package/src/drt-skills/4-implementation/drt-code-review/steps/step-02-review.md +32 -0
  197. package/src/drt-skills/4-implementation/drt-code-review/steps/step-03-triage.md +50 -0
  198. package/src/drt-skills/4-implementation/drt-code-review/steps/step-04-present.md +132 -0
  199. package/src/drt-skills/4-implementation/drt-correct-course/SKILL.md +301 -0
  200. package/src/drt-skills/4-implementation/drt-correct-course/checklist.md +288 -0
  201. package/src/drt-skills/4-implementation/drt-correct-course/customize.toml +41 -0
  202. package/src/drt-skills/4-implementation/drt-create-story/SKILL.md +432 -0
  203. package/src/drt-skills/4-implementation/drt-create-story/checklist.md +357 -0
  204. package/src/drt-skills/4-implementation/drt-create-story/customize.toml +41 -0
  205. package/src/drt-skills/4-implementation/drt-create-story/discover-inputs.md +88 -0
  206. package/src/drt-skills/4-implementation/drt-create-story/template.md +49 -0
  207. package/src/drt-skills/4-implementation/drt-dev-auto/SKILL.md +123 -0
  208. package/src/drt-skills/4-implementation/drt-dev-auto/compile-epic-context.md +62 -0
  209. package/src/drt-skills/4-implementation/drt-dev-auto/customize.toml +108 -0
  210. package/src/drt-skills/4-implementation/drt-dev-auto/spec-template.md +98 -0
  211. package/src/drt-skills/4-implementation/drt-dev-auto/step-01-clarify-and-route.md +84 -0
  212. package/src/drt-skills/4-implementation/drt-dev-auto/step-02-plan.md +31 -0
  213. package/src/drt-skills/4-implementation/drt-dev-auto/step-03-implement.md +42 -0
  214. package/src/drt-skills/4-implementation/drt-dev-auto/step-04-review.md +95 -0
  215. package/src/drt-skills/4-implementation/drt-dev-story/SKILL.md +500 -0
  216. package/src/drt-skills/4-implementation/drt-dev-story/checklist.md +80 -0
  217. package/src/drt-skills/4-implementation/drt-dev-story/customize.toml +41 -0
  218. package/src/drt-skills/4-implementation/drt-implement-task/SKILL.md +101 -0
  219. package/src/drt-skills/4-implementation/drt-implement-task/assets/task-spec-template.md +60 -0
  220. package/src/drt-skills/4-implementation/drt-implement-task/customize.toml +17 -0
  221. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-01-gather-intent.md +42 -0
  222. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-02-plan-and-approve.md +43 -0
  223. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-03-confirm-dependencies.md +38 -0
  224. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-04-implement.md +42 -0
  225. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-05-qc-test.md +31 -0
  226. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-06-quality-review.md +30 -0
  227. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-07-fix-findings.md +33 -0
  228. package/src/drt-skills/4-implementation/drt-implement-task/steps/step-08-complete.md +35 -0
  229. package/src/drt-skills/4-implementation/drt-qa-generate-e2e-tests/SKILL.md +176 -0
  230. package/src/drt-skills/4-implementation/drt-qa-generate-e2e-tests/checklist.md +33 -0
  231. package/src/drt-skills/4-implementation/drt-qa-generate-e2e-tests/customize.toml +41 -0
  232. package/src/drt-skills/4-implementation/drt-quick-dev/SKILL.md +13 -0
  233. package/src/drt-skills/4-implementation/drt-quick-dev/compile-epic-context.md +62 -0
  234. package/src/drt-skills/4-implementation/drt-quick-dev/customize.toml +83 -0
  235. package/src/drt-skills/4-implementation/drt-quick-dev/render.js +206 -0
  236. package/src/drt-skills/4-implementation/drt-quick-dev/spec-template.md +89 -0
  237. package/src/drt-skills/4-implementation/drt-quick-dev/step-01-clarify-and-route.md +103 -0
  238. package/src/drt-skills/4-implementation/drt-quick-dev/step-02-plan.md +47 -0
  239. package/src/drt-skills/4-implementation/drt-quick-dev/step-03-implement.md +45 -0
  240. package/src/drt-skills/4-implementation/drt-quick-dev/step-04-review.md +55 -0
  241. package/src/drt-skills/4-implementation/drt-quick-dev/step-05-present.md +78 -0
  242. package/src/drt-skills/4-implementation/drt-quick-dev/step-oneshot.md +78 -0
  243. package/src/drt-skills/4-implementation/drt-quick-dev/sync-sprint-status.md +19 -0
  244. package/src/drt-skills/4-implementation/drt-quick-dev/workflow.md +85 -0
  245. package/src/drt-skills/4-implementation/drt-retrospective/SKILL.md +1527 -0
  246. package/src/drt-skills/4-implementation/drt-retrospective/customize.toml +41 -0
  247. package/src/drt-skills/4-implementation/drt-sprint-planning/SKILL.md +319 -0
  248. package/src/drt-skills/4-implementation/drt-sprint-planning/checklist.md +34 -0
  249. package/src/drt-skills/4-implementation/drt-sprint-planning/customize.toml +41 -0
  250. package/src/drt-skills/4-implementation/drt-sprint-planning/sprint-status-template.yaml +69 -0
  251. package/src/drt-skills/4-implementation/drt-sprint-status/SKILL.md +311 -0
  252. package/src/drt-skills/4-implementation/drt-sprint-status/customize.toml +41 -0
  253. package/src/drt-skills/module-help.csv +32 -0
  254. package/src/drt-skills/module.yaml +95 -0
  255. package/src/scripts/lib/load-toml.js +43 -0
  256. package/src/scripts/lib/merge-utils.js +89 -0
  257. package/src/scripts/memlog.js +184 -0
  258. package/src/scripts/package.json +7 -0
  259. package/src/scripts/resolve-config.js +56 -0
  260. package/src/scripts/resolve-customization.js +77 -0
  261. package/tools/installer/cli-utils.js +53 -0
  262. package/tools/installer/commands/install.js +149 -0
  263. package/tools/installer/commands/status.js +65 -0
  264. package/tools/installer/commands/uninstall.js +167 -0
  265. package/tools/installer/core/config.js +73 -0
  266. package/tools/installer/core/existing-install.js +121 -0
  267. package/tools/installer/core/install-paths.js +132 -0
  268. package/tools/installer/core/installer.js +1762 -0
  269. package/tools/installer/core/legacy-warnings.js +151 -0
  270. package/tools/installer/core/manifest-generator.js +859 -0
  271. package/tools/installer/core/manifest.js +433 -0
  272. package/tools/installer/core/uv-check.js +97 -0
  273. package/tools/installer/core/wsl-node-check.js +109 -0
  274. package/tools/installer/drt-cli.js +104 -0
  275. package/tools/installer/file-ops.js +204 -0
  276. package/tools/installer/fs-native.js +116 -0
  277. package/tools/installer/ide/_config-driven.js +972 -0
  278. package/tools/installer/ide/manager.js +324 -0
  279. package/tools/installer/ide/platform-codes.js +80 -0
  280. package/tools/installer/ide/platform-codes.yaml +343 -0
  281. package/tools/installer/ide/shared/installed-skills.js +50 -0
  282. package/tools/installer/ide/shared/path-utils.js +217 -0
  283. package/tools/installer/ide/shared/skill-manifest.js +57 -0
  284. package/tools/installer/install-messages.yaml +29 -0
  285. package/tools/installer/list-options.js +210 -0
  286. package/tools/installer/message-loader.js +83 -0
  287. package/tools/installer/modules/channel-plan.js +203 -0
  288. package/tools/installer/modules/channel-resolver.js +241 -0
  289. package/tools/installer/modules/custom-module-manager.js +918 -0
  290. package/tools/installer/modules/external-manager.js +667 -0
  291. package/tools/installer/modules/module-help-schema.js +13 -0
  292. package/tools/installer/modules/official-modules.js +2257 -0
  293. package/tools/installer/modules/plugin-resolver.js +398 -0
  294. package/tools/installer/modules/version-resolver.js +336 -0
  295. package/tools/installer/project-root.js +224 -0
  296. package/tools/installer/prompts.js +852 -0
  297. package/tools/installer/set-overrides.js +330 -0
  298. package/tools/installer/ui.js +2090 -0
  299. package/tools/installer/yaml-format.js +245 -0
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ const MEMLOG = '.memlog.md';
6
+
7
+ function now() {
8
+ const d = new Date();
9
+ const pad = (n) => String(n).padStart(2, '0');
10
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
11
+ }
12
+
13
+ function resolvePath(args) {
14
+ if (args.path) {
15
+ return path.resolve(args.path);
16
+ }
17
+ return path.join(path.resolve(args.workspace), MEMLOG);
18
+ }
19
+
20
+ function split(text) {
21
+ const lines = text.split(/\r?\n/);
22
+ if (!lines.length || lines[0] !== '---') {
23
+ throw new Error('.memlog.md has no frontmatter');
24
+ }
25
+ const end = lines.findIndex((line, i) => i > 0 && line === '---');
26
+ if (end === -1) {
27
+ throw new Error('.memlog.md frontmatter is not terminated');
28
+ }
29
+ const meta = {};
30
+ for (const line of lines.slice(1, end)) {
31
+ const idx = line.indexOf(':');
32
+ if (idx !== -1) {
33
+ meta[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
34
+ }
35
+ }
36
+ const body = lines.slice(end + 1).join('\n').replace(/^\n/, '');
37
+ return { meta, body };
38
+ }
39
+
40
+ function render(meta, body) {
41
+ const fm = Object.entries(meta)
42
+ .map(([k, v]) => `${k}: ${String(v).split(/\r?\n/).join(' ')}`)
43
+ .join('\n');
44
+ return `---\n${fm}\n---\n\n${body.replace(/\n$/, '')}\n`;
45
+ }
46
+
47
+ function touch(meta) {
48
+ delete meta.updated;
49
+ meta.updated = now();
50
+ }
51
+
52
+ function writeAtomic(filePath, text) {
53
+ const tmp = `${filePath}.tmp`;
54
+ fs.writeFileSync(tmp, text, 'utf8');
55
+ try {
56
+ const fd = fs.openSync(tmp, 'r');
57
+ fs.fsyncSync(fd);
58
+ fs.closeSync(fd);
59
+ } catch {
60
+ }
61
+ fs.renameSync(tmp, filePath);
62
+ }
63
+
64
+ function entryCount(body) {
65
+ return body.split(/\r?\n/).filter((line) => line.startsWith('- ')).length;
66
+ }
67
+
68
+ function ack(filePath, body) {
69
+ process.stdout.write(`${JSON.stringify({ ok: true, memlog: filePath, entries: entryCount(body) })}\n`);
70
+ }
71
+
72
+ function cmdInit(args) {
73
+ const filePath = resolvePath(args);
74
+ if (fs.existsSync(filePath)) {
75
+ process.stderr.write(`error: ${filePath} already exists; use append/set to update it\n`);
76
+ process.exit(2);
77
+ }
78
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
79
+ const meta = {};
80
+ for (const pair of args.field || []) {
81
+ const idx = pair.indexOf('=');
82
+ if (idx === -1) {
83
+ process.stderr.write(`error: --field expects key=value, got ${JSON.stringify(pair)}\n`);
84
+ process.exit(2);
85
+ }
86
+ meta[pair.slice(0, idx).trim()] = pair.slice(idx + 1).trim();
87
+ }
88
+ touch(meta);
89
+ writeAtomic(filePath, render(meta, ''));
90
+ ack(filePath, '');
91
+ }
92
+
93
+ function cmdAppend(args) {
94
+ const filePath = resolvePath(args);
95
+ const { meta, body } = split(fs.readFileSync(filePath, 'utf8'));
96
+ const text = args.text.replace(/\s+/g, ' ').trim();
97
+ let label = args.type || '';
98
+ if (args.by) {
99
+ label = `${label} by ${args.by}`.trim();
100
+ }
101
+ const tag = label ? `(${label}) ` : '';
102
+ const entry = `- ${tag}${text}`;
103
+ const newBody = body.trim() ? `${body.replace(/\n$/, '')}\n${entry}` : entry;
104
+ touch(meta);
105
+ writeAtomic(filePath, render(meta, newBody));
106
+ ack(filePath, newBody);
107
+ }
108
+
109
+ function cmdSet(args) {
110
+ const filePath = resolvePath(args);
111
+ const { meta, body } = split(fs.readFileSync(filePath, 'utf8'));
112
+ meta[args.key] = args.value;
113
+ touch(meta);
114
+ writeAtomic(filePath, render(meta, body));
115
+ ack(filePath, body);
116
+ }
117
+
118
+ function parseArgs(argv) {
119
+ const result = { cmd: null, field: [], path: null, workspace: null, text: null, type: null, by: null, key: null, value: null };
120
+ const positional = [];
121
+ for (let i = 2; i < argv.length; i++) {
122
+ const arg = argv[i];
123
+ if (arg === 'init' || arg === 'append' || arg === 'set') {
124
+ result.cmd = arg;
125
+ } else if (arg === '--workspace') {
126
+ result.workspace = argv[++i];
127
+ } else if (arg === '--path') {
128
+ result.path = argv[++i];
129
+ } else if (arg === '--field') {
130
+ result.field.push(argv[++i]);
131
+ } else if (arg === '--text') {
132
+ result.text = argv[++i];
133
+ } else if (arg === '--type') {
134
+ result.type = argv[++i];
135
+ } else if (arg === '--by') {
136
+ result.by = argv[++i];
137
+ } else if (arg === '--key') {
138
+ result.key = argv[++i];
139
+ } else if (arg === '--value') {
140
+ result.value = argv[++i];
141
+ } else if (arg === '--help' || arg === '-h') {
142
+ process.stdout.write('Usage: node memlog.js <init|append|set> --workspace <dir> | --path <file> [options]\n');
143
+ process.exit(0);
144
+ } else {
145
+ positional.push(arg);
146
+ }
147
+ }
148
+ if (!result.cmd && positional.length) {
149
+ result.cmd = positional[0];
150
+ }
151
+ if (!result.cmd) {
152
+ process.stderr.write('error: command required: init, append, or set\n');
153
+ process.exit(1);
154
+ }
155
+ if (!result.path && !result.workspace) {
156
+ process.stderr.write('error: --workspace or --path is required\n');
157
+ process.exit(1);
158
+ }
159
+ return result;
160
+ }
161
+
162
+ function main() {
163
+ const args = parseArgs(process.argv);
164
+ if (args.cmd === 'init') {
165
+ cmdInit(args);
166
+ } else if (args.cmd === 'append') {
167
+ if (!args.text) {
168
+ process.stderr.write('error: --text is required for append\n');
169
+ process.exit(1);
170
+ }
171
+ cmdAppend(args);
172
+ } else if (args.cmd === 'set') {
173
+ if (!args.key || args.value == null) {
174
+ process.stderr.write('error: --key and --value are required for set\n');
175
+ process.exit(1);
176
+ }
177
+ cmdSet(args);
178
+ } else {
179
+ process.stderr.write(`error: unknown command ${args.cmd}\n`);
180
+ process.exit(1);
181
+ }
182
+ }
183
+
184
+ main();
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "drt-runtime-scripts",
3
+ "private": true,
4
+ "dependencies": {
5
+ "@iarna/toml": "^2.2.5"
6
+ }
7
+ }
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+ const path = require('path');
3
+ const { loadToml } = require('./lib/load-toml');
4
+ const { deepMerge, extractKey } = require('./lib/merge-utils');
5
+
6
+ function parseArgs(argv) {
7
+ const args = { projectRoot: null, keys: [] };
8
+ for (let i = 2; i < argv.length; i++) {
9
+ const arg = argv[i];
10
+ if (arg === '--project-root' || arg === '-p') {
11
+ args.projectRoot = argv[++i];
12
+ } else if (arg === '--key' || arg === '-k') {
13
+ args.keys.push(argv[++i]);
14
+ } else if (arg === '--help' || arg === '-h') {
15
+ process.stdout.write(`Usage: node resolve-config.js --project-root <path> [--key <dotted.path> ...]\n`);
16
+ process.exit(0);
17
+ }
18
+ }
19
+ if (!args.projectRoot) {
20
+ process.stderr.write('error: --project-root is required\n');
21
+ process.exit(1);
22
+ }
23
+ return args;
24
+ }
25
+
26
+ function main() {
27
+ const args = parseArgs(process.argv);
28
+ const projectRoot = path.resolve(args.projectRoot);
29
+ const drtDir = path.join(projectRoot, '_drt');
30
+
31
+ const baseTeam = loadToml(path.join(drtDir, 'config.toml'), { required: true });
32
+ const baseUser = loadToml(path.join(drtDir, 'config.user.toml'));
33
+ const customTeam = loadToml(path.join(drtDir, 'custom', 'config.toml'));
34
+ const customUser = loadToml(path.join(drtDir, 'custom', 'config.user.toml'));
35
+
36
+ let merged = deepMerge(baseTeam, baseUser);
37
+ merged = deepMerge(merged, customTeam);
38
+ merged = deepMerge(merged, customUser);
39
+
40
+ let output;
41
+ if (args.keys.length > 0) {
42
+ output = {};
43
+ for (const key of args.keys) {
44
+ const value = extractKey(merged, key);
45
+ if (value !== undefined) {
46
+ output[key] = value;
47
+ }
48
+ }
49
+ } else {
50
+ output = merged;
51
+ }
52
+
53
+ process.stdout.write(`${JSON.stringify(output, null, 2)}\n`);
54
+ }
55
+
56
+ main();
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const { loadToml } = require('./lib/load-toml');
5
+ const { deepMerge, extractKey } = require('./lib/merge-utils');
6
+
7
+ function findProjectRoot(start) {
8
+ let current = path.resolve(start);
9
+ while (true) {
10
+ if (fs.existsSync(path.join(current, '_drt')) || fs.existsSync(path.join(current, '.git'))) {
11
+ return current;
12
+ }
13
+ const parent = path.dirname(current);
14
+ if (parent === current) {
15
+ return null;
16
+ }
17
+ current = parent;
18
+ }
19
+ }
20
+
21
+ function parseArgs(argv) {
22
+ const args = { skill: null, keys: [] };
23
+ for (let i = 2; i < argv.length; i++) {
24
+ const arg = argv[i];
25
+ if (arg === '--skill' || arg === '-s') {
26
+ args.skill = argv[++i];
27
+ } else if (arg === '--key' || arg === '-k') {
28
+ args.keys.push(argv[++i]);
29
+ } else if (arg === '--help' || arg === '-h') {
30
+ process.stdout.write(`Usage: node resolve-customization.js --skill <skill-dir> [--key <dotted.path> ...]\n`);
31
+ process.exit(0);
32
+ }
33
+ }
34
+ if (!args.skill) {
35
+ process.stderr.write('error: --skill is required\n');
36
+ process.exit(1);
37
+ }
38
+ return args;
39
+ }
40
+
41
+ function main() {
42
+ const args = parseArgs(process.argv);
43
+ const skillDir = path.resolve(args.skill);
44
+ const skillName = path.basename(skillDir);
45
+ const defaultsPath = path.join(skillDir, 'customize.toml');
46
+
47
+ const defaults = loadToml(defaultsPath, { required: true });
48
+ const projectRoot = findProjectRoot(skillDir) || findProjectRoot(process.cwd());
49
+
50
+ let team = {};
51
+ let user = {};
52
+ if (projectRoot) {
53
+ const customDir = path.join(projectRoot, '_drt', 'custom');
54
+ team = loadToml(path.join(customDir, `${skillName}.toml`));
55
+ user = loadToml(path.join(customDir, `${skillName}.user.toml`));
56
+ }
57
+
58
+ let merged = deepMerge(defaults, team);
59
+ merged = deepMerge(merged, user);
60
+
61
+ let output;
62
+ if (args.keys.length > 0) {
63
+ output = {};
64
+ for (const key of args.keys) {
65
+ const value = extractKey(merged, key);
66
+ if (value !== undefined) {
67
+ output[key] = value;
68
+ }
69
+ }
70
+ } else {
71
+ output = merged;
72
+ }
73
+
74
+ process.stdout.write(`${JSON.stringify(output, null, 2)}\n`);
75
+ }
76
+
77
+ main();
@@ -0,0 +1,53 @@
1
+ const prompts = require('./prompts');
2
+
3
+ const CLIUtils = {
4
+ /**
5
+ * Display DRT Method logo and version using @clack intro + box
6
+ */
7
+ async displayLogo() {
8
+ const color = await prompts.getColor();
9
+ const termWidth = process.stdout.columns || 80;
10
+
11
+ // Full "DRT Method" logo for wide terminals, "DRT" only for narrow
12
+ const logoWide = [
13
+ ' ██████╗ ███╗ ███╗ █████╗ ██████╗ ███╗ ███╗███████╗████████╗██╗ ██╗ ██████╗ ██████╗ ™',
14
+ '██╔══██╗████╗ ████║██╔══██╗██╔══██╗ ████╗ ████║██╔════╝╚══██╔══╝██║ ██║██╔═══██╗██╔══██╗',
15
+ '██████╔╝██╔████╔██║███████║██║ ██║ ██╔████╔██║█████╗ ██║ ███████║██║ ██║██║ ██║',
16
+ '██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║ ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║ ██║██║ ██║',
17
+ '██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝ ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║╚██████╔╝██████╔╝',
18
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ',
19
+ ];
20
+
21
+ const logoNarrow = [
22
+ ' ██████╗ ███╗ ███╗ █████╗ ██████╗ ™',
23
+ ' ██╔══██╗████╗ ████║██╔══██╗██╔══██╗',
24
+ ' ██████╔╝██╔████╔██║███████║██║ ██║',
25
+ ' ██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║',
26
+ ' ██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝',
27
+ ' ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝',
28
+ ];
29
+
30
+ const logoLines = termWidth >= 95 ? logoWide : logoNarrow;
31
+ const logo = logoLines.map((line) => color.blue(line)).join('\n');
32
+ const tagline = color.white(' Build More, Architect Dreams\n © DRT Code');
33
+
34
+ await prompts.box(`${logo}\n${tagline}`, '', {
35
+ contentAlign: 'center',
36
+ rounded: true,
37
+ formatBorder: color.blue,
38
+ });
39
+ },
40
+
41
+ /**
42
+ * Display module configuration header
43
+ * @param {string} moduleName - Module name (fallback if no custom header)
44
+ * @param {string} header - Custom header from module.yaml
45
+ * @param {string} subheader - Custom subheader from module.yaml
46
+ */
47
+ async displayModuleConfigHeader(moduleName, header = null, subheader = null) {
48
+ const title = header || `Configuring ${moduleName.toUpperCase()} Module`;
49
+ await prompts.note(subheader || '', title);
50
+ },
51
+ };
52
+
53
+ module.exports = { CLIUtils };
@@ -0,0 +1,149 @@
1
+ const path = require('node:path');
2
+ const prompts = require('../prompts');
3
+ const { Installer } = require('../core/installer');
4
+ const { UI } = require('../ui');
5
+
6
+ const installer = new Installer();
7
+ const ui = new UI();
8
+
9
+ module.exports = {
10
+ command: 'install',
11
+ description: 'Install DRT Method agents and tools',
12
+ options: [
13
+ ['-d, --debug', 'Enable debug output for manifest generation'],
14
+ ['--directory <path>', 'Installation directory (default: current directory)'],
15
+ ['--modules <modules>', 'Comma-separated list of module IDs to install (e.g., "bmm,bmb")'],
16
+ [
17
+ '--tools <tools>',
18
+ 'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Required for fresh non-interactive (--yes) installs. Run with --list-tools to see all valid IDs.',
19
+ ],
20
+ ['--list-tools', 'Print all supported tool/IDE IDs (with target directories) and exit.'],
21
+ [
22
+ '--set <spec>',
23
+ 'Set a module config option non-interactively. Spec format: <module>.<key>=<value> (e.g. bmm.project_knowledge=research). Repeatable. Run --list-options to see available keys.',
24
+ (value, prev) => [...(prev || []), value],
25
+ [],
26
+ ],
27
+ [
28
+ '--list-options [module]',
29
+ 'List available --set keys for all locally-known official modules, or for a single module by code, then exit.',
30
+ ],
31
+ ['--action <type>', 'Action type for existing installations: install, update, or quick-update'],
32
+ ['--user-name <name>', 'Name for agents to use (default: system username)'],
33
+ ['--communication-language <lang>', 'Language for agent communication (default: English)'],
34
+ ['--document-output-language <lang>', 'Language for document output (default: English)'],
35
+ ['--output-folder <path>', 'Output folder path relative to project root (default: _drt-output)'],
36
+ ['--custom-source <sources>', 'Comma-separated Git URLs or local paths to install custom modules from'],
37
+ ['-y, --yes', 'Accept all defaults and skip prompts where possible'],
38
+ [
39
+ '--channel <channel>',
40
+ 'Apply channel (stable|next) to all external modules being installed. --all-stable and --all-next are aliases.',
41
+ ],
42
+ ['--all-stable', 'Alias for --channel=stable. Resolves externals to the highest stable release tag.'],
43
+ ['--all-next', 'Alias for --channel=next. Resolves externals to main HEAD.'],
44
+ ['--next <code>', 'Install module <code> from main HEAD (next channel). Repeatable.', (value, prev) => [...(prev || []), value], []],
45
+ [
46
+ '--pin <spec>',
47
+ 'Pin module to a specific tag: --pin CODE=TAG (e.g. --pin bmb=v1.7.0). Repeatable.',
48
+ (value, prev) => [...(prev || []), value],
49
+ [],
50
+ ],
51
+ ],
52
+ action: async (options) => {
53
+ try {
54
+ if (options.listTools) {
55
+ const { formatPlatformList } = require('../ide/platform-codes');
56
+ process.stdout.write((await formatPlatformList()) + '\n');
57
+ process.exit(0);
58
+ }
59
+
60
+ if (options.listOptions !== undefined) {
61
+ const { formatOptionsList } = require('../list-options');
62
+ const moduleArg = options.listOptions === true ? null : options.listOptions;
63
+ const { text, ok } = await formatOptionsList(moduleArg);
64
+ const stream = ok ? process.stdout : process.stderr;
65
+ // process.exit() forces immediate termination and can truncate the
66
+ // buffered write when stdout/stderr is piped or captured by CI. Wait
67
+ // for the write to flush, then set process.exitCode and return so the
68
+ // event loop drains naturally. Non-zero exit when a single-module
69
+ // lookup misses so a CI typo like `--list-options bmn` doesn't look
70
+ // successful in scripts.
71
+ await new Promise((resolve, reject) => {
72
+ stream.write(text + '\n', (error) => (error ? reject(error) : resolve()));
73
+ });
74
+ process.exitCode = ok ? 0 : 1;
75
+ return;
76
+ }
77
+
78
+ const { checkWindowsNodeFromWsl } = require('../core/wsl-node-check');
79
+ await checkWindowsNodeFromWsl();
80
+
81
+ // Set debug flag as environment variable for all components
82
+ if (options.debug) {
83
+ process.env.DRT_DEBUG_MANIFEST = 'true';
84
+ await prompts.log.info('Debug mode enabled');
85
+ }
86
+
87
+ // Validate --set syntax up-front so malformed entries fail fast,
88
+ // before we touch the network or filesystem. Parsed entries are
89
+ // re-derived inside ui.js where overrides are seeded.
90
+ if (options.set && options.set.length > 0) {
91
+ const { parseSetEntries } = require('../set-overrides');
92
+ try {
93
+ parseSetEntries(options.set);
94
+ } catch (error) {
95
+ await prompts.log.error(error.message);
96
+ process.exit(1);
97
+ }
98
+ }
99
+
100
+ const config = await ui.promptInstall(options);
101
+
102
+ // Handle cancel
103
+ if (config.actionType === 'cancel') {
104
+ await prompts.log.warn('Installation cancelled.');
105
+ process.exit(0);
106
+ }
107
+
108
+ // Handle quick update separately. --set is a post-install TOML patch so
109
+ // it works the same way for quick-update as for a regular install — the
110
+ // installer runs, then `applySetOverrides` patches the central config
111
+ // files. Pass the parsed overrides through.
112
+ if (config.actionType === 'quick-update') {
113
+ const { parseSetEntries } = require('../set-overrides');
114
+ config.setOverrides = parseSetEntries(options.set || []);
115
+ const result = await installer.quickUpdate(config);
116
+ await prompts.log.success('Quick update complete!');
117
+ await prompts.log.info(`Updated ${result.moduleCount} modules with preserved settings (${result.modules.join(', ')})`);
118
+ process.exit(0);
119
+ }
120
+
121
+ // Regular install/update flow
122
+ const result = await installer.install(config);
123
+
124
+ // Check if installation was cancelled
125
+ if (result && result.cancelled) {
126
+ process.exit(0);
127
+ }
128
+
129
+ // Check if installation succeeded
130
+ if (result && result.success) {
131
+ process.exit(0);
132
+ }
133
+ } catch (error) {
134
+ try {
135
+ if (error.fullMessage) {
136
+ await prompts.log.error(error.fullMessage);
137
+ } else {
138
+ await prompts.log.error(`Installation failed: ${error.message}`);
139
+ }
140
+ if (error.stack && !error.expected) {
141
+ await prompts.log.message(error.stack);
142
+ }
143
+ } catch {
144
+ console.error(error.fullMessage || error.message || error);
145
+ }
146
+ process.exit(1);
147
+ }
148
+ },
149
+ };
@@ -0,0 +1,65 @@
1
+ const path = require('node:path');
2
+ const prompts = require('../prompts');
3
+ const { Installer } = require('../core/installer');
4
+ const { Manifest } = require('../core/manifest');
5
+ const { UI } = require('../ui');
6
+
7
+ const installer = new Installer();
8
+ const manifest = new Manifest();
9
+ const ui = new UI();
10
+
11
+ module.exports = {
12
+ command: 'status',
13
+ description: 'Display DRT installation status and module versions',
14
+ options: [],
15
+ action: async (options) => {
16
+ try {
17
+ // Find the drt directory
18
+ const projectDir = process.cwd();
19
+ const { drtDir } = await installer.findDrtDir(projectDir);
20
+
21
+ // Check if drt directory exists
22
+ const fs = require('../fs-native');
23
+ if (!(await fs.pathExists(drtDir))) {
24
+ await prompts.log.warn('No DRT installation found in the current directory.');
25
+ await prompts.log.message(`Expected location: ${drtDir}`);
26
+ await prompts.log.message('Run "npx drt-method install" to set up a new installation.');
27
+ process.exit(0);
28
+ return;
29
+ }
30
+
31
+ // Read manifest
32
+ const manifestData = await manifest._readRaw(drtDir);
33
+
34
+ if (!manifestData) {
35
+ await prompts.log.warn('No DRT installation manifest found.');
36
+ await prompts.log.message('Run "npx drt-method install" to set up a new installation.');
37
+ process.exit(0);
38
+ return;
39
+ }
40
+
41
+ // Get installation info
42
+ const installation = manifestData.installation || {};
43
+ const modules = manifestData.modules || [];
44
+
45
+ // Check for available updates (only for external modules)
46
+ const availableUpdates = await manifest.checkForUpdates(drtDir);
47
+
48
+ // Display status
49
+ await ui.displayStatus({
50
+ installation,
51
+ modules,
52
+ availableUpdates,
53
+ drtDir,
54
+ });
55
+
56
+ process.exit(0);
57
+ } catch (error) {
58
+ await prompts.log.error(`Status check failed: ${error.message}`);
59
+ if (process.env.DRT_DEBUG) {
60
+ await prompts.log.message(error.stack);
61
+ }
62
+ process.exit(1);
63
+ }
64
+ },
65
+ };