bmad-method 1.0.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/.bmad-core/agent-teams/team-all.yml +16 -0
- package/.bmad-core/agent-teams/team-fullstack.yml +26 -0
- package/.bmad-core/agent-teams/team-no-ui.yml +15 -0
- package/.bmad-core/agents/analyst.md +65 -0
- package/.bmad-core/agents/architect.md +66 -0
- package/.bmad-core/agents/bmad-master.md +107 -0
- package/.bmad-core/agents/bmad-orchestrator.md +81 -0
- package/.bmad-core/agents/dev.md +69 -0
- package/.bmad-core/agents/pm.md +64 -0
- package/.bmad-core/agents/po.md +60 -0
- package/.bmad-core/agents/qa.md +52 -0
- package/.bmad-core/agents/sm.md +60 -0
- package/.bmad-core/agents/ux-expert.md +66 -0
- package/.bmad-core/checklists/architect-checklist.md +443 -0
- package/.bmad-core/checklists/change-checklist.md +182 -0
- package/.bmad-core/checklists/pm-checklist.md +375 -0
- package/.bmad-core/checklists/po-master-checklist.md +441 -0
- package/.bmad-core/checklists/story-dod-checklist.md +101 -0
- package/.bmad-core/checklists/story-draft-checklist.md +156 -0
- package/.bmad-core/data/bmad-kb.md +36 -0
- package/.bmad-core/data/technical-preferences.md +3 -0
- package/.bmad-core/schemas/agent-team-schema.yml +153 -0
- package/.bmad-core/tasks/advanced-elicitation.md +92 -0
- package/.bmad-core/tasks/brainstorming-techniques.md +238 -0
- package/.bmad-core/tasks/brownfield-create-epic.md +160 -0
- package/.bmad-core/tasks/brownfield-create-story.md +147 -0
- package/.bmad-core/tasks/core-dump.md +74 -0
- package/.bmad-core/tasks/correct-course.md +73 -0
- package/.bmad-core/tasks/create-agent.md +202 -0
- package/.bmad-core/tasks/create-deep-research-prompt.md +301 -0
- package/.bmad-core/tasks/create-doc.md +74 -0
- package/.bmad-core/tasks/create-expansion-pack.md +425 -0
- package/.bmad-core/tasks/create-next-story.md +206 -0
- package/.bmad-core/tasks/create-team.md +229 -0
- package/.bmad-core/tasks/doc-migration-task.md +198 -0
- package/.bmad-core/tasks/execute-checklist.md +97 -0
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +58 -0
- package/.bmad-core/tasks/index-docs.md +180 -0
- package/.bmad-core/tasks/shard-doc.md +173 -0
- package/.bmad-core/templates/agent-tmpl.md +58 -0
- package/.bmad-core/templates/architecture-tmpl.md +771 -0
- package/.bmad-core/templates/brownfield-architecture-tmpl.md +542 -0
- package/.bmad-core/templates/brownfield-prd-tmpl.md +240 -0
- package/.bmad-core/templates/competitor-analysis-tmpl.md +289 -0
- package/.bmad-core/templates/expansion-pack-plan-tmpl.md +91 -0
- package/.bmad-core/templates/front-end-architecture-tmpl.md +173 -0
- package/.bmad-core/templates/front-end-spec-tmpl.md +411 -0
- package/.bmad-core/templates/fullstack-architecture-tmpl.md +1034 -0
- package/.bmad-core/templates/market-research-tmpl.md +261 -0
- package/.bmad-core/templates/prd-tmpl.md +200 -0
- package/.bmad-core/templates/project-brief-tmpl.md +228 -0
- package/.bmad-core/templates/story-tmpl.md +61 -0
- package/.bmad-core/templates/web-agent-startup-instructions-template.md +39 -0
- package/.bmad-core/utils/agent-switcher.ide.md +112 -0
- package/.bmad-core/utils/template-format.md +26 -0
- package/.bmad-core/utils/workflow-management.md +224 -0
- package/.bmad-core/web-bundles/agents/analyst.txt +1679 -0
- package/.bmad-core/web-bundles/agents/architect.txt +3602 -0
- package/.bmad-core/web-bundles/agents/bmad-master.txt +9496 -0
- package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +1455 -0
- package/.bmad-core/web-bundles/agents/dev.txt +315 -0
- package/.bmad-core/web-bundles/agents/pm.txt +2196 -0
- package/.bmad-core/web-bundles/agents/po.txt +1489 -0
- package/.bmad-core/web-bundles/agents/qa.txt +129 -0
- package/.bmad-core/web-bundles/agents/sm.txt +663 -0
- package/.bmad-core/web-bundles/agents/ux-expert.txt +1099 -0
- package/.bmad-core/web-bundles/teams/team-all.txt +10315 -0
- package/.bmad-core/web-bundles/teams/team-fullstack.txt +9663 -0
- package/.bmad-core/web-bundles/teams/team-no-ui.txt +8504 -0
- package/.bmad-core/workflows/brownfield-fullstack.yml +116 -0
- package/.bmad-core/workflows/brownfield-service.yml +117 -0
- package/.bmad-core/workflows/brownfield-ui.yml +127 -0
- package/.bmad-core/workflows/greenfield-fullstack.yml +177 -0
- package/.bmad-core/workflows/greenfield-service.yml +143 -0
- package/.bmad-core/workflows/greenfield-ui.yml +172 -0
- package/.claude/commands/analyst.md +69 -0
- package/.claude/commands/architect.md +70 -0
- package/.claude/commands/bmad-master.md +111 -0
- package/.claude/commands/bmad-orchestrator.md +85 -0
- package/.claude/commands/dev.md +73 -0
- package/.claude/commands/pm.md +68 -0
- package/.claude/commands/po.md +64 -0
- package/.claude/commands/qa.md +56 -0
- package/.claude/commands/sm.md +64 -0
- package/.claude/commands/ux-expert.md +70 -0
- package/.cursor/rules/analyst.mdc +83 -0
- package/.cursor/rules/architect.mdc +84 -0
- package/.cursor/rules/bmad-master.mdc +125 -0
- package/.cursor/rules/bmad-orchestrator.mdc +99 -0
- package/.cursor/rules/dev.mdc +87 -0
- package/.cursor/rules/pm.mdc +82 -0
- package/.cursor/rules/po.mdc +78 -0
- package/.cursor/rules/qa.mdc +70 -0
- package/.cursor/rules/sm.mdc +78 -0
- package/.cursor/rules/ux-expert.mdc +84 -0
- package/.github/workflows/release.yml +59 -0
- package/.husky/pre-commit +2 -0
- package/.releaserc.json +17 -0
- package/.roo/.roomodes +95 -0
- package/.roo/README.md +38 -0
- package/.vscode/extensions.json +6 -0
- package/.vscode/settings.json +72 -0
- package/.windsurf/rules/analyst.md +77 -0
- package/.windsurf/rules/architect.md +78 -0
- package/.windsurf/rules/bmad-master.md +119 -0
- package/.windsurf/rules/bmad-orchestrator.md +93 -0
- package/.windsurf/rules/dev.md +81 -0
- package/.windsurf/rules/pm.md +76 -0
- package/.windsurf/rules/po.md +72 -0
- package/.windsurf/rules/qa.md +64 -0
- package/.windsurf/rules/sm.md +72 -0
- package/.windsurf/rules/ux-expert.md +78 -0
- package/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +46 -0
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/docs/versioning-and-releases.md +85 -0
- package/docs/versions.md +49 -0
- package/expansion-packs/README.md +113 -0
- package/expansion-packs/infrastructure-devops/README.md +147 -0
- package/expansion-packs/infrastructure-devops/agents/infra-devops-platform.md +59 -0
- package/expansion-packs/infrastructure-devops/checklists/infrastructure-checklist.md +484 -0
- package/expansion-packs/infrastructure-devops/manifest.yml +38 -0
- package/expansion-packs/infrastructure-devops/tasks/review-infrastructure.md +160 -0
- package/expansion-packs/infrastructure-devops/tasks/validate-infrastructure.md +154 -0
- package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +415 -0
- package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
- package/package.json +73 -0
- package/tools/bmad-npx-wrapper.js +41 -0
- package/tools/builders/web-builder.js +145 -0
- package/tools/cli.js +119 -0
- package/tools/installer/README.md +58 -0
- package/tools/installer/bin/bmad.js +179 -0
- package/tools/installer/config/install.config.yml +139 -0
- package/tools/installer/lib/config-loader.js +89 -0
- package/tools/installer/lib/file-manager.js +169 -0
- package/tools/installer/lib/ide-setup.js +419 -0
- package/tools/installer/lib/installer.js +534 -0
- package/tools/installer/package-lock.json +704 -0
- package/tools/installer/package.json +43 -0
- package/tools/installer/templates/claude-commands.md +7 -0
- package/tools/installer/templates/cursor-rules.md +22 -0
- package/tools/installer/templates/windsurf-rules.md +22 -0
- package/tools/lib/dependency-resolver.js +179 -0
- package/tools/upgraders/v3-to-v4-upgrader.js +766 -0
- package/tools/version-bump.js +72 -0
- package/tools/yaml-format.js +211 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bmad-method",
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "BMAD Method installer - AI-powered Agile development framework",
|
|
5
|
+
"main": "lib/installer.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"bmad": "./bin/bmad.js",
|
|
8
|
+
"bmad-method": "./bin/bmad.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"bmad",
|
|
15
|
+
"agile",
|
|
16
|
+
"ai",
|
|
17
|
+
"development",
|
|
18
|
+
"framework",
|
|
19
|
+
"installer",
|
|
20
|
+
"agents"
|
|
21
|
+
],
|
|
22
|
+
"author": "BMAD Team",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"chalk": "^4.1.2",
|
|
26
|
+
"commander": "^9.4.1",
|
|
27
|
+
"fs-extra": "^11.1.0",
|
|
28
|
+
"inquirer": "^8.2.5",
|
|
29
|
+
"js-yaml": "^4.1.0",
|
|
30
|
+
"ora": "^5.4.1"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=14.0.0"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/bmad-team/bmad-method.git"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/bmad-team/bmad-method/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/bmad-team/bmad-method#readme"
|
|
43
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# BMAD Method Agents for Cursor
|
|
2
|
+
|
|
3
|
+
This file contains all BMAD Method agent personas. To use an agent, type its name or alias in the Cursor chat.
|
|
4
|
+
|
|
5
|
+
## Available Agents
|
|
6
|
+
|
|
7
|
+
{{AGENT_LIST}}
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
{{AGENT_RULES}}
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Agent Switching
|
|
16
|
+
|
|
17
|
+
To switch between agents during a conversation:
|
|
18
|
+
|
|
19
|
+
1. Simply type the new agent name (e.g., "architect" or "dev")
|
|
20
|
+
2. The AI will adopt that agent's persona
|
|
21
|
+
|
|
22
|
+
For more information about BMAD Method, visit: https://github.com/your-org/bmad-method
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# BMAD Method Agent Commands
|
|
2
|
+
|
|
3
|
+
This file contains all BMAD Method agent commands for Windsurf. Use /agent-name to switch personas.
|
|
4
|
+
|
|
5
|
+
## Available Commands
|
|
6
|
+
|
|
7
|
+
{{COMMAND_LIST}}
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
{{AGENT_SECTIONS}}
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Usage Tips
|
|
16
|
+
|
|
17
|
+
- Type `/dev` to switch to Developer persona
|
|
18
|
+
- Type `/pm` to switch to Product Manager persona
|
|
19
|
+
- Type `/architect` to switch to Architect persona
|
|
20
|
+
- And so on for other agents...
|
|
21
|
+
|
|
22
|
+
For more information about BMAD Method, visit: https://github.com/your-org/bmad-method
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
const fs = require('fs').promises;
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const yaml = require('js-yaml');
|
|
4
|
+
|
|
5
|
+
class DependencyResolver {
|
|
6
|
+
constructor(rootDir) {
|
|
7
|
+
this.rootDir = rootDir;
|
|
8
|
+
this.bmadCore = path.join(rootDir, '.bmad-core');
|
|
9
|
+
this.cache = new Map();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async resolveAgentDependencies(agentId) {
|
|
13
|
+
const agentPath = path.join(this.bmadCore, 'agents', `${agentId}.md`);
|
|
14
|
+
const agentContent = await fs.readFile(agentPath, 'utf8');
|
|
15
|
+
|
|
16
|
+
// Extract YAML from markdown content
|
|
17
|
+
const yamlMatch = agentContent.match(/```yml\n([\s\S]*?)\n```/);
|
|
18
|
+
if (!yamlMatch) {
|
|
19
|
+
throw new Error(`No YAML configuration found in agent ${agentId}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Clean up the YAML to handle command descriptions after dashes
|
|
23
|
+
let yamlContent = yamlMatch[1];
|
|
24
|
+
// Fix commands section: convert "- command - description" to just "- command"
|
|
25
|
+
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
|
|
26
|
+
|
|
27
|
+
const agentConfig = yaml.load(yamlContent);
|
|
28
|
+
|
|
29
|
+
const dependencies = {
|
|
30
|
+
agent: {
|
|
31
|
+
id: agentId,
|
|
32
|
+
path: `agents#${agentId}`,
|
|
33
|
+
content: agentContent,
|
|
34
|
+
config: agentConfig
|
|
35
|
+
},
|
|
36
|
+
resources: []
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Personas are now embedded in agent configs, no need to resolve separately
|
|
40
|
+
|
|
41
|
+
// Resolve other dependencies
|
|
42
|
+
const depTypes = ['tasks', 'templates', 'checklists', 'data', 'utils'];
|
|
43
|
+
for (const depType of depTypes) {
|
|
44
|
+
const deps = agentConfig.dependencies?.[depType] || [];
|
|
45
|
+
for (const depId of deps) {
|
|
46
|
+
const resource = await this.loadResource(depType, depId);
|
|
47
|
+
if (resource) dependencies.resources.push(resource);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return dependencies;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async resolveTeamDependencies(teamId) {
|
|
55
|
+
const teamPath = path.join(this.bmadCore, 'agent-teams', `${teamId}.yml`);
|
|
56
|
+
const teamContent = await fs.readFile(teamPath, 'utf8');
|
|
57
|
+
const teamConfig = yaml.load(teamContent);
|
|
58
|
+
|
|
59
|
+
const dependencies = {
|
|
60
|
+
team: {
|
|
61
|
+
id: teamId,
|
|
62
|
+
path: `agent-teams#${teamId}`,
|
|
63
|
+
content: teamContent,
|
|
64
|
+
config: teamConfig
|
|
65
|
+
},
|
|
66
|
+
agents: [],
|
|
67
|
+
resources: new Map() // Use Map to deduplicate resources
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Always add bmad-orchestrator agent first if it's a team
|
|
71
|
+
const bmadAgent = await this.resolveAgentDependencies('bmad-orchestrator');
|
|
72
|
+
dependencies.agents.push(bmadAgent.agent);
|
|
73
|
+
bmadAgent.resources.forEach(res => {
|
|
74
|
+
dependencies.resources.set(res.path, res);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Resolve all agents in the team
|
|
78
|
+
let agentsToResolve = teamConfig.agents || [];
|
|
79
|
+
|
|
80
|
+
// Handle wildcard "*" - include all agents except bmad-master
|
|
81
|
+
if (agentsToResolve.includes('*')) {
|
|
82
|
+
const allAgents = await this.listAgents();
|
|
83
|
+
// Remove wildcard and add all agents except those already in the list and bmad-master
|
|
84
|
+
agentsToResolve = agentsToResolve.filter(a => a !== '*');
|
|
85
|
+
for (const agent of allAgents) {
|
|
86
|
+
if (!agentsToResolve.includes(agent) && agent !== 'bmad-master') {
|
|
87
|
+
agentsToResolve.push(agent);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
for (const agentId of agentsToResolve) {
|
|
93
|
+
if (agentId === 'bmad-orchestrator' || agentId === 'bmad-master') continue; // Already added or excluded
|
|
94
|
+
const agentDeps = await this.resolveAgentDependencies(agentId);
|
|
95
|
+
dependencies.agents.push(agentDeps.agent);
|
|
96
|
+
|
|
97
|
+
// Add resources with deduplication
|
|
98
|
+
agentDeps.resources.forEach(res => {
|
|
99
|
+
dependencies.resources.set(res.path, res);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Resolve workflows
|
|
104
|
+
for (const workflowId of teamConfig.workflows || []) {
|
|
105
|
+
const resource = await this.loadResource('workflows', workflowId);
|
|
106
|
+
if (resource) dependencies.resources.set(resource.path, resource);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Convert Map back to array
|
|
110
|
+
dependencies.resources = Array.from(dependencies.resources.values());
|
|
111
|
+
|
|
112
|
+
return dependencies;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async loadResource(type, id) {
|
|
116
|
+
const cacheKey = `${type}#${id}`;
|
|
117
|
+
if (this.cache.has(cacheKey)) {
|
|
118
|
+
return this.cache.get(cacheKey);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
const extensions = ['.md', '.yml', '.yaml'];
|
|
123
|
+
let content = null;
|
|
124
|
+
let filePath = null;
|
|
125
|
+
|
|
126
|
+
for (const ext of extensions) {
|
|
127
|
+
try {
|
|
128
|
+
filePath = path.join(this.bmadCore, type, `${id}${ext}`);
|
|
129
|
+
content = await fs.readFile(filePath, 'utf8');
|
|
130
|
+
break;
|
|
131
|
+
} catch (e) {
|
|
132
|
+
// Try next extension
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (!content) {
|
|
137
|
+
console.warn(`Resource not found: ${type}/${id}`);
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const resource = {
|
|
142
|
+
type,
|
|
143
|
+
id,
|
|
144
|
+
path: `${type}#${id}`,
|
|
145
|
+
content
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
this.cache.set(cacheKey, resource);
|
|
149
|
+
return resource;
|
|
150
|
+
} catch (error) {
|
|
151
|
+
console.error(`Error loading resource ${type}/${id}:`, error.message);
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async listAgents() {
|
|
157
|
+
try {
|
|
158
|
+
const files = await fs.readdir(path.join(this.bmadCore, 'agents'));
|
|
159
|
+
return files
|
|
160
|
+
.filter(f => f.endsWith('.md'))
|
|
161
|
+
.map(f => f.replace('.md', ''));
|
|
162
|
+
} catch (error) {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async listTeams() {
|
|
168
|
+
try {
|
|
169
|
+
const files = await fs.readdir(path.join(this.bmadCore, 'agent-teams'));
|
|
170
|
+
return files
|
|
171
|
+
.filter(f => f.endsWith('.yml'))
|
|
172
|
+
.map(f => f.replace('.yml', ''));
|
|
173
|
+
} catch (error) {
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
module.exports = DependencyResolver;
|