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,324 @@
1
+ const { DRT_FOLDER_NAME } = require('./shared/path-utils');
2
+ const prompts = require('../prompts');
3
+
4
+ /**
5
+ * IDE Manager - handles IDE-specific setup
6
+ * Dynamically discovers and loads IDE handlers
7
+ *
8
+ * Loading strategy:
9
+ * All platforms are config-driven from platform-codes.yaml.
10
+ */
11
+ class IdeManager {
12
+ constructor() {
13
+ this.handlers = new Map();
14
+ this._initialized = false;
15
+ this.drtFolderName = DRT_FOLDER_NAME; // Default, can be overridden
16
+ }
17
+
18
+ /**
19
+ * Set the drt folder name for all IDE handlers
20
+ * @param {string} drtFolderName - The drt folder name
21
+ */
22
+ setDrtFolderName(drtFolderName) {
23
+ this.drtFolderName = drtFolderName;
24
+ // Update all loaded handlers
25
+ for (const handler of this.handlers.values()) {
26
+ if (typeof handler.setDrtFolderName === 'function') {
27
+ handler.setDrtFolderName(drtFolderName);
28
+ }
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Ensure handlers are loaded (lazy loading)
34
+ */
35
+ async ensureInitialized() {
36
+ if (!this._initialized) {
37
+ await this.loadHandlers();
38
+ this._initialized = true;
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Dynamically load all IDE handlers from platform-codes.yaml
44
+ */
45
+ async loadHandlers() {
46
+ await this.loadConfigDrivenHandlers();
47
+ }
48
+
49
+ /**
50
+ * Load config-driven handlers from platform-codes.yaml
51
+ * This creates ConfigDrivenIdeSetup instances for platforms with installer config
52
+ */
53
+ async loadConfigDrivenHandlers() {
54
+ const { loadPlatformCodes } = require('./platform-codes');
55
+ const platformConfig = await loadPlatformCodes();
56
+
57
+ const { ConfigDrivenIdeSetup } = require('./_config-driven');
58
+
59
+ for (const [platformCode, platformInfo] of Object.entries(platformConfig.platforms)) {
60
+ // Skip if no installer config (platform may not need installation)
61
+ if (!platformInfo.installer) continue;
62
+
63
+ const handler = new ConfigDrivenIdeSetup(platformCode, platformInfo);
64
+ if (typeof handler.setDrtFolderName === 'function') {
65
+ handler.setDrtFolderName(this.drtFolderName);
66
+ }
67
+ this.handlers.set(platformCode, handler);
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Get all available IDEs with their metadata
73
+ * @returns {Array} Array of IDE information objects
74
+ */
75
+ getAvailableIdes() {
76
+ const ides = [];
77
+
78
+ for (const [key, handler] of this.handlers) {
79
+ // Skip handlers without valid names
80
+ const name = handler.displayName || handler.name || key;
81
+
82
+ // Filter out invalid entries (undefined name, empty key, etc.)
83
+ if (!key || !name || typeof key !== 'string' || typeof name !== 'string') {
84
+ continue;
85
+ }
86
+
87
+ // Skip suspended platforms (e.g., IDE doesn't support skills yet)
88
+ if (handler.platformConfig?.suspended) {
89
+ continue;
90
+ }
91
+
92
+ ides.push({
93
+ value: key,
94
+ name: name,
95
+ preferred: handler.preferred || false,
96
+ });
97
+ }
98
+
99
+ // Sort: preferred first, then alphabetical
100
+ ides.sort((a, b) => {
101
+ if (a.preferred && !b.preferred) return -1;
102
+ if (!a.preferred && b.preferred) return 1;
103
+ return a.name.localeCompare(b.name);
104
+ });
105
+
106
+ return ides;
107
+ }
108
+
109
+ /**
110
+ * Get preferred IDEs
111
+ * @returns {Array} Array of preferred IDE information
112
+ */
113
+ getPreferredIdes() {
114
+ return this.getAvailableIdes().filter((ide) => ide.preferred);
115
+ }
116
+
117
+ /**
118
+ * Get non-preferred IDEs
119
+ * @returns {Array} Array of non-preferred IDE information
120
+ */
121
+ getOtherIdes() {
122
+ return this.getAvailableIdes().filter((ide) => !ide.preferred);
123
+ }
124
+
125
+ /**
126
+ * Setup IDE configuration
127
+ * @param {string} ideName - Name of the IDE
128
+ * @param {string} projectDir - Project directory
129
+ * @param {string} drtDir - DRT installation directory
130
+ * @param {Object} options - Setup options
131
+ */
132
+ async setup(ideName, projectDir, drtDir, options = {}) {
133
+ const handler = this.handlers.get(ideName.toLowerCase());
134
+
135
+ if (!handler) {
136
+ await prompts.log.warn(`IDE '${ideName}' is not yet supported`);
137
+ await prompts.log.message(`Supported IDEs: ${[...this.handlers.keys()].join(', ')}`);
138
+ return { success: false, ide: ideName, error: 'unsupported IDE' };
139
+ }
140
+
141
+ // Block suspended platforms — clean up legacy files but don't install
142
+ if (handler.platformConfig?.suspended) {
143
+ if (!options.silent) {
144
+ await prompts.log.warn(`${handler.displayName || ideName}: ${handler.platformConfig.suspended}`);
145
+ }
146
+ // Still clean up legacy artifacts so old broken configs don't linger
147
+ if (typeof handler.cleanup === 'function') {
148
+ try {
149
+ await handler.cleanup(projectDir, { silent: true });
150
+ } catch {
151
+ // Best-effort cleanup — don't let stale files block the suspended result
152
+ }
153
+ }
154
+ return { success: false, ide: ideName, error: 'suspended' };
155
+ }
156
+
157
+ try {
158
+ const handlerResult = await handler.setup(projectDir, drtDir, options);
159
+ // Build detail string from handler-returned data
160
+ let detail = '';
161
+ if (handlerResult && handlerResult.results) {
162
+ const r = handlerResult.results;
163
+ let count = r.skillDirectories || r.skills || 0;
164
+ // Dedup'd platform: report the count its peer wrote so the user sees
165
+ // a consistent picture across all platforms sharing the dir.
166
+ if (count === 0 && r.sharedTargetHandledByPeer && options.sharedSkillCount) {
167
+ count = options.sharedSkillCount;
168
+ }
169
+ const targetDir = handler.installerConfig?.target_dir || null;
170
+ if (count > 0 && targetDir) {
171
+ detail = `${count} skills → ${targetDir}`;
172
+ } else if (count > 0) {
173
+ detail = `${count} skills`;
174
+ }
175
+ }
176
+ // Propagate handler's success status (default true for backward compat)
177
+ const success = handlerResult?.success !== false;
178
+ return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult };
179
+ } catch (error) {
180
+ await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
181
+ return { success: false, ide: ideName, error: error.message };
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Run setup for multiple IDEs as a single batch.
187
+ * Dedupes work when several selected platforms share the same target_dir:
188
+ * the first platform owns the directory write, peers skip it.
189
+ * @param {Array<string>} ideList - IDE names to set up
190
+ * @param {string} projectDir
191
+ * @param {string} drtDir
192
+ * @param {Object} [options] - Forwarded to each handler.setup
193
+ * @returns {Promise<Array>} Per-IDE results
194
+ */
195
+ async setupBatch(ideList, projectDir, drtDir, options = {}) {
196
+ await this.ensureInitialized();
197
+ const results = [];
198
+ // target_dir → { firstIde, skillCount } from the platform that actually wrote it
199
+ const claimedTargets = new Map();
200
+
201
+ for (const ideName of ideList) {
202
+ const handler = this.handlers.get(ideName.toLowerCase());
203
+ if (!handler) {
204
+ results.push(await this.setup(ideName, projectDir, drtDir, options));
205
+ continue;
206
+ }
207
+
208
+ const target = handler.installerConfig?.target_dir || null;
209
+ const claim = target ? claimedTargets.get(target) : null;
210
+ const skipTarget = !!claim;
211
+
212
+ const result = await this.setup(ideName, projectDir, drtDir, {
213
+ ...options,
214
+ skipTarget,
215
+ sharedWith: claim?.firstIde || null,
216
+ sharedTarget: target,
217
+ sharedSkillCount: claim?.skillCount || 0,
218
+ });
219
+
220
+ if (target && !claim) {
221
+ const writtenCount = result.handlerResult?.results?.skillDirectories || result.handlerResult?.results?.skills || 0;
222
+ // Only claim the target when the install actually succeeded and wrote skills.
223
+ // If the first platform fails (ancestor conflict, exception, etc.), leave the
224
+ // dir unclaimed so the next peer becomes the new first writer instead of
225
+ // silently skipping into a broken/empty target_dir.
226
+ if (result.success && writtenCount > 0) {
227
+ claimedTargets.set(target, { firstIde: ideName, skillCount: writtenCount });
228
+ }
229
+ }
230
+ results.push(result);
231
+ }
232
+
233
+ return results;
234
+ }
235
+
236
+ /**
237
+ * Cleanup IDE configurations
238
+ * @param {string} projectDir - Project directory
239
+ * @param {Object} [options] - Cleanup options passed through to handlers
240
+ */
241
+ async cleanup(projectDir, options = {}) {
242
+ const results = [];
243
+
244
+ for (const [name, handler] of this.handlers) {
245
+ try {
246
+ await handler.cleanup(projectDir, options);
247
+ results.push({ ide: name, success: true });
248
+ } catch (error) {
249
+ results.push({ ide: name, success: false, error: error.message });
250
+ }
251
+ }
252
+
253
+ return results;
254
+ }
255
+
256
+ /**
257
+ * Cleanup only the IDEs in the provided list
258
+ * Falls back to cleanup() (all handlers) if ideList is empty or undefined
259
+ * @param {string} projectDir - Project directory
260
+ * @param {Array<string>} ideList - List of IDE names to clean up
261
+ * @param {Object} [options] - Cleanup options passed through to handlers
262
+ * options.remainingIdes - IDE names still installed after this cleanup; used
263
+ * to skip target_dir wipe when a co-installed platform shares the dir.
264
+ * @returns {Array} Results array
265
+ */
266
+ async cleanupByList(projectDir, ideList, options = {}) {
267
+ if (!ideList || ideList.length === 0) {
268
+ return this.cleanup(projectDir, options);
269
+ }
270
+
271
+ await this.ensureInitialized();
272
+ const results = [];
273
+
274
+ // Build lowercase lookup for case-insensitive matching
275
+ const lowercaseHandlers = new Map([...this.handlers.entries()].map(([k, v]) => [k.toLowerCase(), v]));
276
+
277
+ // Resolve target_dirs for IDEs that will remain installed after this cleanup
278
+ const remainingTargets = new Set();
279
+ if (Array.isArray(options.remainingIdes)) {
280
+ for (const remaining of options.remainingIdes) {
281
+ const h = lowercaseHandlers.get(String(remaining).toLowerCase());
282
+ const t = h?.installerConfig?.target_dir;
283
+ if (t) remainingTargets.add(t);
284
+ }
285
+ }
286
+
287
+ for (const ideName of ideList) {
288
+ const handler = lowercaseHandlers.get(ideName.toLowerCase());
289
+ if (!handler) continue;
290
+
291
+ const target = handler.installerConfig?.target_dir || null;
292
+ const skipTarget = target && remainingTargets.has(target);
293
+ const cleanupOptions = skipTarget ? { ...options, skipTarget: true } : options;
294
+
295
+ try {
296
+ await handler.cleanup(projectDir, cleanupOptions);
297
+ results.push({ ide: ideName, success: true, skippedTarget: !!skipTarget });
298
+ } catch (error) {
299
+ results.push({ ide: ideName, success: false, error: error.message });
300
+ }
301
+ }
302
+
303
+ return results;
304
+ }
305
+
306
+ /**
307
+ * Detect installed IDEs
308
+ * @param {string} projectDir - Project directory
309
+ * @returns {Array} List of detected IDEs
310
+ */
311
+ async detectInstalledIdes(projectDir) {
312
+ const detected = [];
313
+
314
+ for (const [name, handler] of this.handlers) {
315
+ if (typeof handler.detect === 'function' && (await handler.detect(projectDir))) {
316
+ detected.push(name);
317
+ }
318
+ }
319
+
320
+ return detected;
321
+ }
322
+ }
323
+
324
+ module.exports = { IdeManager };
@@ -0,0 +1,80 @@
1
+ const fs = require('../fs-native');
2
+ const path = require('node:path');
3
+ const yaml = require('yaml');
4
+
5
+ const PLATFORM_CODES_PATH = path.join(__dirname, 'platform-codes.yaml');
6
+
7
+ let _cachedPlatformCodes = null;
8
+
9
+ /**
10
+ * Load the platform codes configuration from YAML
11
+ * @returns {Object} Platform codes configuration
12
+ */
13
+ async function loadPlatformCodes() {
14
+ if (_cachedPlatformCodes) {
15
+ return _cachedPlatformCodes;
16
+ }
17
+
18
+ if (!(await fs.pathExists(PLATFORM_CODES_PATH))) {
19
+ throw new Error(`Platform codes configuration not found at: ${PLATFORM_CODES_PATH}`);
20
+ }
21
+
22
+ const content = await fs.readFile(PLATFORM_CODES_PATH, 'utf8');
23
+ _cachedPlatformCodes = yaml.parse(content);
24
+ return _cachedPlatformCodes;
25
+ }
26
+
27
+ /**
28
+ * Clear the cached platform codes (useful for testing)
29
+ */
30
+ function clearCache() {
31
+ _cachedPlatformCodes = null;
32
+ }
33
+
34
+ /**
35
+ * Format the installable platform list for human-readable output (used by --list-tools).
36
+ * Sourced from IdeManager so this view matches what --tools accepts at install time
37
+ * (suspended platforms excluded).
38
+ * @returns {Promise<string>} Formatted multi-line string with id, name, target_dir, preferred flag.
39
+ */
40
+ async function formatPlatformList() {
41
+ const { IdeManager } = require('./manager');
42
+ const ideManager = new IdeManager();
43
+ await ideManager.ensureInitialized();
44
+
45
+ const entries = ideManager.getAvailableIdes().map((ide) => {
46
+ const handler = ideManager.handlers.get(ide.value);
47
+ return {
48
+ id: ide.value,
49
+ name: ide.name,
50
+ targetDir: handler?.installerConfig?.target_dir || '',
51
+ preferred: ide.preferred,
52
+ };
53
+ });
54
+
55
+ const idWidth = Math.max(...entries.map((e) => e.id.length), 'ID'.length);
56
+ const nameWidth = Math.max(...entries.map((e) => e.name.length), 'Name'.length);
57
+
58
+ const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
59
+ const lines = [
60
+ `Supported tool IDs (pass via --tools <id>[,<id>...]):`,
61
+ '',
62
+ ` ${pad('ID', idWidth)} ${pad('Name', nameWidth)} Target dir`,
63
+ ` ${pad('-'.repeat(idWidth), idWidth)} ${pad('-'.repeat(nameWidth), nameWidth)} ${'-'.repeat(10)}`,
64
+ ];
65
+
66
+ for (const e of entries) {
67
+ const star = e.preferred ? ' *' : ' ';
68
+ lines.push(`${star}${pad(e.id, idWidth)} ${pad(e.name, nameWidth)} ${e.targetDir}`);
69
+ }
70
+
71
+ lines.push('', '* = recommended / preferred', '', 'Example: drt-method install --modules drt --tools claude-code');
72
+
73
+ return lines.join('\n');
74
+ }
75
+
76
+ module.exports = {
77
+ loadPlatformCodes,
78
+ clearCache,
79
+ formatPlatformList,
80
+ };