scm-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.
- package/.claude-plugin/marketplace.json +77 -0
- package/AGENTS.md +12 -0
- package/LICENSE +30 -0
- package/README.md +109 -0
- package/README_CN.md +108 -0
- package/package.json +110 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/SKILL.md +6 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-01-init.md +137 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/scm-domain-research/workflow.md +51 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/SKILL.md +6 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-01-init.md +184 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-02-customer-behavior.md +239 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-04-customer-decisions.md +261 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-06-research-completion.md +478 -0
- package/src/bmm-skills/1-analysis/research/scm-market-research/workflow.md +51 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/SKILL.md +6 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-01-init.md +137 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-06-research-synthesis.md +487 -0
- package/src/bmm-skills/1-analysis/research/scm-technical-research/workflow.md +52 -0
- package/src/bmm-skills/1-analysis/scm-agent-analyst/SKILL.md +59 -0
- package/src/bmm-skills/1-analysis/scm-agent-analyst/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/SKILL.md +57 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/explain-concept.md +20 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/mermaid-gen.md +20 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/validate-doc.md +19 -0
- package/src/bmm-skills/1-analysis/scm-agent-tech-writer/write-document.md +20 -0
- package/src/bmm-skills/1-analysis/scm-document-project/SKILL.md +6 -0
- package/src/bmm-skills/1-analysis/scm-document-project/checklist.md +245 -0
- package/src/bmm-skills/1-analysis/scm-document-project/documentation-requirements.csv +12 -0
- package/src/bmm-skills/1-analysis/scm-document-project/instructions.md +128 -0
- package/src/bmm-skills/1-analysis/scm-document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm-skills/1-analysis/scm-document-project/templates/index-template.md +169 -0
- package/src/bmm-skills/1-analysis/scm-document-project/templates/project-overview-template.md +103 -0
- package/src/bmm-skills/1-analysis/scm-document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm-skills/1-analysis/scm-document-project/templates/source-tree-template.md +135 -0
- package/src/bmm-skills/1-analysis/scm-document-project/workflow.md +25 -0
- package/src/bmm-skills/1-analysis/scm-document-project/workflows/deep-dive-instructions.md +299 -0
- package/src/bmm-skills/1-analysis/scm-document-project/workflows/deep-dive-workflow.md +34 -0
- package/src/bmm-skills/1-analysis/scm-document-project/workflows/full-scan-instructions.md +1107 -0
- package/src/bmm-skills/1-analysis/scm-document-project/workflows/full-scan-workflow.md +34 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/SKILL.md +96 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/agents/artifact-analyzer.md +60 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/agents/web-researcher.md +49 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/assets/prfaq-template.md +62 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/references/customer-faq.md +55 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/references/internal-faq.md +51 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/references/press-release.md +60 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/references/verdict.md +79 -0
- package/src/bmm-skills/1-analysis/scm-prfaq/scm-manifest.json +16 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/SKILL.md +82 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/agents/artifact-analyzer.md +60 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/agents/opportunity-reviewer.md +44 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/agents/skeptic-reviewer.md +44 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/agents/web-researcher.md +49 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/prompts/contextual-discovery.md +57 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/prompts/draft-and-review.md +86 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/prompts/finalize.md +75 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/prompts/guided-elicitation.md +70 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/resources/brief-template.md +60 -0
- package/src/bmm-skills/1-analysis/scm-product-brief/scm-manifest.json +17 -0
- package/src/bmm-skills/2-plan-workflows/scm-agent-pm/SKILL.md +59 -0
- package/src/bmm-skills/2-plan-workflows/scm-agent-pm/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/2-plan-workflows/scm-agent-ux-designer/SKILL.md +55 -0
- package/src/bmm-skills/2-plan-workflows/scm-agent-ux-designer/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/SKILL.md +6 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/domain-complexity.csv +15 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/prd-purpose.md +197 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/project-types.csv +11 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-01-init.md +178 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-01b-continue.md +161 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02-discovery.md +208 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02b-vision.md +142 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02c-executive-summary.md +158 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-03-success.md +214 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-04-journeys.md +201 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-05-domain.md +194 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-06-innovation.md +211 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-07-project-type.md +222 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-08-scoping.md +216 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-09-functional.md +219 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-10-nonfunctional.md +230 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-11-polish.md +221 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-12-complete.md +115 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/templates/prd-template.md +10 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-prd/workflow.md +61 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/SKILL.md +6 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-03-core-experience.md +217 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-04-emotional-response.md +220 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-05-inspiration.md +235 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-06-design-system.md +253 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-07-defining-experience.md +255 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-08-visual-foundation.md +225 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-09-design-directions.md +225 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-10-user-journeys.md +242 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-11-component-strategy.md +249 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-12-ux-patterns.md +238 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-13-responsive-accessibility.md +265 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-14-complete.md +171 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/ux-design-template.md +13 -0
- package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/workflow.md +35 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/SKILL.md +6 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-01-discovery.md +242 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-01b-legacy-conversion.md +204 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-02-review.md +245 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-03-edit.md +250 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-04-complete.md +165 -0
- package/src/bmm-skills/2-plan-workflows/scm-edit-prd/workflow.md +62 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/SKILL.md +6 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/domain-complexity.csv +15 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/prd-purpose.md +197 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/project-types.csv +11 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-01-discovery.md +221 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
- package/src/bmm-skills/2-plan-workflows/scm-validate-prd/workflow.md +61 -0
- package/src/bmm-skills/3-solutioning/scm-agent-architect/SKILL.md +54 -0
- package/src/bmm-skills/3-solutioning/scm-agent-architect/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/SKILL.md +6 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/workflow.md +47 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/SKILL.md +6 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/data/domain-complexity.csv +13 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/data/project-types.csv +7 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-01b-continue.md +173 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-03-starter.md +329 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-08-complete.md +76 -0
- package/src/bmm-skills/3-solutioning/scm-create-architecture/workflow.md +32 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/SKILL.md +6 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/templates/epics-template.md +61 -0
- package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/workflow.md +51 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/SKILL.md +6 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/project-context-template.md +21 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-01-discover.md +186 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-02-generate.md +321 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-03-complete.md +278 -0
- package/src/bmm-skills/3-solutioning/scm-generate-project-context/workflow.md +39 -0
- package/src/bmm-skills/4-implementation/scm-agent-dev/SKILL.md +64 -0
- package/src/bmm-skills/4-implementation/scm-agent-dev/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/4-implementation/scm-agent-qa/SKILL.md +61 -0
- package/src/bmm-skills/4-implementation/scm-agent-qa/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/4-implementation/scm-agent-quick-flow-solo-dev/SKILL.md +53 -0
- package/src/bmm-skills/4-implementation/scm-agent-quick-flow-solo-dev/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/4-implementation/scm-agent-sm/SKILL.md +55 -0
- package/src/bmm-skills/4-implementation/scm-agent-sm/scm-skill-manifest.yaml +11 -0
- package/src/bmm-skills/4-implementation/scm-code-review/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-code-review/steps/step-01-gather-context.md +62 -0
- package/src/bmm-skills/4-implementation/scm-code-review/steps/step-02-review.md +34 -0
- package/src/bmm-skills/4-implementation/scm-code-review/steps/step-03-triage.md +49 -0
- package/src/bmm-skills/4-implementation/scm-code-review/steps/step-04-present.md +129 -0
- package/src/bmm-skills/4-implementation/scm-code-review/workflow.md +55 -0
- package/src/bmm-skills/4-implementation/scm-correct-course/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-correct-course/checklist.md +288 -0
- package/src/bmm-skills/4-implementation/scm-correct-course/workflow.md +267 -0
- package/src/bmm-skills/4-implementation/scm-create-story/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-create-story/checklist.md +357 -0
- package/src/bmm-skills/4-implementation/scm-create-story/discover-inputs.md +88 -0
- package/src/bmm-skills/4-implementation/scm-create-story/template.md +49 -0
- package/src/bmm-skills/4-implementation/scm-create-story/workflow.md +380 -0
- package/src/bmm-skills/4-implementation/scm-dev-story/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-dev-story/checklist.md +80 -0
- package/src/bmm-skills/4-implementation/scm-dev-story/workflow.md +450 -0
- package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/checklist.md +33 -0
- package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/workflow.md +136 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/spec-template.md +88 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-01-clarify-and-route.md +66 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-02-plan.md +35 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-03-implement.md +37 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-04-review.md +49 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-05-present.md +63 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/step-oneshot.md +62 -0
- package/src/bmm-skills/4-implementation/scm-quick-dev/workflow.md +79 -0
- package/src/bmm-skills/4-implementation/scm-retrospective/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-retrospective/workflow.md +1479 -0
- package/src/bmm-skills/4-implementation/scm-sprint-planning/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-sprint-planning/checklist.md +33 -0
- package/src/bmm-skills/4-implementation/scm-sprint-planning/sprint-status-template.yaml +56 -0
- package/src/bmm-skills/4-implementation/scm-sprint-planning/workflow.md +263 -0
- package/src/bmm-skills/4-implementation/scm-sprint-status/SKILL.md +6 -0
- package/src/bmm-skills/4-implementation/scm-sprint-status/workflow.md +261 -0
- package/src/bmm-skills/module-help.csv +31 -0
- package/src/bmm-skills/module.yaml +50 -0
- package/src/core-skills/module-help.csv +11 -0
- package/src/core-skills/module.yaml +25 -0
- package/src/core-skills/scm-advanced-elicitation/SKILL.md +136 -0
- package/src/core-skills/scm-advanced-elicitation/methods.csv +51 -0
- package/src/core-skills/scm-brainstorming/SKILL.md +6 -0
- package/src/core-skills/scm-brainstorming/brain-methods.csv +62 -0
- package/src/core-skills/scm-brainstorming/steps/step-01-session-setup.md +214 -0
- package/src/core-skills/scm-brainstorming/steps/step-01b-continue.md +124 -0
- package/src/core-skills/scm-brainstorming/steps/step-02a-user-selected.md +229 -0
- package/src/core-skills/scm-brainstorming/steps/step-02b-ai-recommended.md +239 -0
- package/src/core-skills/scm-brainstorming/steps/step-02c-random-selection.md +211 -0
- package/src/core-skills/scm-brainstorming/steps/step-02d-progressive-flow.md +266 -0
- package/src/core-skills/scm-brainstorming/steps/step-03-technique-execution.md +401 -0
- package/src/core-skills/scm-brainstorming/steps/step-04-idea-organization.md +305 -0
- package/src/core-skills/scm-brainstorming/template.md +15 -0
- package/src/core-skills/scm-brainstorming/workflow.md +53 -0
- package/src/core-skills/scm-distillator/SKILL.md +177 -0
- package/src/core-skills/scm-distillator/agents/distillate-compressor.md +116 -0
- package/src/core-skills/scm-distillator/agents/round-trip-reconstructor.md +68 -0
- package/src/core-skills/scm-distillator/resources/compression-rules.md +51 -0
- package/src/core-skills/scm-distillator/resources/distillate-format-reference.md +227 -0
- package/src/core-skills/scm-distillator/resources/splitting-strategy.md +78 -0
- package/src/core-skills/scm-distillator/scripts/analyze_sources.py +300 -0
- package/src/core-skills/scm-distillator/scripts/tests/test_analyze_sources.py +204 -0
- package/src/core-skills/scm-editorial-review-prose/SKILL.md +86 -0
- package/src/core-skills/scm-editorial-review-structure/SKILL.md +179 -0
- package/src/core-skills/scm-help/SKILL.md +73 -0
- package/src/core-skills/scm-index-docs/SKILL.md +66 -0
- package/src/core-skills/scm-party-mode/SKILL.md +125 -0
- package/src/core-skills/scm-review-adversarial-general/SKILL.md +37 -0
- package/src/core-skills/scm-review-edge-case-hunter/SKILL.md +67 -0
- package/src/core-skills/scm-shard-doc/SKILL.md +105 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/installer/README.md +60 -0
- package/tools/installer/cli-utils.js +181 -0
- package/tools/installer/commands/install.js +80 -0
- package/tools/installer/commands/status.js +65 -0
- package/tools/installer/commands/uninstall.js +167 -0
- package/tools/installer/core/config.js +52 -0
- package/tools/installer/core/custom-module-cache.js +260 -0
- package/tools/installer/core/existing-install.js +127 -0
- package/tools/installer/core/install-paths.js +129 -0
- package/tools/installer/core/installer.js +1790 -0
- package/tools/installer/core/manifest-generator.js +701 -0
- package/tools/installer/core/manifest.js +1040 -0
- package/tools/installer/custom-handler.js +112 -0
- package/tools/installer/external-official-modules.yaml +63 -0
- package/tools/installer/file-ops.js +204 -0
- package/tools/installer/ide/_config-driven.js +536 -0
- package/tools/installer/ide/manager.js +247 -0
- package/tools/installer/ide/platform-codes.js +37 -0
- package/tools/installer/ide/platform-codes.yaml +192 -0
- package/tools/installer/ide/shared/agent-command-generator.js +180 -0
- package/tools/installer/ide/shared/module-injections.js +136 -0
- package/tools/installer/ide/shared/path-utils.js +364 -0
- package/tools/installer/ide/shared/scm-artifacts.js +208 -0
- package/tools/installer/ide/shared/skill-manifest.js +72 -0
- package/tools/installer/ide/templates/agent-command-template.md +14 -0
- package/tools/installer/ide/templates/combined/antigravity.md +8 -0
- package/tools/installer/ide/templates/combined/default-agent.md +15 -0
- package/tools/installer/ide/templates/combined/default-task.md +10 -0
- package/tools/installer/ide/templates/combined/default-tool.md +10 -0
- package/tools/installer/ide/templates/combined/default-workflow.md +6 -0
- package/tools/installer/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/installer/ide/templates/combined/gemini-task.toml +11 -0
- package/tools/installer/ide/templates/combined/gemini-tool.toml +11 -0
- package/tools/installer/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/installer/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/installer/ide/templates/combined/kiro-agent.md +16 -0
- package/tools/installer/ide/templates/combined/kiro-task.md +9 -0
- package/tools/installer/ide/templates/combined/kiro-tool.md +9 -0
- package/tools/installer/ide/templates/combined/kiro-workflow.md +7 -0
- package/tools/installer/ide/templates/combined/opencode-agent.md +15 -0
- package/tools/installer/ide/templates/combined/opencode-task.md +13 -0
- package/tools/installer/ide/templates/combined/opencode-tool.md +13 -0
- package/tools/installer/ide/templates/combined/opencode-workflow-yaml.md +16 -0
- package/tools/installer/ide/templates/combined/opencode-workflow.md +16 -0
- package/tools/installer/ide/templates/combined/rovodev.md +9 -0
- package/tools/installer/ide/templates/combined/trae.md +9 -0
- package/tools/installer/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/installer/ide/templates/split/.gitkeep +0 -0
- package/tools/installer/install-messages.yaml +35 -0
- package/tools/installer/message-loader.js +83 -0
- package/tools/installer/modules/custom-modules.js +197 -0
- package/tools/installer/modules/external-manager.js +354 -0
- package/tools/installer/modules/official-modules.js +2043 -0
- package/tools/installer/project-root.js +77 -0
- package/tools/installer/prompts.js +809 -0
- package/tools/installer/scm-cli.js +108 -0
- package/tools/installer/ui.js +1683 -0
- package/tools/installer/yaml-format.js +245 -0
- package/tools/javascript-conventions.md +5 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +169 -0
- package/tools/validate-skills.js +736 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
const { SCM_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.scmFolderName = SCM_FOLDER_NAME; // Default, can be overridden
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Set the scm folder name for all IDE handlers
|
|
20
|
+
* @param {string} scmFolderName - The scm folder name
|
|
21
|
+
*/
|
|
22
|
+
setBmadFolderName(scmFolderName) {
|
|
23
|
+
this.scmFolderName = scmFolderName;
|
|
24
|
+
// Update all loaded handlers
|
|
25
|
+
for (const handler of this.handlers.values()) {
|
|
26
|
+
if (typeof handler.setBmadFolderName === 'function') {
|
|
27
|
+
handler.setBmadFolderName(scmFolderName);
|
|
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.setBmadFolderName === 'function') {
|
|
65
|
+
handler.setBmadFolderName(this.scmFolderName);
|
|
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} scmDir - SCM installation directory
|
|
130
|
+
* @param {Object} options - Setup options
|
|
131
|
+
*/
|
|
132
|
+
async setup(ideName, projectDir, scmDir, 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, scmDir, options);
|
|
159
|
+
// Build detail string from handler-returned data
|
|
160
|
+
let detail = '';
|
|
161
|
+
if (handlerResult && handlerResult.results) {
|
|
162
|
+
const r = handlerResult.results;
|
|
163
|
+
const count = r.skillDirectories || r.skills || 0;
|
|
164
|
+
if (count > 0) detail = `${count} skills`;
|
|
165
|
+
}
|
|
166
|
+
// Propagate handler's success status (default true for backward compat)
|
|
167
|
+
const success = handlerResult?.success !== false;
|
|
168
|
+
return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult };
|
|
169
|
+
} catch (error) {
|
|
170
|
+
await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
|
|
171
|
+
return { success: false, ide: ideName, error: error.message };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Cleanup IDE configurations
|
|
177
|
+
* @param {string} projectDir - Project directory
|
|
178
|
+
* @param {Object} [options] - Cleanup options passed through to handlers
|
|
179
|
+
*/
|
|
180
|
+
async cleanup(projectDir, options = {}) {
|
|
181
|
+
const results = [];
|
|
182
|
+
|
|
183
|
+
for (const [name, handler] of this.handlers) {
|
|
184
|
+
try {
|
|
185
|
+
await handler.cleanup(projectDir, options);
|
|
186
|
+
results.push({ ide: name, success: true });
|
|
187
|
+
} catch (error) {
|
|
188
|
+
results.push({ ide: name, success: false, error: error.message });
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return results;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Cleanup only the IDEs in the provided list
|
|
197
|
+
* Falls back to cleanup() (all handlers) if ideList is empty or undefined
|
|
198
|
+
* @param {string} projectDir - Project directory
|
|
199
|
+
* @param {Array<string>} ideList - List of IDE names to clean up
|
|
200
|
+
* @param {Object} [options] - Cleanup options passed through to handlers
|
|
201
|
+
* @returns {Array} Results array
|
|
202
|
+
*/
|
|
203
|
+
async cleanupByList(projectDir, ideList, options = {}) {
|
|
204
|
+
if (!ideList || ideList.length === 0) {
|
|
205
|
+
return this.cleanup(projectDir, options);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
await this.ensureInitialized();
|
|
209
|
+
const results = [];
|
|
210
|
+
|
|
211
|
+
// Build lowercase lookup for case-insensitive matching
|
|
212
|
+
const lowercaseHandlers = new Map([...this.handlers.entries()].map(([k, v]) => [k.toLowerCase(), v]));
|
|
213
|
+
|
|
214
|
+
for (const ideName of ideList) {
|
|
215
|
+
const handler = lowercaseHandlers.get(ideName.toLowerCase());
|
|
216
|
+
if (!handler) continue;
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
await handler.cleanup(projectDir, options);
|
|
220
|
+
results.push({ ide: ideName, success: true });
|
|
221
|
+
} catch (error) {
|
|
222
|
+
results.push({ ide: ideName, success: false, error: error.message });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return results;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Detect installed IDEs
|
|
231
|
+
* @param {string} projectDir - Project directory
|
|
232
|
+
* @returns {Array} List of detected IDEs
|
|
233
|
+
*/
|
|
234
|
+
async detectInstalledIdes(projectDir) {
|
|
235
|
+
const detected = [];
|
|
236
|
+
|
|
237
|
+
for (const [name, handler] of this.handlers) {
|
|
238
|
+
if (typeof handler.detect === 'function' && (await handler.detect(projectDir))) {
|
|
239
|
+
detected.push(name);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return detected;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
module.exports = { IdeManager };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
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
|
+
module.exports = {
|
|
35
|
+
loadPlatformCodes,
|
|
36
|
+
clearCache,
|
|
37
|
+
};
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# SCM Platform Codes Configuration
|
|
2
|
+
#
|
|
3
|
+
# Each platform entry has:
|
|
4
|
+
# name: Display name shown to users
|
|
5
|
+
# preferred: Whether shown as a recommended option on install
|
|
6
|
+
# suspended: (optional) Message explaining why install is blocked
|
|
7
|
+
# installer:
|
|
8
|
+
# target_dir: Directory where skill directories are installed
|
|
9
|
+
# legacy_targets: (optional) Old target dirs to clean up on reinstall
|
|
10
|
+
# ancestor_conflict_check: (optional) Refuse install when ancestor dir has SCM files
|
|
11
|
+
|
|
12
|
+
platforms:
|
|
13
|
+
antigravity:
|
|
14
|
+
name: "Google Antigravity"
|
|
15
|
+
preferred: false
|
|
16
|
+
installer:
|
|
17
|
+
legacy_targets:
|
|
18
|
+
- .agent/workflows
|
|
19
|
+
target_dir: .agent/skills
|
|
20
|
+
|
|
21
|
+
auggie:
|
|
22
|
+
name: "Auggie"
|
|
23
|
+
preferred: false
|
|
24
|
+
installer:
|
|
25
|
+
legacy_targets:
|
|
26
|
+
- .augment/commands
|
|
27
|
+
target_dir: .augment/skills
|
|
28
|
+
|
|
29
|
+
claude-code:
|
|
30
|
+
name: "Claude Code"
|
|
31
|
+
preferred: true
|
|
32
|
+
installer:
|
|
33
|
+
legacy_targets:
|
|
34
|
+
- .claude/commands
|
|
35
|
+
target_dir: .claude/skills
|
|
36
|
+
|
|
37
|
+
cline:
|
|
38
|
+
name: "Cline"
|
|
39
|
+
preferred: false
|
|
40
|
+
installer:
|
|
41
|
+
legacy_targets:
|
|
42
|
+
- .clinerules/workflows
|
|
43
|
+
target_dir: .cline/skills
|
|
44
|
+
|
|
45
|
+
codex:
|
|
46
|
+
name: "Codex"
|
|
47
|
+
preferred: false
|
|
48
|
+
installer:
|
|
49
|
+
legacy_targets:
|
|
50
|
+
- .codex/prompts
|
|
51
|
+
- ~/.codex/prompts
|
|
52
|
+
target_dir: .agents/skills
|
|
53
|
+
|
|
54
|
+
codebuddy:
|
|
55
|
+
name: "CodeBuddy"
|
|
56
|
+
preferred: false
|
|
57
|
+
installer:
|
|
58
|
+
legacy_targets:
|
|
59
|
+
- .codebuddy/commands
|
|
60
|
+
target_dir: .codebuddy/skills
|
|
61
|
+
|
|
62
|
+
crush:
|
|
63
|
+
name: "Crush"
|
|
64
|
+
preferred: false
|
|
65
|
+
installer:
|
|
66
|
+
legacy_targets:
|
|
67
|
+
- .crush/commands
|
|
68
|
+
target_dir: .crush/skills
|
|
69
|
+
|
|
70
|
+
cursor:
|
|
71
|
+
name: "Cursor"
|
|
72
|
+
preferred: true
|
|
73
|
+
installer:
|
|
74
|
+
legacy_targets:
|
|
75
|
+
- .cursor/commands
|
|
76
|
+
target_dir: .cursor/skills
|
|
77
|
+
|
|
78
|
+
gemini:
|
|
79
|
+
name: "Gemini CLI"
|
|
80
|
+
preferred: false
|
|
81
|
+
installer:
|
|
82
|
+
legacy_targets:
|
|
83
|
+
- .gemini/commands
|
|
84
|
+
target_dir: .gemini/skills
|
|
85
|
+
|
|
86
|
+
github-copilot:
|
|
87
|
+
name: "GitHub Copilot"
|
|
88
|
+
preferred: false
|
|
89
|
+
installer:
|
|
90
|
+
legacy_targets:
|
|
91
|
+
- .github/agents
|
|
92
|
+
- .github/prompts
|
|
93
|
+
target_dir: .github/skills
|
|
94
|
+
|
|
95
|
+
iflow:
|
|
96
|
+
name: "iFlow"
|
|
97
|
+
preferred: false
|
|
98
|
+
installer:
|
|
99
|
+
legacy_targets:
|
|
100
|
+
- .iflow/commands
|
|
101
|
+
target_dir: .iflow/skills
|
|
102
|
+
|
|
103
|
+
junie:
|
|
104
|
+
name: "Junie"
|
|
105
|
+
preferred: false
|
|
106
|
+
installer:
|
|
107
|
+
target_dir: .agents/skills
|
|
108
|
+
|
|
109
|
+
kilo:
|
|
110
|
+
name: "KiloCoder"
|
|
111
|
+
preferred: false
|
|
112
|
+
installer:
|
|
113
|
+
legacy_targets:
|
|
114
|
+
- .kilocode/workflows
|
|
115
|
+
target_dir: .kilocode/skills
|
|
116
|
+
|
|
117
|
+
kiro:
|
|
118
|
+
name: "Kiro"
|
|
119
|
+
preferred: false
|
|
120
|
+
installer:
|
|
121
|
+
legacy_targets:
|
|
122
|
+
- .kiro/steering
|
|
123
|
+
target_dir: .kiro/skills
|
|
124
|
+
|
|
125
|
+
ona:
|
|
126
|
+
name: "Ona"
|
|
127
|
+
preferred: false
|
|
128
|
+
installer:
|
|
129
|
+
target_dir: .ona/skills
|
|
130
|
+
|
|
131
|
+
opencode:
|
|
132
|
+
name: "OpenCode"
|
|
133
|
+
preferred: false
|
|
134
|
+
installer:
|
|
135
|
+
legacy_targets:
|
|
136
|
+
- .opencode/agents
|
|
137
|
+
- .opencode/commands
|
|
138
|
+
- .opencode/agent
|
|
139
|
+
- .opencode/command
|
|
140
|
+
target_dir: .opencode/skills
|
|
141
|
+
|
|
142
|
+
pi:
|
|
143
|
+
name: "Pi"
|
|
144
|
+
preferred: false
|
|
145
|
+
installer:
|
|
146
|
+
target_dir: .pi/skills
|
|
147
|
+
|
|
148
|
+
qoder:
|
|
149
|
+
name: "Qoder"
|
|
150
|
+
preferred: false
|
|
151
|
+
installer:
|
|
152
|
+
target_dir: .qoder/skills
|
|
153
|
+
|
|
154
|
+
qwen:
|
|
155
|
+
name: "QwenCoder"
|
|
156
|
+
preferred: false
|
|
157
|
+
installer:
|
|
158
|
+
legacy_targets:
|
|
159
|
+
- .qwen/commands
|
|
160
|
+
target_dir: .qwen/skills
|
|
161
|
+
|
|
162
|
+
roo:
|
|
163
|
+
name: "Roo Code"
|
|
164
|
+
preferred: false
|
|
165
|
+
installer:
|
|
166
|
+
legacy_targets:
|
|
167
|
+
- .roo/commands
|
|
168
|
+
target_dir: .roo/skills
|
|
169
|
+
|
|
170
|
+
rovo-dev:
|
|
171
|
+
name: "Rovo Dev"
|
|
172
|
+
preferred: false
|
|
173
|
+
installer:
|
|
174
|
+
legacy_targets:
|
|
175
|
+
- .rovodev/workflows
|
|
176
|
+
target_dir: .rovodev/skills
|
|
177
|
+
|
|
178
|
+
trae:
|
|
179
|
+
name: "Trae"
|
|
180
|
+
preferred: false
|
|
181
|
+
installer:
|
|
182
|
+
legacy_targets:
|
|
183
|
+
- .trae/rules
|
|
184
|
+
target_dir: .trae/skills
|
|
185
|
+
|
|
186
|
+
windsurf:
|
|
187
|
+
name: "Windsurf"
|
|
188
|
+
preferred: false
|
|
189
|
+
installer:
|
|
190
|
+
legacy_targets:
|
|
191
|
+
- .windsurf/workflows
|
|
192
|
+
target_dir: .windsurf/skills
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, SCM_FOLDER_NAME } = require('./path-utils');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates launcher command files for each agent
|
|
7
|
+
*/
|
|
8
|
+
class AgentCommandGenerator {
|
|
9
|
+
constructor(scmFolderName = SCM_FOLDER_NAME) {
|
|
10
|
+
this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
|
|
11
|
+
this.scmFolderName = scmFolderName;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Collect agent artifacts for IDE installation
|
|
16
|
+
* @param {string} scmDir - SCM installation directory
|
|
17
|
+
* @param {Array} selectedModules - Modules to include
|
|
18
|
+
* @returns {Object} Artifacts array with metadata
|
|
19
|
+
*/
|
|
20
|
+
async collectAgentArtifacts(scmDir, selectedModules = []) {
|
|
21
|
+
const { getAgentsFromBmad } = require('./scm-artifacts');
|
|
22
|
+
|
|
23
|
+
// Get agents from INSTALLED scm/ directory
|
|
24
|
+
const agents = await getAgentsFromBmad(scmDir, selectedModules);
|
|
25
|
+
|
|
26
|
+
const artifacts = [];
|
|
27
|
+
|
|
28
|
+
for (const agent of agents) {
|
|
29
|
+
const launcherContent = await this.generateLauncherContent(agent);
|
|
30
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
31
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
32
|
+
// Calculate the relative agent path (e.g., bmm/agents/pm.md)
|
|
33
|
+
let agentRelPath = agent.path || '';
|
|
34
|
+
// Normalize path separators for cross-platform compatibility
|
|
35
|
+
agentRelPath = agentRelPath.replaceAll('\\', '/');
|
|
36
|
+
// Remove _scm/ prefix if present to get relative path from project root
|
|
37
|
+
// Handle both absolute paths (/path/to/_scm/...) and relative paths (_scm/...)
|
|
38
|
+
if (agentRelPath.includes('_scm/')) {
|
|
39
|
+
const parts = agentRelPath.split(/_scm\//);
|
|
40
|
+
if (parts.length > 1) {
|
|
41
|
+
agentRelPath = parts.slice(1).join('/');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
artifacts.push({
|
|
45
|
+
type: 'agent-launcher',
|
|
46
|
+
name: agent.name,
|
|
47
|
+
description: agent.description || `${agent.name} agent`,
|
|
48
|
+
module: agent.module,
|
|
49
|
+
canonicalId: agent.canonicalId || '',
|
|
50
|
+
relativePath: path.join(agent.module, 'agents', agentPathInModule), // For command filename
|
|
51
|
+
agentPath: agentRelPath, // Relative path to actual agent file
|
|
52
|
+
content: launcherContent,
|
|
53
|
+
sourcePath: agent.path,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
artifacts,
|
|
59
|
+
counts: {
|
|
60
|
+
agents: agents.length,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Generate launcher content for an agent
|
|
67
|
+
* @param {Object} agent - Agent metadata
|
|
68
|
+
* @returns {string} Launcher file content
|
|
69
|
+
*/
|
|
70
|
+
async generateLauncherContent(agent) {
|
|
71
|
+
// Load the template
|
|
72
|
+
const template = await fs.readFile(this.templatePath, 'utf8');
|
|
73
|
+
|
|
74
|
+
// Replace template variables
|
|
75
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
76
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
77
|
+
return template
|
|
78
|
+
.replaceAll('{{name}}', agent.name)
|
|
79
|
+
.replaceAll('{{module}}', agent.module)
|
|
80
|
+
.replaceAll('{{path}}', agentPathInModule)
|
|
81
|
+
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
|
82
|
+
.replaceAll('_scm', this.scmFolderName)
|
|
83
|
+
.replaceAll('_scm', '_scm');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Write agent launcher artifacts to IDE commands directory
|
|
88
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
89
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
90
|
+
* @returns {number} Count of launchers written
|
|
91
|
+
*/
|
|
92
|
+
async writeAgentLaunchers(baseCommandsDir, artifacts) {
|
|
93
|
+
let writtenCount = 0;
|
|
94
|
+
|
|
95
|
+
for (const artifact of artifacts) {
|
|
96
|
+
if (artifact.type === 'agent-launcher') {
|
|
97
|
+
const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
|
|
98
|
+
await fs.ensureDir(moduleAgentsDir);
|
|
99
|
+
|
|
100
|
+
const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
|
|
101
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
102
|
+
writtenCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return writtenCount;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Write agent launcher artifacts using underscore format (Windows-compatible)
|
|
111
|
+
* Creates flat files like: scm_bmm_pm.md
|
|
112
|
+
*
|
|
113
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
114
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
115
|
+
* @returns {number} Count of launchers written
|
|
116
|
+
*/
|
|
117
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
118
|
+
let writtenCount = 0;
|
|
119
|
+
|
|
120
|
+
for (const artifact of artifacts) {
|
|
121
|
+
if (artifact.type === 'agent-launcher') {
|
|
122
|
+
// Convert relativePath to underscore format: bmm/agents/pm.md → scm_bmm_pm.md
|
|
123
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
124
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
125
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
126
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
127
|
+
writtenCount++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return writtenCount;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Write agent launcher artifacts using dash format (NEW STANDARD)
|
|
136
|
+
* Creates flat files like: scm-agent-bmm-pm.md
|
|
137
|
+
*
|
|
138
|
+
* The scm-agent- prefix distinguishes agents from workflows/tasks/tools.
|
|
139
|
+
*
|
|
140
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
141
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
142
|
+
* @returns {number} Count of launchers written
|
|
143
|
+
*/
|
|
144
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
145
|
+
let writtenCount = 0;
|
|
146
|
+
|
|
147
|
+
for (const artifact of artifacts) {
|
|
148
|
+
if (artifact.type === 'agent-launcher') {
|
|
149
|
+
// Convert relativePath to dash format: bmm/agents/pm.md → scm-agent-bmm-pm.md
|
|
150
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
151
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
152
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
153
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
154
|
+
writtenCount++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return writtenCount;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
163
|
+
* @param {string} agentName - Custom agent name
|
|
164
|
+
* @returns {string} Underscore-formatted filename
|
|
165
|
+
*/
|
|
166
|
+
getCustomAgentColonName(agentName) {
|
|
167
|
+
return customAgentColonName(agentName);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
172
|
+
* @param {string} agentName - Custom agent name
|
|
173
|
+
* @returns {string} Underscore-formatted filename
|
|
174
|
+
*/
|
|
175
|
+
getCustomAgentDashName(agentName) {
|
|
176
|
+
return customAgentDashName(agentName);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
module.exports = { AgentCommandGenerator };
|