bmad-method 6.2.1-next.9 → 6.2.2
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/AGENTS.md +1 -0
- package/README_CN.md +23 -36
- package/package.json +4 -6
- package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/SKILL.md +2 -3
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/SKILL.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/SKILL.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/SKILL.md +1 -1
- package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +1 -1
- package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/SKILL.md +1 -3
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-01-gather-context.md +3 -2
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-02-review.md +34 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-03-triage.md +7 -8
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +129 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/workflow.md +1 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/workflow.md +4 -4
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/SKILL.md +1 -1
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md → bmm-skills/4-implementation/bmad-quick-dev/spec-template.md} +0 -2
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-01-clarify-and-route.md +22 -8
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-02-plan.md +3 -3
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-03-implement.md +6 -0
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-05-present.md +8 -6
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-oneshot.md +2 -2
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/workflow.md +3 -3
- package/src/bmm-skills/module-help.csv +30 -0
- package/src/{core/skills/bmad-advanced-elicitation/workflow.md → core-skills/bmad-advanced-elicitation/SKILL.md} +3 -1
- package/src/{core/skills/bmad-editorial-review-prose/workflow.md → core-skills/bmad-editorial-review-prose/SKILL.md} +5 -0
- package/src/{core/skills/bmad-editorial-review-structure/workflow.md → core-skills/bmad-editorial-review-structure/SKILL.md} +5 -0
- package/src/core-skills/bmad-help/SKILL.md +73 -0
- package/src/{core/skills/bmad-index-docs/workflow.md → core-skills/bmad-index-docs/SKILL.md} +5 -0
- package/src/{core/skills/bmad-review-adversarial-general/workflow.md → core-skills/bmad-review-adversarial-general/SKILL.md} +5 -0
- package/src/{core/skills/bmad-review-edge-case-hunter/workflow.md → core-skills/bmad-review-edge-case-hunter/SKILL.md} +5 -0
- package/src/{core/skills/bmad-shard-doc/workflow.md → core-skills/bmad-shard-doc/SKILL.md} +5 -0
- package/src/core-skills/module-help.csv +11 -0
- package/tools/bmad-npx-wrapper.js +2 -2
- package/tools/cli/commands/install.js +1 -8
- package/tools/cli/external-official-modules.yaml +1 -1
- package/tools/cli/installers/lib/core/config-collector.js +110 -23
- package/tools/cli/installers/lib/core/dependency-resolver.js +11 -11
- package/tools/cli/installers/lib/core/installer.js +4 -214
- package/tools/cli/installers/lib/core/manifest-generator.js +122 -833
- package/tools/cli/installers/lib/core/manifest.js +2 -2
- package/tools/cli/installers/lib/custom/handler.js +1 -247
- package/tools/cli/installers/lib/ide/_base-ide.js +0 -16
- package/tools/cli/installers/lib/ide/_config-driven.js +13 -168
- package/tools/cli/installers/lib/ide/manager.js +2 -7
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +0 -1
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +27 -0
- package/tools/cli/installers/lib/ide/shared/skill-manifest.js +1 -19
- package/tools/cli/installers/lib/modules/manager.js +12 -459
- package/tools/cli/lib/project-root.js +5 -5
- package/tools/cli/lib/ui.js +0 -19
- package/tools/skill-validator.md +52 -22
- package/tools/validate-skills.js +736 -0
- package/src/bmm/data/project-context-template.md +0 -26
- package/src/bmm/module-help.csv +0 -32
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +0 -6
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/product-brief.template.md +0 -10
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01-init.md +0 -170
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01b-continue.md +0 -158
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-02-vision.md +0 -193
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-03-users.md +0 -196
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-04-metrics.md +0 -199
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-05-scope.md +0 -213
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-06-complete.md +0 -159
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/workflow.md +0 -55
- package/src/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +0 -182
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +0 -237
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +0 -249
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +0 -259
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +0 -177
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +0 -476
- package/src/bmm/workflows/1-analysis/research/research.template.md +0 -29
- package/src/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +0 -41
- package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +0 -38
- package/src/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +0 -6
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-01-mode-detection.md +0 -169
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-02-context-gathering.md +0 -114
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-03-execute.md +0 -107
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-04-self-check.md +0 -107
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-05-adversarial-review.md +0 -94
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-06-resolve-findings.md +0 -144
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/workflow.md +0 -38
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +0 -6
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-01-understand.md +0 -185
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-02-investigate.md +0 -140
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-03-generate.md +0 -123
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-04-review.md +0 -195
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/tech-spec-template.md +0 -74
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/workflow.md +0 -73
- package/src/core/module-help.csv +0 -11
- package/src/core/skills/bmad-advanced-elicitation/SKILL.md +0 -6
- package/src/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-distillator/bmad-skill-manifest.yaml +0 -15
- package/src/core/skills/bmad-editorial-review-prose/SKILL.md +0 -6
- package/src/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-editorial-review-structure/SKILL.md +0 -6
- package/src/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-help/SKILL.md +0 -6
- package/src/core/skills/bmad-help/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-help/workflow.md +0 -88
- package/src/core/skills/bmad-index-docs/SKILL.md +0 -6
- package/src/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-init/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-review-adversarial-general/SKILL.md +0 -6
- package/src/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-review-edge-case-hunter/SKILL.md +0 -6
- package/src/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-shard-doc/SKILL.md +0 -6
- package/src/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +0 -1
- package/src/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +0 -1
- package/src/utility/agent-components/activation-rules.txt +0 -6
- package/src/utility/agent-components/activation-steps.txt +0 -14
- package/src/utility/agent-components/agent-command-header.md +0 -1
- package/src/utility/agent-components/agent.customize.template.yaml +0 -41
- package/src/utility/agent-components/handler-action.txt +0 -4
- package/src/utility/agent-components/handler-data.txt +0 -5
- package/src/utility/agent-components/handler-exec.txt +0 -6
- package/src/utility/agent-components/handler-multi.txt +0 -13
- package/src/utility/agent-components/handler-tmpl.txt +0 -5
- package/src/utility/agent-components/menu-handlers.txt +0 -6
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +0 -368
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +0 -179
- package/tools/cli/lib/activation-builder.js +0 -165
- package/tools/cli/lib/agent/compiler.js +0 -516
- package/tools/cli/lib/agent/installer.js +0 -680
- package/tools/cli/lib/agent/template-engine.js +0 -152
- package/tools/cli/lib/agent-analyzer.js +0 -97
- package/tools/cli/lib/agent-party-generator.js +0 -194
- package/tools/cli/lib/xml-handler.js +0 -177
- package/tools/cli/lib/xml-to-markdown.js +0 -82
- package/tools/cli/lib/yaml-xml-builder.js +0 -570
- package/tools/schema/agent.js +0 -489
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/explain-concept.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/mermaid-gen.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/validate-doc.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/write-document.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/documentation-requirements.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/deep-dive-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/index-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-overview-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-scan-report-schema.json +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/source-tree-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-workflow.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/artifact-analyzer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/opportunity-reviewer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/skeptic-reviewer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/web-researcher.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/bmad-manifest.json +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/contextual-discovery.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/draft-and-review.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/finalize.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/guided-elicitation.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/resources/brief-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/workflow.md +0 -0
- /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/SKILL.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/prd-purpose.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/project-types.csv +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01-init.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01b-continue.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02-discovery.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02b-vision.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-03-success.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-04-journeys.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-05-domain.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-06-innovation.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-07-project-type.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-08-scoping.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-09-functional.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-11-polish.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-12-complete.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/templates/prd-template.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/prd-purpose.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/workflow.md +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/domain-complexity.csv +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/prd-purpose.md +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/workflow-validate-prd.md +0 -0
- /package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/architecture-decision-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01b-continue.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-02-context.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-03-starter.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-04-decisions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-05-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-06-structure.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/project-context-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-01-discover.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-02-generate.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-03-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/workflow.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/discover-inputs.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/workflow.md +0 -0
- /package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-04-review.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/workflow.md +0 -0
- /package/src/{bmm → bmm-skills}/module.yaml +0 -0
- /package/src/{core/skills → core-skills}/bmad-advanced-elicitation/methods.csv +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/brain-methods.csv +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01-session-setup.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01b-continue.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02a-user-selected.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02c-random-selection.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-03-technique-execution.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-04-idea-organization.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/template.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/workflow.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/agents/distillate-compressor.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/agents/round-trip-reconstructor.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/compression-rules.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/distillate-format-reference.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/splitting-strategy.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/scripts/analyze_sources.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/resources/core-module.yaml +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/scripts/bmad_init.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/scripts/tests/test_bmad_init.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-01-agent-loading.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-03-graceful-exit.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/workflow.md +0 -0
- /package/src/{core → core-skills}/module.yaml +0 -0
|
@@ -764,10 +764,10 @@ class Manifest {
|
|
|
764
764
|
const configs = {};
|
|
765
765
|
|
|
766
766
|
for (const moduleName of modules) {
|
|
767
|
-
// Handle core module differently - it's in src/core not src/modules/core
|
|
767
|
+
// Handle core module differently - it's in src/core-skills not src/modules/core
|
|
768
768
|
const configPath =
|
|
769
769
|
moduleName === 'core'
|
|
770
|
-
? path.join(process.cwd(), 'src', 'core', 'config.yaml')
|
|
770
|
+
? path.join(process.cwd(), 'src', 'core-skills', 'config.yaml')
|
|
771
771
|
: path.join(process.cwd(), 'src', 'modules', moduleName, 'config.yaml');
|
|
772
772
|
|
|
773
773
|
try {
|
|
@@ -2,19 +2,11 @@ const path = require('node:path');
|
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const yaml = require('yaml');
|
|
4
4
|
const prompts = require('../../../lib/prompts');
|
|
5
|
-
const { FileOps } = require('../../../lib/file-ops');
|
|
6
|
-
const { XmlHandler } = require('../../../lib/xml-handler');
|
|
7
|
-
|
|
8
5
|
/**
|
|
9
6
|
* Handler for custom content (custom.yaml)
|
|
10
|
-
*
|
|
7
|
+
* Discovers custom agents and workflows in the project
|
|
11
8
|
*/
|
|
12
9
|
class CustomHandler {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.fileOps = new FileOps();
|
|
15
|
-
this.xmlHandler = new XmlHandler();
|
|
16
|
-
}
|
|
17
|
-
|
|
18
10
|
/**
|
|
19
11
|
* Find all custom.yaml files in the project
|
|
20
12
|
* @param {string} projectRoot - Project root directory
|
|
@@ -115,244 +107,6 @@ class CustomHandler {
|
|
|
115
107
|
return null;
|
|
116
108
|
}
|
|
117
109
|
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Install custom content
|
|
121
|
-
* @param {string} customPath - Path to custom content directory
|
|
122
|
-
* @param {string} bmadDir - Target bmad directory
|
|
123
|
-
* @param {Object} config - Configuration from custom.yaml
|
|
124
|
-
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
125
|
-
* @returns {Object} Installation result
|
|
126
|
-
*/
|
|
127
|
-
async install(customPath, bmadDir, config, fileTrackingCallback = null) {
|
|
128
|
-
const results = {
|
|
129
|
-
agentsInstalled: 0,
|
|
130
|
-
workflowsInstalled: 0,
|
|
131
|
-
filesCopied: 0,
|
|
132
|
-
preserved: 0,
|
|
133
|
-
errors: [],
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
// Create custom directories in bmad
|
|
138
|
-
const bmadCustomDir = path.join(bmadDir, 'custom');
|
|
139
|
-
const bmadAgentsDir = path.join(bmadCustomDir, 'agents');
|
|
140
|
-
const bmadWorkflowsDir = path.join(bmadCustomDir, 'workflows');
|
|
141
|
-
|
|
142
|
-
await fs.ensureDir(bmadCustomDir);
|
|
143
|
-
await fs.ensureDir(bmadAgentsDir);
|
|
144
|
-
await fs.ensureDir(bmadWorkflowsDir);
|
|
145
|
-
|
|
146
|
-
// Process agents - compile and copy agents
|
|
147
|
-
const agentsDir = path.join(customPath, 'agents');
|
|
148
|
-
if (await fs.pathExists(agentsDir)) {
|
|
149
|
-
await this.compileAndCopyAgents(agentsDir, bmadAgentsDir, bmadDir, config, fileTrackingCallback, results);
|
|
150
|
-
|
|
151
|
-
// Count agent files
|
|
152
|
-
const agentFiles = await this.findFilesRecursively(agentsDir, ['.agent.yaml', '.md']);
|
|
153
|
-
results.agentsInstalled = agentFiles.length;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Process workflows - copy entire workflows directory structure
|
|
157
|
-
const workflowsDir = path.join(customPath, 'workflows');
|
|
158
|
-
if (await fs.pathExists(workflowsDir)) {
|
|
159
|
-
await this.copyDirectory(workflowsDir, bmadWorkflowsDir, results, fileTrackingCallback, config);
|
|
160
|
-
|
|
161
|
-
// Count workflow files
|
|
162
|
-
const workflowFiles = await this.findFilesRecursively(workflowsDir, ['.md']);
|
|
163
|
-
results.workflowsInstalled = workflowFiles.length;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Process any additional files at root
|
|
167
|
-
const entries = await fs.readdir(customPath, { withFileTypes: true });
|
|
168
|
-
for (const entry of entries) {
|
|
169
|
-
if (entry.isFile() && entry.name !== 'custom.yaml' && !entry.name.startsWith('.') && !entry.name.endsWith('.md')) {
|
|
170
|
-
// Skip .md files at root as they're likely docs
|
|
171
|
-
const sourcePath = path.join(customPath, entry.name);
|
|
172
|
-
const targetPath = path.join(bmadCustomDir, entry.name);
|
|
173
|
-
|
|
174
|
-
try {
|
|
175
|
-
// Check if file already exists
|
|
176
|
-
if (await fs.pathExists(targetPath)) {
|
|
177
|
-
// File already exists, preserve it
|
|
178
|
-
results.preserved = (results.preserved || 0) + 1;
|
|
179
|
-
} else {
|
|
180
|
-
await fs.copy(sourcePath, targetPath);
|
|
181
|
-
results.filesCopied++;
|
|
182
|
-
|
|
183
|
-
if (fileTrackingCallback) {
|
|
184
|
-
fileTrackingCallback(targetPath);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
} catch (error) {
|
|
188
|
-
results.errors.push(`Failed to copy file ${entry.name}: ${error.message}`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
} catch (error) {
|
|
193
|
-
results.errors.push(`Installation failed: ${error.message}`);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return results;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Find all files with specific extensions recursively
|
|
201
|
-
* @param {string} dir - Directory to search
|
|
202
|
-
* @param {Array} extensions - File extensions to match
|
|
203
|
-
* @returns {Array} List of matching files
|
|
204
|
-
*/
|
|
205
|
-
async findFilesRecursively(dir, extensions) {
|
|
206
|
-
const files = [];
|
|
207
|
-
|
|
208
|
-
async function search(currentDir) {
|
|
209
|
-
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
210
|
-
|
|
211
|
-
for (const entry of entries) {
|
|
212
|
-
const fullPath = path.join(currentDir, entry.name);
|
|
213
|
-
|
|
214
|
-
if (entry.isDirectory()) {
|
|
215
|
-
await search(fullPath);
|
|
216
|
-
} else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
217
|
-
files.push(fullPath);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
await search(dir);
|
|
223
|
-
return files;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Recursively copy a directory
|
|
228
|
-
* @param {string} sourceDir - Source directory
|
|
229
|
-
* @param {string} targetDir - Target directory
|
|
230
|
-
* @param {Object} results - Results object to update
|
|
231
|
-
* @param {Function} fileTrackingCallback - Optional callback
|
|
232
|
-
* @param {Object} config - Configuration for placeholder replacement
|
|
233
|
-
*/
|
|
234
|
-
async copyDirectory(sourceDir, targetDir, results, fileTrackingCallback, config) {
|
|
235
|
-
await fs.ensureDir(targetDir);
|
|
236
|
-
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
237
|
-
|
|
238
|
-
for (const entry of entries) {
|
|
239
|
-
const sourcePath = path.join(sourceDir, entry.name);
|
|
240
|
-
const targetPath = path.join(targetDir, entry.name);
|
|
241
|
-
|
|
242
|
-
if (entry.isDirectory()) {
|
|
243
|
-
await this.copyDirectory(sourcePath, targetPath, results, fileTrackingCallback, config);
|
|
244
|
-
} else {
|
|
245
|
-
try {
|
|
246
|
-
// Check if file already exists
|
|
247
|
-
if (await fs.pathExists(targetPath)) {
|
|
248
|
-
// File already exists, preserve it
|
|
249
|
-
results.preserved = (results.preserved || 0) + 1;
|
|
250
|
-
} else {
|
|
251
|
-
// Copy with placeholder replacement for text files
|
|
252
|
-
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json'];
|
|
253
|
-
if (textExtensions.some((ext) => entry.name.endsWith(ext))) {
|
|
254
|
-
// Read source content
|
|
255
|
-
let content = await fs.readFile(sourcePath, 'utf8');
|
|
256
|
-
|
|
257
|
-
// Replace placeholders
|
|
258
|
-
content = content.replaceAll('{user_name}', config.user_name || 'User');
|
|
259
|
-
content = content.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
260
|
-
content = content.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
261
|
-
|
|
262
|
-
// Write to target
|
|
263
|
-
await fs.ensureDir(path.dirname(targetPath));
|
|
264
|
-
await fs.writeFile(targetPath, content, 'utf8');
|
|
265
|
-
} else {
|
|
266
|
-
// Copy binary files as-is
|
|
267
|
-
await fs.copy(sourcePath, targetPath);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
results.filesCopied++;
|
|
271
|
-
if (entry.name.endsWith('.md')) {
|
|
272
|
-
results.workflowsInstalled++;
|
|
273
|
-
}
|
|
274
|
-
if (fileTrackingCallback) {
|
|
275
|
-
fileTrackingCallback(targetPath);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
} catch (error) {
|
|
279
|
-
results.errors.push(`Failed to copy ${entry.name}: ${error.message}`);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Compile .agent.yaml files to .md format and handle sidecars
|
|
287
|
-
* @param {string} sourceAgentsPath - Source agents directory
|
|
288
|
-
* @param {string} targetAgentsPath - Target agents directory
|
|
289
|
-
* @param {string} bmadDir - BMAD installation directory
|
|
290
|
-
* @param {Object} config - Configuration for placeholder replacement
|
|
291
|
-
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
292
|
-
* @param {Object} results - Results object to update
|
|
293
|
-
*/
|
|
294
|
-
async compileAndCopyAgents(sourceAgentsPath, targetAgentsPath, bmadDir, config, fileTrackingCallback, results) {
|
|
295
|
-
// Get all .agent.yaml files recursively
|
|
296
|
-
const agentFiles = await this.findFilesRecursively(sourceAgentsPath, ['.agent.yaml']);
|
|
297
|
-
|
|
298
|
-
for (const agentFile of agentFiles) {
|
|
299
|
-
const relativePath = path.relative(sourceAgentsPath, agentFile).split(path.sep).join('/');
|
|
300
|
-
const targetDir = path.join(targetAgentsPath, path.dirname(relativePath));
|
|
301
|
-
|
|
302
|
-
await fs.ensureDir(targetDir);
|
|
303
|
-
|
|
304
|
-
const agentName = path.basename(agentFile, '.agent.yaml');
|
|
305
|
-
const targetMdPath = path.join(targetDir, `${agentName}.md`);
|
|
306
|
-
// Use the actual bmadDir if available (for when installing to temp dir)
|
|
307
|
-
const actualBmadDir = config._bmadDir || bmadDir;
|
|
308
|
-
const customizePath = path.join(actualBmadDir, '_config', 'agents', `custom-${agentName}.customize.yaml`);
|
|
309
|
-
|
|
310
|
-
// Read and compile the YAML
|
|
311
|
-
try {
|
|
312
|
-
const yamlContent = await fs.readFile(agentFile, 'utf8');
|
|
313
|
-
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
314
|
-
|
|
315
|
-
// Create customize template if it doesn't exist
|
|
316
|
-
if (!(await fs.pathExists(customizePath))) {
|
|
317
|
-
const { getSourcePath } = require('../../../lib/project-root');
|
|
318
|
-
const genericTemplatePath = getSourcePath('utility', 'agent-components', 'agent.customize.template.yaml');
|
|
319
|
-
if (await fs.pathExists(genericTemplatePath)) {
|
|
320
|
-
let templateContent = await fs.readFile(genericTemplatePath, 'utf8');
|
|
321
|
-
await fs.writeFile(customizePath, templateContent, 'utf8');
|
|
322
|
-
// Only show customize creation in verbose mode
|
|
323
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
324
|
-
await prompts.log.message(' Created customize: custom-' + agentName + '.customize.yaml');
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// Compile the agent
|
|
330
|
-
const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config });
|
|
331
|
-
|
|
332
|
-
// Replace placeholders in the compiled content
|
|
333
|
-
let processedXml = xml;
|
|
334
|
-
processedXml = processedXml.replaceAll('{user_name}', config.user_name || 'User');
|
|
335
|
-
processedXml = processedXml.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
336
|
-
processedXml = processedXml.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
337
|
-
|
|
338
|
-
// Write the compiled MD file
|
|
339
|
-
await fs.writeFile(targetMdPath, processedXml, 'utf8');
|
|
340
|
-
|
|
341
|
-
// Track the file
|
|
342
|
-
if (fileTrackingCallback) {
|
|
343
|
-
fileTrackingCallback(targetMdPath);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Only show compilation details in verbose mode
|
|
347
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
348
|
-
await prompts.log.message(' Compiled agent: ' + agentName + ' -> ' + path.relative(targetAgentsPath, targetMdPath));
|
|
349
|
-
}
|
|
350
|
-
} catch (error) {
|
|
351
|
-
await prompts.log.warn(' Failed to compile agent ' + agentName + ': ' + error.message);
|
|
352
|
-
results.errors.push(`Failed to compile agent ${agentName}: ${error.message}`);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
110
|
}
|
|
357
111
|
|
|
358
112
|
module.exports = { CustomHandler };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
|
-
const { XmlHandler } = require('../../../lib/xml-handler');
|
|
4
3
|
const prompts = require('../../../lib/prompts');
|
|
5
4
|
const { getSourcePath } = require('../../../lib/project-root');
|
|
6
5
|
const { BMAD_FOLDER_NAME } = require('./shared/path-utils');
|
|
@@ -18,7 +17,6 @@ class BaseIdeSetup {
|
|
|
18
17
|
this.rulesDir = null; // Override in subclasses
|
|
19
18
|
this.configFile = null; // Override in subclasses when detection is file-based
|
|
20
19
|
this.detectionPaths = []; // Additional paths that indicate the IDE is configured
|
|
21
|
-
this.xmlHandler = new XmlHandler();
|
|
22
20
|
this.bmadFolderName = BMAD_FOLDER_NAME; // Default, can be overridden
|
|
23
21
|
}
|
|
24
22
|
|
|
@@ -30,15 +28,6 @@ class BaseIdeSetup {
|
|
|
30
28
|
this.bmadFolderName = bmadFolderName;
|
|
31
29
|
}
|
|
32
30
|
|
|
33
|
-
/**
|
|
34
|
-
* Get the agent command activation header from the central template
|
|
35
|
-
* @returns {string} The activation header text
|
|
36
|
-
*/
|
|
37
|
-
async getAgentCommandHeader() {
|
|
38
|
-
const headerPath = getSourcePath('utility', 'agent-components', 'agent-command-header.md');
|
|
39
|
-
return await fs.readFile(headerPath, 'utf8');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
31
|
/**
|
|
43
32
|
* Main setup method - must be implemented by subclasses
|
|
44
33
|
* @param {string} projectDir - Project directory
|
|
@@ -511,11 +500,6 @@ class BaseIdeSetup {
|
|
|
511
500
|
// Replace placeholders
|
|
512
501
|
let processed = content;
|
|
513
502
|
|
|
514
|
-
// Inject activation block for agent files FIRST (before replacements)
|
|
515
|
-
if (metadata.name && content.includes('<agent')) {
|
|
516
|
-
processed = this.xmlHandler.injectActivationSimple(processed, metadata);
|
|
517
|
-
}
|
|
518
|
-
|
|
519
503
|
// Only replace {project-root} if a specific projectDir is provided
|
|
520
504
|
// Otherwise leave the placeholder intact
|
|
521
505
|
// Note: Don't add trailing slash - paths in source include leading slash
|
|
@@ -4,9 +4,6 @@ const fs = require('fs-extra');
|
|
|
4
4
|
const yaml = require('yaml');
|
|
5
5
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
6
6
|
const prompts = require('../../../lib/prompts');
|
|
7
|
-
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
8
|
-
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
9
|
-
const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
|
|
10
7
|
const csv = require('csv-parse/sync');
|
|
11
8
|
|
|
12
9
|
/**
|
|
@@ -115,53 +112,20 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
115
112
|
* @returns {Promise<Object>} Installation result
|
|
116
113
|
*/
|
|
117
114
|
async installToTarget(projectDir, bmadDir, config, options) {
|
|
118
|
-
const { target_dir
|
|
115
|
+
const { target_dir } = config;
|
|
119
116
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const skipStandardArtifacts = Array.isArray(artifact_types) && artifact_types.length === 0;
|
|
123
|
-
if (skipStandardArtifacts && !config.skill_format) {
|
|
124
|
-
return { success: true, results: { agents: 0, workflows: 0, tasks: 0, tools: 0, skills: 0 } };
|
|
117
|
+
if (!config.skill_format) {
|
|
118
|
+
return { success: false, reason: 'missing-skill-format', error: 'Installer config missing skill_format — cannot install skills' };
|
|
125
119
|
}
|
|
126
120
|
|
|
127
121
|
const targetPath = path.join(projectDir, target_dir);
|
|
128
122
|
await this.ensureDir(targetPath);
|
|
129
123
|
|
|
130
|
-
|
|
131
|
-
const results = {
|
|
132
|
-
this.skillWriteTracker = config.skill_format ? new Set() : null;
|
|
133
|
-
|
|
134
|
-
// Install standard artifacts (agents, workflows, tasks, tools)
|
|
135
|
-
if (!skipStandardArtifacts) {
|
|
136
|
-
// Install agents
|
|
137
|
-
if (!artifact_types || artifact_types.includes('agents')) {
|
|
138
|
-
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
139
|
-
const { artifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules);
|
|
140
|
-
results.agents = await this.writeAgentArtifacts(targetPath, artifacts, template_type, config);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Install workflows
|
|
144
|
-
if (!artifact_types || artifact_types.includes('workflows')) {
|
|
145
|
-
const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
146
|
-
const { artifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
|
|
147
|
-
results.workflows = await this.writeWorkflowArtifacts(targetPath, artifacts, template_type, config);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Install tasks and tools using template system (supports TOML for Gemini, MD for others)
|
|
151
|
-
if (!artifact_types || artifact_types.includes('tasks') || artifact_types.includes('tools')) {
|
|
152
|
-
const taskToolGen = new TaskToolCommandGenerator(this.bmadFolderName);
|
|
153
|
-
const { artifacts } = await taskToolGen.collectTaskToolArtifacts(bmadDir);
|
|
154
|
-
const taskToolResult = await this.writeTaskToolArtifacts(targetPath, artifacts, template_type, config);
|
|
155
|
-
results.tasks = taskToolResult.tasks || 0;
|
|
156
|
-
results.tools = taskToolResult.tools || 0;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
124
|
+
this.skillWriteTracker = new Set();
|
|
125
|
+
const results = { skills: 0 };
|
|
159
126
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
results.skills = await this.installVerbatimSkills(projectDir, bmadDir, targetPath, config);
|
|
163
|
-
results.skillDirectories = this.skillWriteTracker ? this.skillWriteTracker.size : 0;
|
|
164
|
-
}
|
|
127
|
+
results.skills = await this.installVerbatimSkills(projectDir, bmadDir, targetPath, config);
|
|
128
|
+
results.skillDirectories = this.skillWriteTracker.size;
|
|
165
129
|
|
|
166
130
|
await this.printSummary(results, target_dir, options);
|
|
167
131
|
this.skillWriteTracker = null;
|
|
@@ -177,15 +141,11 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
177
141
|
* @returns {Promise<Object>} Installation result
|
|
178
142
|
*/
|
|
179
143
|
async installToMultipleTargets(projectDir, bmadDir, targets, options) {
|
|
180
|
-
const allResults = {
|
|
144
|
+
const allResults = { skills: 0 };
|
|
181
145
|
|
|
182
146
|
for (const target of targets) {
|
|
183
147
|
const result = await this.installToTarget(projectDir, bmadDir, target, options);
|
|
184
148
|
if (result.success) {
|
|
185
|
-
allResults.agents += result.results.agents || 0;
|
|
186
|
-
allResults.workflows += result.results.workflows || 0;
|
|
187
|
-
allResults.tasks += result.results.tasks || 0;
|
|
188
|
-
allResults.tools += result.results.tools || 0;
|
|
189
149
|
allResults.skills += result.results.skills || 0;
|
|
190
150
|
}
|
|
191
151
|
}
|
|
@@ -193,118 +153,6 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
193
153
|
return { success: true, results: allResults };
|
|
194
154
|
}
|
|
195
155
|
|
|
196
|
-
/**
|
|
197
|
-
* Write agent artifacts to target directory
|
|
198
|
-
* @param {string} targetPath - Target directory path
|
|
199
|
-
* @param {Array} artifacts - Agent artifacts
|
|
200
|
-
* @param {string} templateType - Template type to use
|
|
201
|
-
* @param {Object} config - Installation configuration
|
|
202
|
-
* @returns {Promise<number>} Count of artifacts written
|
|
203
|
-
*/
|
|
204
|
-
async writeAgentArtifacts(targetPath, artifacts, templateType, config = {}) {
|
|
205
|
-
// Try to load platform-specific template, fall back to default-agent
|
|
206
|
-
const { content: template, extension } = await this.loadTemplate(templateType, 'agent', config, 'default-agent');
|
|
207
|
-
let count = 0;
|
|
208
|
-
|
|
209
|
-
for (const artifact of artifacts) {
|
|
210
|
-
const content = this.renderTemplate(template, artifact);
|
|
211
|
-
const filename = this.generateFilename(artifact, 'agent', extension);
|
|
212
|
-
|
|
213
|
-
if (config.skill_format) {
|
|
214
|
-
await this.writeSkillFile(targetPath, artifact, content);
|
|
215
|
-
} else {
|
|
216
|
-
const filePath = path.join(targetPath, filename);
|
|
217
|
-
await this.writeFile(filePath, content);
|
|
218
|
-
}
|
|
219
|
-
count++;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
return count;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Write workflow artifacts to target directory
|
|
227
|
-
* @param {string} targetPath - Target directory path
|
|
228
|
-
* @param {Array} artifacts - Workflow artifacts
|
|
229
|
-
* @param {string} templateType - Template type to use
|
|
230
|
-
* @param {Object} config - Installation configuration
|
|
231
|
-
* @returns {Promise<number>} Count of artifacts written
|
|
232
|
-
*/
|
|
233
|
-
async writeWorkflowArtifacts(targetPath, artifacts, templateType, config = {}) {
|
|
234
|
-
let count = 0;
|
|
235
|
-
|
|
236
|
-
for (const artifact of artifacts) {
|
|
237
|
-
if (artifact.type === 'workflow-command') {
|
|
238
|
-
const workflowTemplateType = config.md_workflow_template || `${templateType}-workflow`;
|
|
239
|
-
const { content: template, extension } = await this.loadTemplate(workflowTemplateType, '', config, 'default-workflow');
|
|
240
|
-
const content = this.renderTemplate(template, artifact);
|
|
241
|
-
const filename = this.generateFilename(artifact, 'workflow', extension);
|
|
242
|
-
|
|
243
|
-
if (config.skill_format) {
|
|
244
|
-
await this.writeSkillFile(targetPath, artifact, content);
|
|
245
|
-
} else {
|
|
246
|
-
const filePath = path.join(targetPath, filename);
|
|
247
|
-
await this.writeFile(filePath, content);
|
|
248
|
-
}
|
|
249
|
-
count++;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return count;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Write task/tool artifacts to target directory using templates
|
|
258
|
-
* @param {string} targetPath - Target directory path
|
|
259
|
-
* @param {Array} artifacts - Task/tool artifacts
|
|
260
|
-
* @param {string} templateType - Template type to use
|
|
261
|
-
* @param {Object} config - Installation configuration
|
|
262
|
-
* @returns {Promise<Object>} Counts of tasks and tools written
|
|
263
|
-
*/
|
|
264
|
-
async writeTaskToolArtifacts(targetPath, artifacts, templateType, config = {}) {
|
|
265
|
-
let taskCount = 0;
|
|
266
|
-
let toolCount = 0;
|
|
267
|
-
|
|
268
|
-
// Pre-load templates to avoid repeated file I/O in the loop
|
|
269
|
-
const taskTemplate = await this.loadTemplate(templateType, 'task', config, 'default-task');
|
|
270
|
-
const toolTemplate = await this.loadTemplate(templateType, 'tool', config, 'default-tool');
|
|
271
|
-
|
|
272
|
-
const { artifact_types } = config;
|
|
273
|
-
|
|
274
|
-
for (const artifact of artifacts) {
|
|
275
|
-
if (artifact.type !== 'task' && artifact.type !== 'tool') {
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Skip if the specific artifact type is not requested in config
|
|
280
|
-
if (artifact_types) {
|
|
281
|
-
if (artifact.type === 'task' && !artifact_types.includes('tasks')) continue;
|
|
282
|
-
if (artifact.type === 'tool' && !artifact_types.includes('tools')) continue;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// Use pre-loaded template based on artifact type
|
|
286
|
-
const { content: template, extension } = artifact.type === 'task' ? taskTemplate : toolTemplate;
|
|
287
|
-
|
|
288
|
-
const content = this.renderTemplate(template, artifact);
|
|
289
|
-
const filename = this.generateFilename(artifact, artifact.type, extension);
|
|
290
|
-
|
|
291
|
-
if (config.skill_format) {
|
|
292
|
-
await this.writeSkillFile(targetPath, artifact, content);
|
|
293
|
-
} else {
|
|
294
|
-
const filePath = path.join(targetPath, filename);
|
|
295
|
-
await this.writeFile(filePath, content);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (artifact.type === 'task') {
|
|
299
|
-
taskCount++;
|
|
300
|
-
} else {
|
|
301
|
-
toolCount++;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return { tasks: taskCount, tools: toolCount };
|
|
306
|
-
}
|
|
307
|
-
|
|
308
156
|
/**
|
|
309
157
|
* Load template based on type and configuration
|
|
310
158
|
* @param {string} templateType - Template type (claude, windsurf, etc.)
|
|
@@ -630,7 +478,7 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
|
|
630
478
|
}
|
|
631
479
|
|
|
632
480
|
/**
|
|
633
|
-
* Install verbatim
|
|
481
|
+
* Install verbatim native SKILL.md directories from skill-manifest.csv.
|
|
634
482
|
* Copies the entire source directory as-is into the IDE skill directory.
|
|
635
483
|
* The source SKILL.md is used directly — no frontmatter transformation or file generation.
|
|
636
484
|
* @param {string} projectDir - Project directory
|
|
@@ -711,13 +559,10 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
|
|
711
559
|
*/
|
|
712
560
|
async printSummary(results, targetDir, options = {}) {
|
|
713
561
|
if (options.silent) return;
|
|
714
|
-
const
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
if (skillCount > 0) parts.push(`${skillCount} skills`);
|
|
719
|
-
if (results.agents > 0) parts.push(`${results.agents} agents`);
|
|
720
|
-
await prompts.log.success(`${this.name} configured: ${parts.join(', ')} → ${targetDir}`);
|
|
562
|
+
const count = results.skillDirectories || results.skills || 0;
|
|
563
|
+
if (count > 0) {
|
|
564
|
+
await prompts.log.success(`${this.name} configured: ${count} skills → ${targetDir}`);
|
|
565
|
+
}
|
|
721
566
|
}
|
|
722
567
|
|
|
723
568
|
/**
|
|
@@ -159,14 +159,9 @@ class IdeManager {
|
|
|
159
159
|
// Build detail string from handler-returned data
|
|
160
160
|
let detail = '';
|
|
161
161
|
if (handlerResult && handlerResult.results) {
|
|
162
|
-
// Config-driven handlers return { success, results: { agents, workflows, tasks, tools } }
|
|
163
162
|
const r = handlerResult.results;
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
const skillCount = totalDirs - (r.agents || 0);
|
|
167
|
-
if (skillCount > 0) parts.push(`${skillCount} skills`);
|
|
168
|
-
if (r.agents > 0) parts.push(`${r.agents} agents`);
|
|
169
|
-
detail = parts.join(', ');
|
|
163
|
+
const count = r.skillDirectories || r.skills || 0;
|
|
164
|
+
if (count > 0) detail = `${count} skills`;
|
|
170
165
|
}
|
|
171
166
|
// Propagate handler's success status (default true for backward compat)
|
|
172
167
|
const success = handlerResult?.success !== false;
|
|
@@ -4,7 +4,6 @@ const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, BMAD
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates launcher command files for each agent
|
|
7
|
-
* Similar to WorkflowCommandGenerator but for agents
|
|
8
7
|
*/
|
|
9
8
|
class AgentCommandGenerator {
|
|
10
9
|
constructor(bmadFolderName = BMAD_FOLDER_NAME) {
|
|
@@ -5,6 +5,33 @@ const { loadSkillManifest, getCanonicalId } = require('./skill-manifest');
|
|
|
5
5
|
/**
|
|
6
6
|
* Helpers for gathering BMAD agents/tasks from the installed tree.
|
|
7
7
|
* Shared by installers that need Claude-style exports.
|
|
8
|
+
*
|
|
9
|
+
* TODO: Dead code cleanup — compiled XML agents are retired.
|
|
10
|
+
*
|
|
11
|
+
* All agents now use the SKILL.md directory format with bmad-skill-manifest.yaml
|
|
12
|
+
* (type: agent). The legacy pipeline below only discovers compiled .md files
|
|
13
|
+
* containing <agent> XML tags, which no longer exist. The following are dead:
|
|
14
|
+
*
|
|
15
|
+
* - getAgentsFromBmad() — scans {module}/agents/ for .md files with <agent> tags
|
|
16
|
+
* - getAgentsFromDir() — recursive helper for the above
|
|
17
|
+
* - AgentCommandGenerator — (agent-command-generator.js) generates launcher .md files
|
|
18
|
+
* that tell the LLM to load a compiled agent .md file
|
|
19
|
+
* - agent-command-template.md — (templates/) the launcher template with hardcoded
|
|
20
|
+
* {module}/agents/{{path}} reference
|
|
21
|
+
*
|
|
22
|
+
* Agent metadata for agent-manifest.csv is now handled entirely by
|
|
23
|
+
* ManifestGenerator.getAgentsFromDirRecursive() in manifest-generator.js,
|
|
24
|
+
* which walks the full module tree and finds type:agent directories.
|
|
25
|
+
*
|
|
26
|
+
* IDE installation of agents is handled by the native skill pipeline —
|
|
27
|
+
* each agent's SKILL.md directory is installed directly to the IDE's
|
|
28
|
+
* skills path, so no launcher intermediary is needed.
|
|
29
|
+
*
|
|
30
|
+
* Cleanup: remove getAgentsFromBmad, getAgentsFromDir, their exports,
|
|
31
|
+
* AgentCommandGenerator, agent-command-template.md, and all call sites
|
|
32
|
+
* in IDE installers that invoke collectAgentArtifacts / writeAgentLaunchers /
|
|
33
|
+
* writeColonArtifacts / writeDashArtifacts.
|
|
34
|
+
* getTasksFromBmad and getTasksFromDir may still be live — verify before removing.
|
|
8
35
|
*/
|
|
9
36
|
async function getAgentsFromBmad(bmadDir, selectedModules = []) {
|
|
10
37
|
const agents = [];
|
|
@@ -27,7 +27,7 @@ async function loadSkillManifest(dirPath) {
|
|
|
27
27
|
/**
|
|
28
28
|
* Get the canonicalId for a specific file from a loaded skill manifest.
|
|
29
29
|
* @param {Object|null} manifest - Loaded manifest (from loadSkillManifest)
|
|
30
|
-
* @param {string} filename - Source filename to look up (e.g., 'pm.md', 'help.md'
|
|
30
|
+
* @param {string} filename - Source filename to look up (e.g., 'pm.md', 'help.md')
|
|
31
31
|
* @returns {string} canonicalId or empty string
|
|
32
32
|
*/
|
|
33
33
|
function getCanonicalId(manifest, filename) {
|
|
@@ -36,12 +36,6 @@ function getCanonicalId(manifest, filename) {
|
|
|
36
36
|
if (manifest.__single) return manifest.__single.canonicalId || '';
|
|
37
37
|
// Multi-entry: look up by filename directly
|
|
38
38
|
if (manifest[filename]) return manifest[filename].canonicalId || '';
|
|
39
|
-
// Fallback: try alternate extensions for compiled files
|
|
40
|
-
const baseName = filename.replace(/\.(md|xml)$/i, '');
|
|
41
|
-
const agentKey = `${baseName}.agent.yaml`;
|
|
42
|
-
if (manifest[agentKey]) return manifest[agentKey].canonicalId || '';
|
|
43
|
-
const xmlKey = `${baseName}.xml`;
|
|
44
|
-
if (manifest[xmlKey]) return manifest[xmlKey].canonicalId || '';
|
|
45
39
|
return '';
|
|
46
40
|
}
|
|
47
41
|
|
|
@@ -57,12 +51,6 @@ function getArtifactType(manifest, filename) {
|
|
|
57
51
|
if (manifest.__single) return manifest.__single.type || null;
|
|
58
52
|
// Multi-entry: look up by filename directly
|
|
59
53
|
if (manifest[filename]) return manifest[filename].type || null;
|
|
60
|
-
// Fallback: try alternate extensions for compiled files
|
|
61
|
-
const baseName = filename.replace(/\.(md|xml)$/i, '');
|
|
62
|
-
const agentKey = `${baseName}.agent.yaml`;
|
|
63
|
-
if (manifest[agentKey]) return manifest[agentKey].type || null;
|
|
64
|
-
const xmlKey = `${baseName}.xml`;
|
|
65
|
-
if (manifest[xmlKey]) return manifest[xmlKey].type || null;
|
|
66
54
|
return null;
|
|
67
55
|
}
|
|
68
56
|
|
|
@@ -78,12 +66,6 @@ function getInstallToBmad(manifest, filename) {
|
|
|
78
66
|
if (manifest.__single) return manifest.__single.install_to_bmad !== false;
|
|
79
67
|
// Multi-entry: look up by filename directly
|
|
80
68
|
if (manifest[filename]) return manifest[filename].install_to_bmad !== false;
|
|
81
|
-
// Fallback: try alternate extensions for compiled files
|
|
82
|
-
const baseName = filename.replace(/\.(md|xml)$/i, '');
|
|
83
|
-
const agentKey = `${baseName}.agent.yaml`;
|
|
84
|
-
if (manifest[agentKey]) return manifest[agentKey].install_to_bmad !== false;
|
|
85
|
-
const xmlKey = `${baseName}.xml`;
|
|
86
|
-
if (manifest[xmlKey]) return manifest[xmlKey].install_to_bmad !== false;
|
|
87
69
|
return true;
|
|
88
70
|
}
|
|
89
71
|
|