bmad-method 6.0.0-Beta.1 → 6.0.0-Beta.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/CHANGELOG.md +8 -1
- package/package.json +1 -1
- package/src/bmm/module-help.csv +31 -31
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +1 -1
- package/src/core/module-help.csv +8 -8
- package/tools/cli/installers/lib/core/installer.js +26 -40
- package/tools/cli/installers/lib/ide/_config-driven.js +423 -0
- package/tools/cli/installers/lib/ide/codex.js +40 -12
- package/tools/cli/installers/lib/ide/manager.js +65 -38
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +241 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +19 -5
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +5 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +166 -50
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +7 -5
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +21 -3
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/gemini/body.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/gemini/header.toml +2 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/body.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/header.md +4 -0
- package/tools/cli/lib/ui.js +19 -75
- package/tools/cli/installers/lib/ide/STANDARDIZATION_PLAN.md +0 -208
- package/tools/cli/installers/lib/ide/antigravity.js +0 -474
- package/tools/cli/installers/lib/ide/auggie.js +0 -244
- package/tools/cli/installers/lib/ide/claude-code.js +0 -506
- package/tools/cli/installers/lib/ide/cline.js +0 -272
- package/tools/cli/installers/lib/ide/crush.js +0 -149
- package/tools/cli/installers/lib/ide/cursor.js +0 -160
- package/tools/cli/installers/lib/ide/gemini.js +0 -301
- package/tools/cli/installers/lib/ide/github-copilot.js +0 -383
- package/tools/cli/installers/lib/ide/iflow.js +0 -191
- package/tools/cli/installers/lib/ide/opencode.js +0 -257
- package/tools/cli/installers/lib/ide/qwen.js +0 -372
- package/tools/cli/installers/lib/ide/roo.js +0 -273
- package/tools/cli/installers/lib/ide/rovo-dev.js +0 -290
- package/tools/cli/installers/lib/ide/trae.js +0 -313
- package/tools/cli/installers/lib/ide/windsurf.js +0 -258
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
const path = require('node:path');
|
|
2
|
-
const fs = require('fs-extra');
|
|
3
|
-
const { BaseIdeSetup } = require('./_base-ide');
|
|
4
|
-
const chalk = require('chalk');
|
|
5
|
-
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
6
|
-
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Auggie CLI setup handler
|
|
10
|
-
* Installs to project directory (.augment/commands)
|
|
11
|
-
*/
|
|
12
|
-
class AuggieSetup extends BaseIdeSetup {
|
|
13
|
-
constructor() {
|
|
14
|
-
super('auggie', 'Auggie CLI');
|
|
15
|
-
this.detectionPaths = ['.augment'];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Setup Auggie CLI configuration
|
|
20
|
-
* @param {string} projectDir - Project directory
|
|
21
|
-
* @param {string} bmadDir - BMAD installation directory
|
|
22
|
-
* @param {Object} options - Setup options
|
|
23
|
-
*/
|
|
24
|
-
async setup(projectDir, bmadDir, options = {}) {
|
|
25
|
-
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
26
|
-
|
|
27
|
-
// Always use project directory
|
|
28
|
-
const location = path.join(projectDir, '.augment', 'commands');
|
|
29
|
-
|
|
30
|
-
// Clean up old BMAD installation first
|
|
31
|
-
await this.cleanup(projectDir);
|
|
32
|
-
|
|
33
|
-
// Generate agent launchers
|
|
34
|
-
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
35
|
-
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
36
|
-
|
|
37
|
-
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
|
38
|
-
const tasks = await this.getTasks(bmadDir, true);
|
|
39
|
-
const tools = await this.getTools(bmadDir, true);
|
|
40
|
-
|
|
41
|
-
// Get ALL workflows using the new workflow command generator
|
|
42
|
-
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
43
|
-
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
44
|
-
|
|
45
|
-
// Convert workflow artifacts to expected format
|
|
46
|
-
const workflows = workflowArtifacts
|
|
47
|
-
.filter((artifact) => artifact.type === 'workflow-command')
|
|
48
|
-
.map((artifact) => ({
|
|
49
|
-
module: artifact.module,
|
|
50
|
-
name: path.basename(artifact.relativePath, '.md'),
|
|
51
|
-
path: artifact.sourcePath,
|
|
52
|
-
content: artifact.content,
|
|
53
|
-
}));
|
|
54
|
-
|
|
55
|
-
const bmadCommandsDir = path.join(location, 'bmad');
|
|
56
|
-
const agentsDir = path.join(bmadCommandsDir, 'agents');
|
|
57
|
-
const tasksDir = path.join(bmadCommandsDir, 'tasks');
|
|
58
|
-
const toolsDir = path.join(bmadCommandsDir, 'tools');
|
|
59
|
-
const workflowsDir = path.join(bmadCommandsDir, 'workflows');
|
|
60
|
-
|
|
61
|
-
await this.ensureDir(agentsDir);
|
|
62
|
-
await this.ensureDir(tasksDir);
|
|
63
|
-
await this.ensureDir(toolsDir);
|
|
64
|
-
await this.ensureDir(workflowsDir);
|
|
65
|
-
|
|
66
|
-
// Install agent launchers
|
|
67
|
-
for (const artifact of agentArtifacts) {
|
|
68
|
-
const targetPath = path.join(agentsDir, `${artifact.module}-${artifact.name}.md`);
|
|
69
|
-
await this.writeFile(targetPath, artifact.content);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Install tasks
|
|
73
|
-
for (const task of tasks) {
|
|
74
|
-
const content = await this.readFile(task.path);
|
|
75
|
-
const commandContent = this.createTaskCommand(task, content);
|
|
76
|
-
|
|
77
|
-
const targetPath = path.join(tasksDir, `${task.module}-${task.name}.md`);
|
|
78
|
-
await this.writeFile(targetPath, commandContent);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Install tools
|
|
82
|
-
for (const tool of tools) {
|
|
83
|
-
const content = await this.readFile(tool.path);
|
|
84
|
-
const commandContent = this.createToolCommand(tool, content);
|
|
85
|
-
|
|
86
|
-
const targetPath = path.join(toolsDir, `${tool.module}-${tool.name}.md`);
|
|
87
|
-
await this.writeFile(targetPath, commandContent);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Install workflows (already generated commands)
|
|
91
|
-
for (const workflow of workflows) {
|
|
92
|
-
// Use the pre-generated workflow command content
|
|
93
|
-
const targetPath = path.join(workflowsDir, `${workflow.module}-${workflow.name}.md`);
|
|
94
|
-
await this.writeFile(targetPath, workflow.content);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const totalInstalled = agentArtifacts.length + tasks.length + tools.length + workflows.length;
|
|
98
|
-
|
|
99
|
-
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
100
|
-
console.log(chalk.dim(` - ${agentArtifacts.length} agents installed`));
|
|
101
|
-
console.log(chalk.dim(` - ${tasks.length} tasks installed`));
|
|
102
|
-
console.log(chalk.dim(` - ${tools.length} tools installed`));
|
|
103
|
-
console.log(chalk.dim(` - ${workflows.length} workflows installed`));
|
|
104
|
-
console.log(chalk.dim(` - Location: ${path.relative(projectDir, location)}`));
|
|
105
|
-
console.log(chalk.yellow(`\n 💡 Tip: Add 'model: gpt-4o' to command frontmatter to specify AI model`));
|
|
106
|
-
|
|
107
|
-
return {
|
|
108
|
-
success: true,
|
|
109
|
-
agents: agentArtifacts.length,
|
|
110
|
-
tasks: tasks.length,
|
|
111
|
-
tools: tools.length,
|
|
112
|
-
workflows: workflows.length,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Create task command content
|
|
118
|
-
*/
|
|
119
|
-
createTaskCommand(task, content) {
|
|
120
|
-
const nameMatch = content.match(/name="([^"]+)"/);
|
|
121
|
-
const taskName = nameMatch ? nameMatch[1] : this.formatTitle(task.name);
|
|
122
|
-
|
|
123
|
-
return `---
|
|
124
|
-
description: "Execute the ${taskName} task"
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
# ${taskName} Task
|
|
128
|
-
|
|
129
|
-
${content}
|
|
130
|
-
|
|
131
|
-
## Module
|
|
132
|
-
BMAD ${task.module.toUpperCase()} module
|
|
133
|
-
`;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Create tool command content
|
|
138
|
-
*/
|
|
139
|
-
createToolCommand(tool, content) {
|
|
140
|
-
const nameMatch = content.match(/name="([^"]+)"/);
|
|
141
|
-
const toolName = nameMatch ? nameMatch[1] : this.formatTitle(tool.name);
|
|
142
|
-
|
|
143
|
-
return `---
|
|
144
|
-
description: "Use the ${toolName} tool"
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
# ${toolName} Tool
|
|
148
|
-
|
|
149
|
-
${content}
|
|
150
|
-
|
|
151
|
-
## Module
|
|
152
|
-
BMAD ${tool.module.toUpperCase()} module
|
|
153
|
-
`;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Create workflow command content
|
|
158
|
-
*/
|
|
159
|
-
createWorkflowCommand(workflow, content) {
|
|
160
|
-
const description = workflow.description || `Execute the ${workflow.name} workflow`;
|
|
161
|
-
|
|
162
|
-
return `---
|
|
163
|
-
description: "${description}"
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
# ${workflow.name} Workflow
|
|
167
|
-
|
|
168
|
-
${content}
|
|
169
|
-
|
|
170
|
-
## Module
|
|
171
|
-
BMAD ${workflow.module.toUpperCase()} module
|
|
172
|
-
`;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Cleanup Auggie configuration
|
|
177
|
-
*/
|
|
178
|
-
async cleanup(projectDir) {
|
|
179
|
-
const fs = require('fs-extra');
|
|
180
|
-
|
|
181
|
-
// Only clean up project directory
|
|
182
|
-
const location = path.join(projectDir, '.augment', 'commands');
|
|
183
|
-
const bmadDir = path.join(location, 'bmad');
|
|
184
|
-
|
|
185
|
-
if (await fs.pathExists(bmadDir)) {
|
|
186
|
-
await fs.remove(bmadDir);
|
|
187
|
-
console.log(chalk.dim(` Removed old BMAD commands`));
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Install a custom agent launcher for Auggie
|
|
193
|
-
* @param {string} projectDir - Project directory
|
|
194
|
-
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
195
|
-
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
196
|
-
* @param {Object} metadata - Agent metadata
|
|
197
|
-
* @returns {Object} Installation result
|
|
198
|
-
*/
|
|
199
|
-
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
200
|
-
// Auggie uses .augment/commands directory
|
|
201
|
-
const location = path.join(projectDir, '.augment', 'commands');
|
|
202
|
-
const bmadCommandsDir = path.join(location, 'bmad');
|
|
203
|
-
const agentsDir = path.join(bmadCommandsDir, 'agents');
|
|
204
|
-
|
|
205
|
-
// Create .augment/commands/bmad/agents directory if it doesn't exist
|
|
206
|
-
await fs.ensureDir(agentsDir);
|
|
207
|
-
|
|
208
|
-
// Create custom agent launcher
|
|
209
|
-
const launcherContent = `---
|
|
210
|
-
description: "Use the ${agentName} custom agent"
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
# ${agentName} Custom Agent
|
|
214
|
-
|
|
215
|
-
**⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
|
|
216
|
-
|
|
217
|
-
This is a launcher for the custom BMAD agent "${agentName}".
|
|
218
|
-
|
|
219
|
-
## Usage
|
|
220
|
-
1. First run: \`${agentPath}\` to load the complete agent
|
|
221
|
-
2. Then use this command to activate ${agentName}
|
|
222
|
-
|
|
223
|
-
The agent will follow the persona and instructions from the main agent file.
|
|
224
|
-
|
|
225
|
-
## Module
|
|
226
|
-
BMAD Custom agent
|
|
227
|
-
`;
|
|
228
|
-
|
|
229
|
-
const fileName = `custom-${agentName.toLowerCase()}.md`;
|
|
230
|
-
const launcherPath = path.join(agentsDir, fileName);
|
|
231
|
-
|
|
232
|
-
// Write the launcher file
|
|
233
|
-
await fs.writeFile(launcherPath, launcherContent, 'utf8');
|
|
234
|
-
|
|
235
|
-
return {
|
|
236
|
-
ide: 'auggie',
|
|
237
|
-
path: path.relative(projectDir, launcherPath),
|
|
238
|
-
command: agentName,
|
|
239
|
-
type: 'custom-agent-launcher',
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
module.exports = { AuggieSetup };
|