bmad-method 4.37.0 ā 4.39.1
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/.github/ISSUE_TEMPLATE/bug_report.md +3 -3
- package/.github/ISSUE_TEMPLATE/feature_request.md +3 -3
- package/.github/workflows/discord.yaml +11 -2
- package/.github/workflows/format-check.yaml +42 -0
- package/.github/workflows/manual-release.yaml +173 -0
- package/.husky/pre-commit +3 -0
- package/.vscode/settings.json +26 -1
- package/CHANGELOG.md +2 -23
- package/README.md +2 -0
- package/bmad-core/agent-teams/team-all.yaml +1 -1
- package/bmad-core/agents/analyst.md +16 -15
- package/bmad-core/agents/architect.md +11 -11
- package/bmad-core/agents/bmad-master.md +23 -22
- package/bmad-core/agents/bmad-orchestrator.md +13 -17
- package/bmad-core/agents/dev.md +14 -11
- package/bmad-core/agents/pm.md +15 -14
- package/bmad-core/agents/po.md +9 -8
- package/bmad-core/agents/qa.md +42 -22
- package/bmad-core/agents/sm.md +7 -6
- package/bmad-core/agents/ux-expert.md +6 -5
- package/bmad-core/core-config.yaml +2 -0
- package/bmad-core/data/bmad-kb.md +1 -1
- package/bmad-core/data/test-levels-framework.md +146 -0
- package/bmad-core/data/test-priorities-matrix.md +172 -0
- package/bmad-core/tasks/apply-qa-fixes.md +148 -0
- package/bmad-core/tasks/facilitate-brainstorming-session.md +1 -1
- package/bmad-core/tasks/nfr-assess.md +343 -0
- package/bmad-core/tasks/qa-gate.md +161 -0
- package/bmad-core/tasks/review-story.md +234 -74
- package/bmad-core/tasks/risk-profile.md +353 -0
- package/bmad-core/tasks/test-design.md +174 -0
- package/bmad-core/tasks/trace-requirements.md +264 -0
- package/bmad-core/templates/architecture-tmpl.yaml +49 -49
- package/bmad-core/templates/brainstorming-output-tmpl.yaml +5 -5
- package/bmad-core/templates/brownfield-architecture-tmpl.yaml +31 -31
- package/bmad-core/templates/brownfield-prd-tmpl.yaml +13 -13
- package/bmad-core/templates/competitor-analysis-tmpl.yaml +19 -6
- package/bmad-core/templates/front-end-architecture-tmpl.yaml +21 -9
- package/bmad-core/templates/front-end-spec-tmpl.yaml +24 -24
- package/bmad-core/templates/fullstack-architecture-tmpl.yaml +122 -104
- package/bmad-core/templates/market-research-tmpl.yaml +2 -2
- package/bmad-core/templates/prd-tmpl.yaml +9 -9
- package/bmad-core/templates/project-brief-tmpl.yaml +4 -4
- package/bmad-core/templates/qa-gate-tmpl.yaml +102 -0
- package/bmad-core/templates/story-tmpl.yaml +12 -12
- package/bmad-core/workflows/brownfield-fullstack.yaml +9 -9
- package/bmad-core/workflows/brownfield-service.yaml +1 -1
- package/bmad-core/workflows/brownfield-ui.yaml +1 -1
- package/bmad-core/workflows/greenfield-fullstack.yaml +1 -1
- package/bmad-core/workflows/greenfield-service.yaml +1 -1
- package/bmad-core/workflows/greenfield-ui.yaml +1 -1
- package/common/utils/bmad-doc-template.md +5 -5
- package/dist/agents/analyst.txt +1086 -1079
- package/dist/agents/architect.txt +1534 -1526
- package/dist/agents/bmad-master.txt +646 -632
- package/dist/agents/bmad-orchestrator.txt +40 -18
- package/dist/agents/dev.txt +158 -19
- package/dist/agents/pm.txt +1082 -1107
- package/dist/agents/po.txt +314 -332
- package/dist/agents/qa.txt +1754 -151
- package/dist/agents/sm.txt +88 -98
- package/dist/agents/ux-expert.txt +80 -87
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +109 -146
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +75 -86
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +41 -48
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +1903 -1941
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +15 -50
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +149 -195
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -15
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +20 -37
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +2660 -2752
- package/dist/expansion-packs/bmad-creative-writing/agents/beta-reader.txt +871 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/book-critic.txt +78 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/character-psychologist.txt +839 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/cover-designer.txt +85 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/dialog-specialist.txt +861 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/editor.txt +796 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/genre-specialist.txt +927 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/narrative-designer.txt +842 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/plot-architect.txt +1126 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/world-builder.txt +864 -0
- package/dist/expansion-packs/bmad-creative-writing/teams/agent-team.txt +5917 -0
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +25 -27
- package/dist/teams/team-all.txt +5541 -3768
- package/dist/teams/team-fullstack.txt +3014 -2987
- package/dist/teams/team-ide-minimal.txt +2219 -469
- package/dist/teams/team-no-ui.txt +2993 -2966
- package/docs/enhanced-ide-development-workflow.md +220 -15
- package/docs/user-guide.md +271 -18
- package/docs/versioning-and-releases.md +122 -44
- package/docs/working-in-the-brownfield.md +264 -31
- package/eslint.config.mjs +119 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +4 -4
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +1 -1
- package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +1 -1
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +26 -28
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +50 -50
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +23 -23
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +24 -24
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +42 -42
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +65 -65
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +5 -5
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +1 -1
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +3 -3
- package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +1 -1
- package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +1 -1
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +23 -23
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +63 -63
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +20 -20
- package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +65 -65
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +5 -5
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +1 -1
- package/expansion-packs/bmad-creative-writing/README.md +132 -0
- package/expansion-packs/bmad-creative-writing/agent-teams/agent-team.yaml +19 -0
- package/expansion-packs/bmad-creative-writing/agents/beta-reader.md +91 -0
- package/expansion-packs/bmad-creative-writing/agents/book-critic.md +35 -0
- package/expansion-packs/bmad-creative-writing/agents/character-psychologist.md +90 -0
- package/expansion-packs/bmad-creative-writing/agents/cover-designer.md +41 -0
- package/expansion-packs/bmad-creative-writing/agents/dialog-specialist.md +89 -0
- package/expansion-packs/bmad-creative-writing/agents/editor.md +90 -0
- package/expansion-packs/bmad-creative-writing/agents/genre-specialist.md +92 -0
- package/expansion-packs/bmad-creative-writing/agents/narrative-designer.md +90 -0
- package/expansion-packs/bmad-creative-writing/agents/plot-architect.md +92 -0
- package/expansion-packs/bmad-creative-writing/agents/world-builder.md +91 -0
- package/expansion-packs/bmad-creative-writing/checklists/beta-feedback-closure-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/character-consistency-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/comedic-timing-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/cyberpunk-aesthetic-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/ebook-formatting-checklist.md +15 -0
- package/expansion-packs/bmad-creative-writing/checklists/epic-poetry-meter-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/fantasy-magic-system-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/foreshadowing-payoff-checklist.md +15 -0
- package/expansion-packs/bmad-creative-writing/checklists/genre-tropes-checklist.md +15 -0
- package/expansion-packs/bmad-creative-writing/checklists/historical-accuracy-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/horror-suspense-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/kdp-cover-ready-checklist.md +18 -0
- package/expansion-packs/bmad-creative-writing/checklists/line-edit-quality-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/marketing-copy-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/mystery-clue-trail-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/orbital-mechanics-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/plot-structure-checklist.md +49 -0
- package/expansion-packs/bmad-creative-writing/checklists/publication-readiness-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/romance-emotional-beats-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/scene-quality-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/scifi-technology-plausibility-checklist.md +15 -0
- package/expansion-packs/bmad-creative-writing/checklists/sensitivity-representation-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/steampunk-gadget-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/thriller-pacing-stakes-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/timeline-continuity-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/world-building-continuity-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/checklists/ya-appropriateness-checklist.md +16 -0
- package/expansion-packs/bmad-creative-writing/config.yaml +11 -0
- package/expansion-packs/bmad-creative-writing/data/bmad-kb.md +197 -0
- package/expansion-packs/bmad-creative-writing/data/story-structures.md +58 -0
- package/expansion-packs/bmad-creative-writing/docs/brief.md +183 -0
- package/expansion-packs/bmad-creative-writing/tasks/advanced-elicitation.md +117 -0
- package/expansion-packs/bmad-creative-writing/tasks/analyze-reader-feedback.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/analyze-story-structure.md +55 -0
- package/expansion-packs/bmad-creative-writing/tasks/assemble-kdp-package.md +22 -0
- package/expansion-packs/bmad-creative-writing/tasks/brainstorm-premise.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/build-world.md +17 -0
- package/expansion-packs/bmad-creative-writing/tasks/character-depth-pass.md +15 -0
- package/expansion-packs/bmad-creative-writing/tasks/create-doc.md +101 -0
- package/expansion-packs/bmad-creative-writing/tasks/create-draft-section.md +19 -0
- package/expansion-packs/bmad-creative-writing/tasks/critical-review.md +19 -0
- package/expansion-packs/bmad-creative-writing/tasks/develop-character.md +17 -0
- package/expansion-packs/bmad-creative-writing/tasks/execute-checklist.md +93 -0
- package/expansion-packs/bmad-creative-writing/tasks/expand-premise.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/expand-synopsis.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/final-polish.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-cover-brief.md +18 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-cover-prompts.md +19 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-scene-list.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/incorporate-feedback.md +18 -0
- package/expansion-packs/bmad-creative-writing/tasks/outline-scenes.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/provide-feedback.md +17 -0
- package/expansion-packs/bmad-creative-writing/tasks/publish-chapter.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/quick-feedback.md +15 -0
- package/expansion-packs/bmad-creative-writing/tasks/select-next-arc.md +16 -0
- package/expansion-packs/bmad-creative-writing/tasks/workshop-dialog.md +51 -0
- package/expansion-packs/bmad-creative-writing/templates/beta-feedback-form.yaml +96 -0
- package/expansion-packs/bmad-creative-writing/templates/chapter-draft-tmpl.yaml +81 -0
- package/expansion-packs/bmad-creative-writing/templates/character-profile-tmpl.yaml +92 -0
- package/expansion-packs/bmad-creative-writing/templates/cover-design-brief-tmpl.yaml +97 -0
- package/expansion-packs/bmad-creative-writing/templates/premise-brief-tmpl.yaml +77 -0
- package/expansion-packs/bmad-creative-writing/templates/scene-list-tmpl.yaml +54 -0
- package/expansion-packs/bmad-creative-writing/templates/story-outline-tmpl.yaml +96 -0
- package/expansion-packs/bmad-creative-writing/templates/world-guide-tmpl.yaml +88 -0
- package/expansion-packs/bmad-creative-writing/workflows/book-cover-design-workflow.md +176 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-greenfield-workflow.yaml +58 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-serial-workflow.yaml +51 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-snowflake-workflow.yaml +69 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-writing.yaml +92 -0
- package/expansion-packs/bmad-creative-writing/workflows/screenplay-development.yaml +86 -0
- package/expansion-packs/bmad-creative-writing/workflows/series-planning.yaml +79 -0
- package/expansion-packs/bmad-creative-writing/workflows/short-story-creation.yaml +65 -0
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +1 -1
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +20 -20
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +7 -7
- package/package.json +62 -39
- package/prettier.config.mjs +32 -0
- package/sync-version.sh +23 -0
- package/tools/bmad-npx-wrapper.js +10 -10
- package/tools/builders/web-builder.js +124 -130
- package/tools/bump-all-versions.js +42 -33
- package/tools/bump-expansion-version.js +23 -16
- package/tools/cli.js +10 -12
- package/tools/flattener/aggregate.js +10 -10
- package/tools/flattener/binary.js +44 -17
- package/tools/flattener/discovery.js +19 -18
- package/tools/flattener/files.js +6 -6
- package/tools/flattener/ignoreRules.js +125 -125
- package/tools/flattener/main.js +426 -70
- package/tools/flattener/projectRoot.js +186 -25
- package/tools/flattener/prompts.js +9 -9
- package/tools/flattener/stats.helpers.js +395 -0
- package/tools/flattener/stats.js +64 -14
- package/tools/flattener/test-matrix.js +413 -0
- package/tools/flattener/xml.js +33 -31
- package/tools/installer/bin/bmad.js +156 -113
- package/tools/installer/config/ide-agent-config.yaml +1 -1
- package/tools/installer/config/install.config.yaml +13 -3
- package/tools/installer/lib/config-loader.js +46 -42
- package/tools/installer/lib/file-manager.js +91 -113
- package/tools/installer/lib/ide-base-setup.js +57 -56
- package/tools/installer/lib/ide-setup.js +545 -399
- package/tools/installer/lib/installer.js +875 -714
- package/tools/installer/lib/memory-profiler.js +54 -53
- package/tools/installer/lib/module-manager.js +19 -15
- package/tools/installer/lib/resource-locator.js +26 -28
- package/tools/installer/package.json +19 -19
- package/tools/lib/dependency-resolver.js +26 -30
- package/tools/lib/yaml-utils.js +7 -7
- package/tools/preview-release-notes.js +66 -0
- package/tools/shared/bannerArt.js +3 -3
- package/tools/sync-installer-version.js +7 -9
- package/tools/update-expansion-version.js +14 -15
- package/tools/upgraders/v3-to-v4-upgrader.js +203 -294
- package/tools/version-bump.js +41 -26
- package/tools/yaml-format.js +56 -43
- package/.github/workflows/release.yaml +0 -60
- package/.releaserc.json +0 -21
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +0 -25
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +0 -34
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +0 -70
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +0 -26
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
- package/tools/semantic-release-sync-installer.js +0 -30
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const fs = require('fs').promises;
|
|
2
|
-
const path = require('path');
|
|
1
|
+
const fs = require('node:fs').promises;
|
|
2
|
+
const path = require('node:path');
|
|
3
3
|
const yaml = require('js-yaml');
|
|
4
4
|
const { extractYamlFromAgent } = require('./yaml-utils');
|
|
5
5
|
|
|
@@ -14,23 +14,23 @@ class DependencyResolver {
|
|
|
14
14
|
async resolveAgentDependencies(agentId) {
|
|
15
15
|
const agentPath = path.join(this.bmadCore, 'agents', `${agentId}.md`);
|
|
16
16
|
const agentContent = await fs.readFile(agentPath, 'utf8');
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
// Extract YAML from markdown content with command cleaning
|
|
19
19
|
const yamlContent = extractYamlFromAgent(agentContent, true);
|
|
20
20
|
if (!yamlContent) {
|
|
21
21
|
throw new Error(`No YAML configuration found in agent ${agentId}`);
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
const agentConfig = yaml.load(yamlContent);
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
const dependencies = {
|
|
27
27
|
agent: {
|
|
28
28
|
id: agentId,
|
|
29
29
|
path: agentPath,
|
|
30
30
|
content: agentContent,
|
|
31
|
-
config: agentConfig
|
|
31
|
+
config: agentConfig,
|
|
32
32
|
},
|
|
33
|
-
resources: []
|
|
33
|
+
resources: [],
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
// Personas are now embedded in agent configs, no need to resolve separately
|
|
@@ -52,49 +52,49 @@ class DependencyResolver {
|
|
|
52
52
|
const teamPath = path.join(this.bmadCore, 'agent-teams', `${teamId}.yaml`);
|
|
53
53
|
const teamContent = await fs.readFile(teamPath, 'utf8');
|
|
54
54
|
const teamConfig = yaml.load(teamContent);
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
const dependencies = {
|
|
57
57
|
team: {
|
|
58
58
|
id: teamId,
|
|
59
59
|
path: teamPath,
|
|
60
60
|
content: teamContent,
|
|
61
|
-
config: teamConfig
|
|
61
|
+
config: teamConfig,
|
|
62
62
|
},
|
|
63
63
|
agents: [],
|
|
64
|
-
resources: new Map() // Use Map to deduplicate resources
|
|
64
|
+
resources: new Map(), // Use Map to deduplicate resources
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
// Always add bmad-orchestrator agent first if it's a team
|
|
68
68
|
const bmadAgent = await this.resolveAgentDependencies('bmad-orchestrator');
|
|
69
69
|
dependencies.agents.push(bmadAgent.agent);
|
|
70
|
-
bmadAgent.resources
|
|
70
|
+
for (const res of bmadAgent.resources) {
|
|
71
71
|
dependencies.resources.set(res.path, res);
|
|
72
|
-
}
|
|
72
|
+
}
|
|
73
73
|
|
|
74
74
|
// Resolve all agents in the team
|
|
75
75
|
let agentsToResolve = teamConfig.agents || [];
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
// Handle wildcard "*" - include all agents except bmad-master
|
|
78
78
|
if (agentsToResolve.includes('*')) {
|
|
79
79
|
const allAgents = await this.listAgents();
|
|
80
80
|
// Remove wildcard and add all agents except those already in the list and bmad-master
|
|
81
|
-
agentsToResolve = agentsToResolve.filter(a => a !== '*');
|
|
81
|
+
agentsToResolve = agentsToResolve.filter((a) => a !== '*');
|
|
82
82
|
for (const agent of allAgents) {
|
|
83
83
|
if (!agentsToResolve.includes(agent) && agent !== 'bmad-master') {
|
|
84
84
|
agentsToResolve.push(agent);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
for (const agentId of agentsToResolve) {
|
|
90
90
|
if (agentId === 'bmad-orchestrator' || agentId === 'bmad-master') continue; // Already added or excluded
|
|
91
91
|
const agentDeps = await this.resolveAgentDependencies(agentId);
|
|
92
92
|
dependencies.agents.push(agentDeps.agent);
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
// Add resources with deduplication
|
|
95
|
-
agentDeps.resources
|
|
95
|
+
for (const res of agentDeps.resources) {
|
|
96
96
|
dependencies.resources.set(res.path, res);
|
|
97
|
-
}
|
|
97
|
+
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
// Resolve workflows
|
|
@@ -104,7 +104,7 @@ class DependencyResolver {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
// Convert Map back to array
|
|
107
|
-
dependencies.resources =
|
|
107
|
+
dependencies.resources = [...dependencies.resources.values()];
|
|
108
108
|
|
|
109
109
|
return dependencies;
|
|
110
110
|
}
|
|
@@ -123,12 +123,12 @@ class DependencyResolver {
|
|
|
123
123
|
try {
|
|
124
124
|
filePath = path.join(this.bmadCore, type, id);
|
|
125
125
|
content = await fs.readFile(filePath, 'utf8');
|
|
126
|
-
} catch
|
|
126
|
+
} catch {
|
|
127
127
|
// If not found in bmad-core, try common folder
|
|
128
128
|
try {
|
|
129
129
|
filePath = path.join(this.common, type, id);
|
|
130
130
|
content = await fs.readFile(filePath, 'utf8');
|
|
131
|
-
} catch
|
|
131
|
+
} catch {
|
|
132
132
|
// File not found in either location
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -142,7 +142,7 @@ class DependencyResolver {
|
|
|
142
142
|
type,
|
|
143
143
|
id,
|
|
144
144
|
path: filePath,
|
|
145
|
-
content
|
|
145
|
+
content,
|
|
146
146
|
};
|
|
147
147
|
|
|
148
148
|
this.cache.set(cacheKey, resource);
|
|
@@ -156,10 +156,8 @@ class DependencyResolver {
|
|
|
156
156
|
async listAgents() {
|
|
157
157
|
try {
|
|
158
158
|
const files = await fs.readdir(path.join(this.bmadCore, 'agents'));
|
|
159
|
-
return files
|
|
160
|
-
|
|
161
|
-
.map(f => f.replace('.md', ''));
|
|
162
|
-
} catch (error) {
|
|
159
|
+
return files.filter((f) => f.endsWith('.md')).map((f) => f.replace('.md', ''));
|
|
160
|
+
} catch {
|
|
163
161
|
return [];
|
|
164
162
|
}
|
|
165
163
|
}
|
|
@@ -167,10 +165,8 @@ class DependencyResolver {
|
|
|
167
165
|
async listTeams() {
|
|
168
166
|
try {
|
|
169
167
|
const files = await fs.readdir(path.join(this.bmadCore, 'agent-teams'));
|
|
170
|
-
return files
|
|
171
|
-
|
|
172
|
-
.map(f => f.replace('.yaml', ''));
|
|
173
|
-
} catch (error) {
|
|
168
|
+
return files.filter((f) => f.endsWith('.yaml')).map((f) => f.replace('.yaml', ''));
|
|
169
|
+
} catch {
|
|
174
170
|
return [];
|
|
175
171
|
}
|
|
176
172
|
}
|
package/tools/lib/yaml-utils.js
CHANGED
|
@@ -10,20 +10,20 @@
|
|
|
10
10
|
*/
|
|
11
11
|
function extractYamlFromAgent(agentContent, cleanCommands = false) {
|
|
12
12
|
// Remove carriage returns and match YAML block
|
|
13
|
-
const yamlMatch = agentContent.
|
|
13
|
+
const yamlMatch = agentContent.replaceAll('\r', '').match(/```ya?ml\n([\s\S]*?)\n```/);
|
|
14
14
|
if (!yamlMatch) return null;
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
let yamlContent = yamlMatch[1].trim();
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
// Clean up command descriptions if requested
|
|
19
19
|
// Converts "- command - description" to just "- command"
|
|
20
20
|
if (cleanCommands) {
|
|
21
|
-
yamlContent = yamlContent.
|
|
21
|
+
yamlContent = yamlContent.replaceAll(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
return yamlContent;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
|
-
extractYamlFromAgent
|
|
29
|
-
};
|
|
28
|
+
extractYamlFromAgent,
|
|
29
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const { execSync } = require('node:child_process');
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
|
|
4
|
+
// Get the latest stable tag (exclude beta tags)
|
|
5
|
+
const allTags = execSync('git tag -l | sort -V', { encoding: 'utf8' }).split('\n').filter(Boolean);
|
|
6
|
+
const stableTags = allTags.filter((tag) => !tag.includes('beta'));
|
|
7
|
+
const latestTag = stableTags.at(-1) || 'v5.0.0';
|
|
8
|
+
|
|
9
|
+
// Get commits since last tag
|
|
10
|
+
const commits = execSync(`git log ${latestTag}..HEAD --pretty=format:"- %s" --reverse`, {
|
|
11
|
+
encoding: 'utf8',
|
|
12
|
+
})
|
|
13
|
+
.split('\n')
|
|
14
|
+
.filter(Boolean);
|
|
15
|
+
|
|
16
|
+
// Categorize commits
|
|
17
|
+
const features = commits.filter((commit) => /^- (feat|Feature)/.test(commit));
|
|
18
|
+
const fixes = commits.filter((commit) => /^- (fix|Fix)/.test(commit));
|
|
19
|
+
const chores = commits.filter((commit) => /^- (chore|Chore)/.test(commit));
|
|
20
|
+
const others = commits.filter(
|
|
21
|
+
(commit) => !/^- (feat|Feature|fix|Fix|chore|Chore|release:|Release:)/.test(commit),
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
// Get next version (you can modify this logic)
|
|
25
|
+
const currentVersion = require('../package.json').version;
|
|
26
|
+
const versionParts = currentVersion.split('.').map(Number);
|
|
27
|
+
const nextVersion = `${versionParts[0]}.${versionParts[1] + 1}.0`; // Default to minor bump
|
|
28
|
+
|
|
29
|
+
console.log(`## š What's New in v${nextVersion}\n`);
|
|
30
|
+
|
|
31
|
+
if (features.length > 0) {
|
|
32
|
+
console.log('### ⨠New Features');
|
|
33
|
+
for (const feature of features) console.log(feature);
|
|
34
|
+
console.log('');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (fixes.length > 0) {
|
|
38
|
+
console.log('### š Bug Fixes');
|
|
39
|
+
for (const fix of fixes) console.log(fix);
|
|
40
|
+
console.log('');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (others.length > 0) {
|
|
44
|
+
console.log('### š¦ Other Changes');
|
|
45
|
+
for (const other of others) console.log(other);
|
|
46
|
+
console.log('');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (chores.length > 0) {
|
|
50
|
+
console.log('### š§ Maintenance');
|
|
51
|
+
for (const chore of chores) console.log(chore);
|
|
52
|
+
console.log('');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
console.log('\n## š¦ Installation\n');
|
|
56
|
+
console.log('```bash');
|
|
57
|
+
console.log('npx bmad-method install');
|
|
58
|
+
console.log('```');
|
|
59
|
+
|
|
60
|
+
console.log(
|
|
61
|
+
`\n**Full Changelog**: https://github.com/bmadcode/BMAD-METHOD/compare/${latestTag}...v${nextVersion}`,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
console.log(`\n---\nš **Summary**: ${commits.length} commits since ${latestTag}`);
|
|
65
|
+
console.log(`š·ļø **Previous tag**: ${latestTag}`);
|
|
66
|
+
console.log(`š **Next version**: v${nextVersion} (estimated)`);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// ASCII banner art definitions extracted from banners.js to separate art from logic
|
|
2
2
|
|
|
3
|
-
const BMAD_TITLE =
|
|
4
|
-
const FLATTENER_TITLE =
|
|
5
|
-
const INSTALLER_TITLE =
|
|
3
|
+
const BMAD_TITLE = 'BMAD-METHOD';
|
|
4
|
+
const FLATTENER_TITLE = 'FLATTENER';
|
|
5
|
+
const INSTALLER_TITLE = 'INSTALLER';
|
|
6
6
|
|
|
7
7
|
// Large ASCII blocks (block-style fonts)
|
|
8
8
|
const BMAD_LARGE = `
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Sync installer package.json version with main package.json
|
|
5
3
|
* Used by semantic-release to keep versions in sync
|
|
6
4
|
*/
|
|
7
5
|
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
6
|
+
const fs = require('node:fs');
|
|
7
|
+
const path = require('node:path');
|
|
10
8
|
|
|
11
9
|
function syncInstallerVersion() {
|
|
12
10
|
// Read main package.json
|
|
13
11
|
const mainPackagePath = path.join(__dirname, '..', 'package.json');
|
|
14
12
|
const mainPackage = JSON.parse(fs.readFileSync(mainPackagePath, 'utf8'));
|
|
15
|
-
|
|
13
|
+
|
|
16
14
|
// Read installer package.json
|
|
17
15
|
const installerPackagePath = path.join(__dirname, 'installer', 'package.json');
|
|
18
16
|
const installerPackage = JSON.parse(fs.readFileSync(installerPackagePath, 'utf8'));
|
|
19
|
-
|
|
17
|
+
|
|
20
18
|
// Update installer version to match main version
|
|
21
19
|
installerPackage.version = mainPackage.version;
|
|
22
|
-
|
|
20
|
+
|
|
23
21
|
// Write back installer package.json
|
|
24
22
|
fs.writeFileSync(installerPackagePath, JSON.stringify(installerPackage, null, 2) + '\n');
|
|
25
|
-
|
|
23
|
+
|
|
26
24
|
console.log(`Synced installer version to ${mainPackage.version}`);
|
|
27
25
|
}
|
|
28
26
|
|
|
@@ -31,4 +29,4 @@ if (require.main === module) {
|
|
|
31
29
|
syncInstallerVersion();
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
module.exports = { syncInstallerVersion };
|
|
32
|
+
module.exports = { syncInstallerVersion };
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
1
|
+
const fs = require('node:fs');
|
|
2
|
+
const path = require('node:path');
|
|
5
3
|
const yaml = require('js-yaml');
|
|
6
4
|
|
|
7
|
-
const
|
|
5
|
+
const arguments_ = process.argv.slice(2);
|
|
8
6
|
|
|
9
|
-
if (
|
|
7
|
+
if (arguments_.length < 2) {
|
|
10
8
|
console.log('Usage: node update-expansion-version.js <expansion-pack-id> <new-version>');
|
|
11
9
|
console.log('Example: node update-expansion-version.js bmad-creator-tools 1.1.0');
|
|
12
10
|
process.exit(1);
|
|
13
11
|
}
|
|
14
12
|
|
|
15
|
-
const [packId, newVersion] =
|
|
13
|
+
const [packId, newVersion] = arguments_;
|
|
16
14
|
|
|
17
15
|
// Validate version format
|
|
18
16
|
if (!/^\d+\.\d+\.\d+$/.test(newVersion)) {
|
|
@@ -24,31 +22,32 @@ async function updateVersion() {
|
|
|
24
22
|
try {
|
|
25
23
|
// Update in config.yaml
|
|
26
24
|
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
|
|
27
|
-
|
|
25
|
+
|
|
28
26
|
if (!fs.existsSync(configPath)) {
|
|
29
27
|
console.error(`Error: Expansion pack '${packId}' not found`);
|
|
30
28
|
process.exit(1);
|
|
31
29
|
}
|
|
32
|
-
|
|
30
|
+
|
|
33
31
|
const configContent = fs.readFileSync(configPath, 'utf8');
|
|
34
32
|
const config = yaml.load(configContent);
|
|
35
33
|
const oldVersion = config.version || 'unknown';
|
|
36
|
-
|
|
34
|
+
|
|
37
35
|
config.version = newVersion;
|
|
38
|
-
|
|
36
|
+
|
|
39
37
|
const updatedYaml = yaml.dump(config, { indent: 2 });
|
|
40
38
|
fs.writeFileSync(configPath, updatedYaml);
|
|
41
|
-
|
|
39
|
+
|
|
42
40
|
console.log(`ā Updated ${packId}/config.yaml: ${oldVersion} ā ${newVersion}`);
|
|
43
41
|
console.log(`\nā Successfully updated ${packId} to version ${newVersion}`);
|
|
44
42
|
console.log('\nNext steps:');
|
|
45
43
|
console.log('1. Test the changes');
|
|
46
|
-
console.log(
|
|
47
|
-
|
|
44
|
+
console.log(
|
|
45
|
+
'2. Commit: git add -A && git commit -m "chore: bump ' + packId + ' to v' + newVersion + '"',
|
|
46
|
+
);
|
|
48
47
|
} catch (error) {
|
|
49
48
|
console.error('Error updating version:', error.message);
|
|
50
49
|
process.exit(1);
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
|
|
54
|
-
updateVersion();
|
|
53
|
+
updateVersion();
|