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.
Files changed (147) hide show
  1. package/.bmad-core/agent-teams/team-all.yml +16 -0
  2. package/.bmad-core/agent-teams/team-fullstack.yml +26 -0
  3. package/.bmad-core/agent-teams/team-no-ui.yml +15 -0
  4. package/.bmad-core/agents/analyst.md +65 -0
  5. package/.bmad-core/agents/architect.md +66 -0
  6. package/.bmad-core/agents/bmad-master.md +107 -0
  7. package/.bmad-core/agents/bmad-orchestrator.md +81 -0
  8. package/.bmad-core/agents/dev.md +69 -0
  9. package/.bmad-core/agents/pm.md +64 -0
  10. package/.bmad-core/agents/po.md +60 -0
  11. package/.bmad-core/agents/qa.md +52 -0
  12. package/.bmad-core/agents/sm.md +60 -0
  13. package/.bmad-core/agents/ux-expert.md +66 -0
  14. package/.bmad-core/checklists/architect-checklist.md +443 -0
  15. package/.bmad-core/checklists/change-checklist.md +182 -0
  16. package/.bmad-core/checklists/pm-checklist.md +375 -0
  17. package/.bmad-core/checklists/po-master-checklist.md +441 -0
  18. package/.bmad-core/checklists/story-dod-checklist.md +101 -0
  19. package/.bmad-core/checklists/story-draft-checklist.md +156 -0
  20. package/.bmad-core/data/bmad-kb.md +36 -0
  21. package/.bmad-core/data/technical-preferences.md +3 -0
  22. package/.bmad-core/schemas/agent-team-schema.yml +153 -0
  23. package/.bmad-core/tasks/advanced-elicitation.md +92 -0
  24. package/.bmad-core/tasks/brainstorming-techniques.md +238 -0
  25. package/.bmad-core/tasks/brownfield-create-epic.md +160 -0
  26. package/.bmad-core/tasks/brownfield-create-story.md +147 -0
  27. package/.bmad-core/tasks/core-dump.md +74 -0
  28. package/.bmad-core/tasks/correct-course.md +73 -0
  29. package/.bmad-core/tasks/create-agent.md +202 -0
  30. package/.bmad-core/tasks/create-deep-research-prompt.md +301 -0
  31. package/.bmad-core/tasks/create-doc.md +74 -0
  32. package/.bmad-core/tasks/create-expansion-pack.md +425 -0
  33. package/.bmad-core/tasks/create-next-story.md +206 -0
  34. package/.bmad-core/tasks/create-team.md +229 -0
  35. package/.bmad-core/tasks/doc-migration-task.md +198 -0
  36. package/.bmad-core/tasks/execute-checklist.md +97 -0
  37. package/.bmad-core/tasks/generate-ai-frontend-prompt.md +58 -0
  38. package/.bmad-core/tasks/index-docs.md +180 -0
  39. package/.bmad-core/tasks/shard-doc.md +173 -0
  40. package/.bmad-core/templates/agent-tmpl.md +58 -0
  41. package/.bmad-core/templates/architecture-tmpl.md +771 -0
  42. package/.bmad-core/templates/brownfield-architecture-tmpl.md +542 -0
  43. package/.bmad-core/templates/brownfield-prd-tmpl.md +240 -0
  44. package/.bmad-core/templates/competitor-analysis-tmpl.md +289 -0
  45. package/.bmad-core/templates/expansion-pack-plan-tmpl.md +91 -0
  46. package/.bmad-core/templates/front-end-architecture-tmpl.md +173 -0
  47. package/.bmad-core/templates/front-end-spec-tmpl.md +411 -0
  48. package/.bmad-core/templates/fullstack-architecture-tmpl.md +1034 -0
  49. package/.bmad-core/templates/market-research-tmpl.md +261 -0
  50. package/.bmad-core/templates/prd-tmpl.md +200 -0
  51. package/.bmad-core/templates/project-brief-tmpl.md +228 -0
  52. package/.bmad-core/templates/story-tmpl.md +61 -0
  53. package/.bmad-core/templates/web-agent-startup-instructions-template.md +39 -0
  54. package/.bmad-core/utils/agent-switcher.ide.md +112 -0
  55. package/.bmad-core/utils/template-format.md +26 -0
  56. package/.bmad-core/utils/workflow-management.md +224 -0
  57. package/.bmad-core/web-bundles/agents/analyst.txt +1679 -0
  58. package/.bmad-core/web-bundles/agents/architect.txt +3602 -0
  59. package/.bmad-core/web-bundles/agents/bmad-master.txt +9496 -0
  60. package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +1455 -0
  61. package/.bmad-core/web-bundles/agents/dev.txt +315 -0
  62. package/.bmad-core/web-bundles/agents/pm.txt +2196 -0
  63. package/.bmad-core/web-bundles/agents/po.txt +1489 -0
  64. package/.bmad-core/web-bundles/agents/qa.txt +129 -0
  65. package/.bmad-core/web-bundles/agents/sm.txt +663 -0
  66. package/.bmad-core/web-bundles/agents/ux-expert.txt +1099 -0
  67. package/.bmad-core/web-bundles/teams/team-all.txt +10315 -0
  68. package/.bmad-core/web-bundles/teams/team-fullstack.txt +9663 -0
  69. package/.bmad-core/web-bundles/teams/team-no-ui.txt +8504 -0
  70. package/.bmad-core/workflows/brownfield-fullstack.yml +116 -0
  71. package/.bmad-core/workflows/brownfield-service.yml +117 -0
  72. package/.bmad-core/workflows/brownfield-ui.yml +127 -0
  73. package/.bmad-core/workflows/greenfield-fullstack.yml +177 -0
  74. package/.bmad-core/workflows/greenfield-service.yml +143 -0
  75. package/.bmad-core/workflows/greenfield-ui.yml +172 -0
  76. package/.claude/commands/analyst.md +69 -0
  77. package/.claude/commands/architect.md +70 -0
  78. package/.claude/commands/bmad-master.md +111 -0
  79. package/.claude/commands/bmad-orchestrator.md +85 -0
  80. package/.claude/commands/dev.md +73 -0
  81. package/.claude/commands/pm.md +68 -0
  82. package/.claude/commands/po.md +64 -0
  83. package/.claude/commands/qa.md +56 -0
  84. package/.claude/commands/sm.md +64 -0
  85. package/.claude/commands/ux-expert.md +70 -0
  86. package/.cursor/rules/analyst.mdc +83 -0
  87. package/.cursor/rules/architect.mdc +84 -0
  88. package/.cursor/rules/bmad-master.mdc +125 -0
  89. package/.cursor/rules/bmad-orchestrator.mdc +99 -0
  90. package/.cursor/rules/dev.mdc +87 -0
  91. package/.cursor/rules/pm.mdc +82 -0
  92. package/.cursor/rules/po.mdc +78 -0
  93. package/.cursor/rules/qa.mdc +70 -0
  94. package/.cursor/rules/sm.mdc +78 -0
  95. package/.cursor/rules/ux-expert.mdc +84 -0
  96. package/.github/workflows/release.yml +59 -0
  97. package/.husky/pre-commit +2 -0
  98. package/.releaserc.json +17 -0
  99. package/.roo/.roomodes +95 -0
  100. package/.roo/README.md +38 -0
  101. package/.vscode/extensions.json +6 -0
  102. package/.vscode/settings.json +72 -0
  103. package/.windsurf/rules/analyst.md +77 -0
  104. package/.windsurf/rules/architect.md +78 -0
  105. package/.windsurf/rules/bmad-master.md +119 -0
  106. package/.windsurf/rules/bmad-orchestrator.md +93 -0
  107. package/.windsurf/rules/dev.md +81 -0
  108. package/.windsurf/rules/pm.md +76 -0
  109. package/.windsurf/rules/po.md +72 -0
  110. package/.windsurf/rules/qa.md +64 -0
  111. package/.windsurf/rules/sm.md +72 -0
  112. package/.windsurf/rules/ux-expert.md +78 -0
  113. package/CHANGELOG.md +22 -0
  114. package/CONTRIBUTING.md +46 -0
  115. package/LICENSE +21 -0
  116. package/README.md +283 -0
  117. package/docs/versioning-and-releases.md +85 -0
  118. package/docs/versions.md +49 -0
  119. package/expansion-packs/README.md +113 -0
  120. package/expansion-packs/infrastructure-devops/README.md +147 -0
  121. package/expansion-packs/infrastructure-devops/agents/infra-devops-platform.md +59 -0
  122. package/expansion-packs/infrastructure-devops/checklists/infrastructure-checklist.md +484 -0
  123. package/expansion-packs/infrastructure-devops/manifest.yml +38 -0
  124. package/expansion-packs/infrastructure-devops/tasks/review-infrastructure.md +160 -0
  125. package/expansion-packs/infrastructure-devops/tasks/validate-infrastructure.md +154 -0
  126. package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +415 -0
  127. package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  128. package/package.json +73 -0
  129. package/tools/bmad-npx-wrapper.js +41 -0
  130. package/tools/builders/web-builder.js +145 -0
  131. package/tools/cli.js +119 -0
  132. package/tools/installer/README.md +58 -0
  133. package/tools/installer/bin/bmad.js +179 -0
  134. package/tools/installer/config/install.config.yml +139 -0
  135. package/tools/installer/lib/config-loader.js +89 -0
  136. package/tools/installer/lib/file-manager.js +169 -0
  137. package/tools/installer/lib/ide-setup.js +419 -0
  138. package/tools/installer/lib/installer.js +534 -0
  139. package/tools/installer/package-lock.json +704 -0
  140. package/tools/installer/package.json +43 -0
  141. package/tools/installer/templates/claude-commands.md +7 -0
  142. package/tools/installer/templates/cursor-rules.md +22 -0
  143. package/tools/installer/templates/windsurf-rules.md +22 -0
  144. package/tools/lib/dependency-resolver.js +179 -0
  145. package/tools/upgraders/v3-to-v4-upgrader.js +766 -0
  146. package/tools/version-bump.js +72 -0
  147. 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,7 @@
1
+ # {{AGENT_NAME}} Agent
2
+
3
+ {{AGENT_CONTENT}}
4
+
5
+ ---
6
+
7
+ This is a BMAD Method agent. For more information, visit: https://github.com/your-org/bmad-method
@@ -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;