bmad-enhanced 1.0.0-alpha
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/INSTALLATION.md +367 -0
- package/LICENSE +21 -0
- package/README.md +635 -0
- package/_bmad/bme/_config/module.yaml +52 -0
- package/_bmad/bme/_designos/agents/empathy-mapper.md +97 -0
- package/_bmad/bme/_designos/agents/wireframe-designer.md +114 -0
- package/_bmad/bme/_designos/config.yaml +24 -0
- package/_bmad/bme/_designos/workflows/empathy-map/empathy-map.template.md +143 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-01-define-user.md +60 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-02-says-thinks.md +67 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-03-does-feels.md +79 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-04-pain-points.md +87 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-05-gains.md +103 -0
- package/_bmad/bme/_designos/workflows/empathy-map/steps/step-06-synthesize.md +104 -0
- package/_bmad/bme/_designos/workflows/empathy-map/validate.md +117 -0
- package/_bmad/bme/_designos/workflows/empathy-map/workflow.md +44 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-01-define-requirements.md +85 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-02-user-flows.md +59 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-03-information-architecture.md +68 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-04-wireframe-sketch.md +97 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-05-components.md +128 -0
- package/_bmad/bme/_designos/workflows/wireframe/steps/step-06-synthesize.md +83 -0
- package/_bmad/bme/_designos/workflows/wireframe/wireframe.template.md +287 -0
- package/_bmad/bme/_designos/workflows/wireframe/workflow.md +44 -0
- package/_bmad-output/README.md +228 -0
- package/index.js +75 -0
- package/package.json +34 -0
- package/scripts/README.md +194 -0
- package/scripts/install-all-agents.js +265 -0
- package/scripts/install-emma.js +168 -0
- package/scripts/install-wade.js +177 -0
- package/scripts/postinstall.js +15 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const BOLD = '\x1b[1m';
|
|
7
|
+
const RESET = '\x1b[0m';
|
|
8
|
+
const GREEN = '\x1b[32m';
|
|
9
|
+
const CYAN = '\x1b[36m';
|
|
10
|
+
const YELLOW = '\x1b[33m';
|
|
11
|
+
const RED = '\x1b[31m';
|
|
12
|
+
const MAGENTA = '\x1b[35m';
|
|
13
|
+
|
|
14
|
+
function printBanner() {
|
|
15
|
+
console.log('');
|
|
16
|
+
console.log(`${MAGENTA}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
17
|
+
console.log(`${MAGENTA}${BOLD}║ ║${RESET}`);
|
|
18
|
+
console.log(`${MAGENTA}${BOLD}║ BMAD-Enhanced Complete Installer 🚀 ║${RESET}`);
|
|
19
|
+
console.log(`${MAGENTA}${BOLD}║ ║${RESET}`);
|
|
20
|
+
console.log(`${MAGENTA}${BOLD}║ Installing Emma + Wade Design Agents ║${RESET}`);
|
|
21
|
+
console.log(`${MAGENTA}${BOLD}║ ║${RESET}`);
|
|
22
|
+
console.log(`${MAGENTA}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
23
|
+
console.log('');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function checkPrerequisites() {
|
|
27
|
+
console.log(`${CYAN}[1/6]${RESET} Checking prerequisites...`);
|
|
28
|
+
|
|
29
|
+
const targetDir = process.cwd();
|
|
30
|
+
const bmadDir = path.join(targetDir, '_bmad');
|
|
31
|
+
|
|
32
|
+
// Check if BMAD Method is installed
|
|
33
|
+
if (!fs.existsSync(bmadDir)) {
|
|
34
|
+
console.log('');
|
|
35
|
+
console.error(`${RED}${BOLD}✗ BMAD Method not found!${RESET}`);
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log(`${YELLOW}BMAD-Enhanced requires BMAD Method to be installed first.${RESET}`);
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log('Please install BMAD Method:');
|
|
40
|
+
console.log(` ${CYAN}npx bmad-method@alpha install${RESET}`);
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log('Then run this installer again.');
|
|
43
|
+
console.log('');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
console.log(`${GREEN} ✓${RESET} BMAD Method detected`);
|
|
48
|
+
|
|
49
|
+
// Check for BMAD version/compatibility (optional but recommended)
|
|
50
|
+
const bmadConfigPath = path.join(bmadDir, '_config', 'bmad.yaml');
|
|
51
|
+
if (fs.existsSync(bmadConfigPath)) {
|
|
52
|
+
console.log(`${GREEN} ✓${RESET} BMAD configuration found`);
|
|
53
|
+
} else {
|
|
54
|
+
console.log(`${YELLOW} ⚠${RESET} BMAD configuration not found (continuing anyway)`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
console.log(`${GREEN} ✓${RESET} Prerequisites met`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function copyAllAgentFiles() {
|
|
61
|
+
console.log(`${CYAN}[2/6]${RESET} Installing Emma + Wade agent files...`);
|
|
62
|
+
|
|
63
|
+
const sourceDir = path.join(__dirname, '..', '_bmad', 'bme', '_designos');
|
|
64
|
+
const targetDir = path.join(process.cwd(), '_bmad', 'bme', '_designos');
|
|
65
|
+
|
|
66
|
+
// Create target directory structure
|
|
67
|
+
fs.mkdirSync(path.join(targetDir, 'agents'), { recursive: true });
|
|
68
|
+
fs.mkdirSync(path.join(targetDir, 'workflows', 'empathy-map', 'steps'), { recursive: true });
|
|
69
|
+
fs.mkdirSync(path.join(targetDir, 'workflows', 'wireframe', 'steps'), { recursive: true });
|
|
70
|
+
|
|
71
|
+
// Copy Emma agent file
|
|
72
|
+
console.log(`${CYAN} →${RESET} Installing Emma (empathy-mapper)...`);
|
|
73
|
+
fs.copyFileSync(
|
|
74
|
+
path.join(sourceDir, 'agents', 'empathy-mapper.md'),
|
|
75
|
+
path.join(targetDir, 'agents', 'empathy-mapper.md')
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// Copy Emma workflow files
|
|
79
|
+
const emmaWorkflowFiles = [
|
|
80
|
+
'workflow.md',
|
|
81
|
+
'empathy-map.template.md',
|
|
82
|
+
'steps/step-01-define-user.md',
|
|
83
|
+
'steps/step-02-says-thinks.md',
|
|
84
|
+
'steps/step-03-does-feels.md',
|
|
85
|
+
'steps/step-04-pain-points.md',
|
|
86
|
+
'steps/step-05-gains.md',
|
|
87
|
+
'steps/step-06-synthesize.md'
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
emmaWorkflowFiles.forEach(file => {
|
|
91
|
+
fs.copyFileSync(
|
|
92
|
+
path.join(sourceDir, 'workflows', 'empathy-map', file),
|
|
93
|
+
path.join(targetDir, 'workflows', 'empathy-map', file)
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
console.log(`${GREEN} ✓${RESET} Emma installed`);
|
|
98
|
+
|
|
99
|
+
// Copy Wade agent file
|
|
100
|
+
console.log(`${CYAN} →${RESET} Installing Wade (wireframe-designer)...`);
|
|
101
|
+
fs.copyFileSync(
|
|
102
|
+
path.join(sourceDir, 'agents', 'wireframe-designer.md'),
|
|
103
|
+
path.join(targetDir, 'agents', 'wireframe-designer.md')
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
// Copy Wade workflow files
|
|
107
|
+
const wadeWorkflowFiles = [
|
|
108
|
+
'workflow.md',
|
|
109
|
+
'wireframe.template.md',
|
|
110
|
+
'steps/step-01-define-requirements.md',
|
|
111
|
+
'steps/step-02-user-flows.md',
|
|
112
|
+
'steps/step-03-information-architecture.md',
|
|
113
|
+
'steps/step-04-wireframe-sketch.md',
|
|
114
|
+
'steps/step-05-components-interactions.md',
|
|
115
|
+
'steps/step-06-synthesize.md'
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
wadeWorkflowFiles.forEach(file => {
|
|
119
|
+
fs.copyFileSync(
|
|
120
|
+
path.join(sourceDir, 'workflows', 'wireframe', file),
|
|
121
|
+
path.join(targetDir, 'workflows', 'wireframe', file)
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
console.log(`${GREEN} ✓${RESET} Wade installed`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function updateConfig() {
|
|
129
|
+
console.log(`${CYAN}[3/6]${RESET} Configuring agents...`);
|
|
130
|
+
|
|
131
|
+
const configPath = path.join(process.cwd(), '_bmad', 'bme', '_designos', 'config.yaml');
|
|
132
|
+
const manifestPath = path.join(process.cwd(), '_bmad', '_config', 'agent-manifest.csv');
|
|
133
|
+
|
|
134
|
+
// Create config
|
|
135
|
+
const configContent = `# BMAD _designos Configuration
|
|
136
|
+
# Used by: Emma (empathy-mapper), Wade (wireframe-designer)
|
|
137
|
+
|
|
138
|
+
user_name: "User"
|
|
139
|
+
communication_language: "English"
|
|
140
|
+
output_folder: "_bmad-output/design-artifacts"
|
|
141
|
+
|
|
142
|
+
agents:
|
|
143
|
+
- empathy-mapper # Emma - Empathy Mapping Specialist
|
|
144
|
+
- wireframe-designer # Wade - Wireframe Specialist
|
|
145
|
+
|
|
146
|
+
workflows:
|
|
147
|
+
- empathy-map # Create empathy maps
|
|
148
|
+
- wireframe # Create wireframes
|
|
149
|
+
`;
|
|
150
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
151
|
+
fs.writeFileSync(configPath, configContent);
|
|
152
|
+
console.log(`${GREEN} ✓${RESET} Created config.yaml`);
|
|
153
|
+
|
|
154
|
+
// Create manifest
|
|
155
|
+
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
156
|
+
const header = '"agent_id","name","title","icon","role","identity","communication_style","expertise","submodule","path"\n';
|
|
157
|
+
const emmaRow = '"empathy-mapper","Emma","Empathy Mapping Specialist","🎨","UX Researcher + Empathy Mapping Expert","Senior UX researcher specializing in empathy mapping and user-centered design. Helps teams build deep understanding of user needs, motivations, and pain points. Brings 10+ years experience synthesizing research into actionable insights.","Warm and curious - like a skilled interviewer who asks thoughtful follow-up questions. Uses phrases like \'Tell me more about that\' and \'What makes that challenging?\' Empathetic without being saccharine. Focuses on understanding context and emotion.","- Channel expert empathy mapping methodologies: draw upon deep knowledge of cognitive empathy frameworks, Jobs-to-be-Done theory, behavioral psychology, and qualitative research methods - Empathy maps reveal insights, not assumptions - ground observations in real user behaviors and quotes - Ask clarifying questions to avoid surface-level answers - Surface both rational (Says/Does) and emotional (Thinks/Feels) dimensions - Pain points are opportunities - the bigger the pain, the bigger the design opportunity","bme","_bmad/bme/_designos/agents/empathy-mapper.md"\n';
|
|
158
|
+
const wadeRow = '"wireframe-designer","Wade","Wireframe Design Specialist","🎨","Wireframe Design Expert + UI Architect","Senior UI/UX designer specializing in wireframe creation and information architecture. Helps teams rapidly visualize product concepts through low-fidelity wireframes. Brings 10+ years experience in web and mobile design, with deep knowledge of responsive patterns and component libraries.","Visual and spatial - speaks in layouts, grids, and flows. Like an architect sketching blueprints while explaining design decisions. Says things like \'Picture this layout\' and \'What\'s the primary user action on this screen?\' Uses spatial language (above, below, nested, adjacent) and thinks in terms of visual hierarchy.","- Channel expert wireframe methodologies: draw upon deep knowledge of information architecture, Gestalt principles, responsive design patterns, atomic design systems, and WCAG accessibility guidelines - Wireframes are thinking tools, not art - focus on structure and flow over aesthetics - Iterate quickly, refine deliberately - low-fidelity first, high-fidelity only when structure is validated - Every screen answers three questions: Where am I? What can I do? Where can I go? - Accessibility is non-negotiable - design for all users from the wireframe stage","bme","_bmad/bme/_designos/agents/wireframe-designer.md"\n';
|
|
159
|
+
fs.writeFileSync(manifestPath, header + emmaRow + wadeRow);
|
|
160
|
+
console.log(`${GREEN} ✓${RESET} Created agent-manifest.csv`);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function createOutputDirectory() {
|
|
164
|
+
console.log(`${CYAN}[4/6]${RESET} Setting up output directory...`);
|
|
165
|
+
|
|
166
|
+
const outputDir = path.join(process.cwd(), '_bmad-output', 'design-artifacts');
|
|
167
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
168
|
+
|
|
169
|
+
console.log(`${GREEN} ✓${RESET} Output directory ready`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function verifyInstallation() {
|
|
173
|
+
console.log(`${CYAN}[5/6]${RESET} Verifying installation...`);
|
|
174
|
+
|
|
175
|
+
const targetDir = process.cwd();
|
|
176
|
+
const checks = [
|
|
177
|
+
{ path: '_bmad/bme/_designos/agents/empathy-mapper.md', name: 'Emma agent file' },
|
|
178
|
+
{ path: '_bmad/bme/_designos/agents/wireframe-designer.md', name: 'Wade agent file' },
|
|
179
|
+
{ path: '_bmad/bme/_designos/workflows/empathy-map/workflow.md', name: 'Emma workflow' },
|
|
180
|
+
{ path: '_bmad/bme/_designos/workflows/wireframe/workflow.md', name: 'Wade workflow' },
|
|
181
|
+
{ path: '_bmad/bme/_designos/config.yaml', name: 'Configuration file' },
|
|
182
|
+
];
|
|
183
|
+
|
|
184
|
+
let allChecksPass = true;
|
|
185
|
+
checks.forEach(check => {
|
|
186
|
+
const fullPath = path.join(targetDir, check.path);
|
|
187
|
+
if (fs.existsSync(fullPath)) {
|
|
188
|
+
console.log(`${GREEN} ✓${RESET} ${check.name}`);
|
|
189
|
+
} else {
|
|
190
|
+
console.log(`${RED} ✗${RESET} ${check.name} - MISSING`);
|
|
191
|
+
allChecksPass = false;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
if (!allChecksPass) {
|
|
196
|
+
console.log('');
|
|
197
|
+
console.error(`${RED}Installation verification failed. Some files are missing.${RESET}`);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
console.log(`${GREEN} ✓${RESET} All files installed successfully`);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function copyUserGuides() {
|
|
205
|
+
console.log(`${CYAN}[6/6]${RESET} Installing user guides...`);
|
|
206
|
+
|
|
207
|
+
const sourceDir = path.join(__dirname, '..', '_bmad-output', 'design-artifacts');
|
|
208
|
+
const targetDir = path.join(process.cwd(), '_bmad-output', 'design-artifacts');
|
|
209
|
+
|
|
210
|
+
// Copy user guides if they exist
|
|
211
|
+
const guides = ['EMMA-USER-GUIDE.md', 'WADE-USER-GUIDE.md'];
|
|
212
|
+
guides.forEach(guide => {
|
|
213
|
+
const sourcePath = path.join(sourceDir, guide);
|
|
214
|
+
if (fs.existsSync(sourcePath)) {
|
|
215
|
+
fs.copyFileSync(sourcePath, path.join(targetDir, guide));
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
console.log(`${GREEN} ✓${RESET} User guides installed`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function printSuccess() {
|
|
223
|
+
console.log('');
|
|
224
|
+
console.log(`${GREEN}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
225
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
226
|
+
console.log(`${GREEN}${BOLD}║ ✓ All Agents Successfully Installed! 🎉 ║${RESET}`);
|
|
227
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
228
|
+
console.log(`${GREEN}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
229
|
+
console.log('');
|
|
230
|
+
console.log(`${BOLD}Installed Agents:${RESET}`);
|
|
231
|
+
console.log('');
|
|
232
|
+
console.log(` ${GREEN}✓${RESET} Emma (empathy-mapper) - Empathy Mapping Specialist 🎨`);
|
|
233
|
+
console.log(` ${GREEN}✓${RESET} Wade (wireframe-designer) - Wireframe Design Expert 🎨`);
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log(`${BOLD}Quick Start:${RESET}`);
|
|
236
|
+
console.log('');
|
|
237
|
+
console.log(' Activate Emma:');
|
|
238
|
+
console.log(` ${CYAN}cat _bmad/bme/_designos/agents/empathy-mapper.md${RESET}`);
|
|
239
|
+
console.log('');
|
|
240
|
+
console.log(' Activate Wade:');
|
|
241
|
+
console.log(` ${CYAN}cat _bmad/bme/_designos/agents/wireframe-designer.md${RESET}`);
|
|
242
|
+
console.log('');
|
|
243
|
+
console.log(`${BOLD}User Guides:${RESET}`);
|
|
244
|
+
console.log(` 📚 Emma: ${CYAN}_bmad-output/design-artifacts/EMMA-USER-GUIDE.md${RESET}`);
|
|
245
|
+
console.log(` 📚 Wade: ${CYAN}_bmad-output/design-artifacts/WADE-USER-GUIDE.md${RESET}`);
|
|
246
|
+
console.log('');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
async function main() {
|
|
250
|
+
try {
|
|
251
|
+
printBanner();
|
|
252
|
+
checkPrerequisites();
|
|
253
|
+
copyAllAgentFiles();
|
|
254
|
+
updateConfig();
|
|
255
|
+
createOutputDirectory();
|
|
256
|
+
verifyInstallation();
|
|
257
|
+
copyUserGuides();
|
|
258
|
+
printSuccess();
|
|
259
|
+
} catch (error) {
|
|
260
|
+
console.error(`${RED}✗ Installation failed:${RESET}`, error.message);
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
main();
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const BOLD = '\x1b[1m';
|
|
7
|
+
const RESET = '\x1b[0m';
|
|
8
|
+
const GREEN = '\x1b[32m';
|
|
9
|
+
const CYAN = '\x1b[36m';
|
|
10
|
+
const YELLOW = '\x1b[33m';
|
|
11
|
+
const RED = '\x1b[31m';
|
|
12
|
+
|
|
13
|
+
function printBanner() {
|
|
14
|
+
console.log('');
|
|
15
|
+
console.log(`${CYAN}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
16
|
+
console.log(`${CYAN}${BOLD}║ ║${RESET}`);
|
|
17
|
+
console.log(`${CYAN}${BOLD}║ Emma (empathy-mapper) Installer 🎨 ║${RESET}`);
|
|
18
|
+
console.log(`${CYAN}${BOLD}║ ║${RESET}`);
|
|
19
|
+
console.log(`${CYAN}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
20
|
+
console.log('');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function checkPrerequisites() {
|
|
24
|
+
console.log(`${CYAN}[1/4]${RESET} Checking prerequisites...`);
|
|
25
|
+
|
|
26
|
+
const targetDir = process.cwd();
|
|
27
|
+
const bmadDir = path.join(targetDir, '_bmad');
|
|
28
|
+
|
|
29
|
+
// Check if BMAD Method is installed
|
|
30
|
+
if (!fs.existsSync(bmadDir)) {
|
|
31
|
+
console.log('');
|
|
32
|
+
console.error(`${RED}${BOLD}✗ BMAD Method not found!${RESET}`);
|
|
33
|
+
console.log('');
|
|
34
|
+
console.log(`${YELLOW}BMAD-Enhanced requires BMAD Method to be installed first.${RESET}`);
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log('Please install BMAD Method:');
|
|
37
|
+
console.log(` ${CYAN}npx bmad-method@alpha install${RESET}`);
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log('Then run this installer again.');
|
|
40
|
+
console.log('');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log(`${GREEN} ✓${RESET} BMAD Method detected`);
|
|
45
|
+
console.log(`${GREEN} ✓${RESET} Prerequisites met`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function copyAgentFiles() {
|
|
49
|
+
console.log(`${CYAN}[2/4]${RESET} Installing Emma agent files...`);
|
|
50
|
+
|
|
51
|
+
const sourceDir = path.join(__dirname, '..', '_bmad', 'bme', '_designos');
|
|
52
|
+
const targetDir = path.join(process.cwd(), '_bmad', 'bme', '_designos');
|
|
53
|
+
|
|
54
|
+
// Create target directory structure
|
|
55
|
+
fs.mkdirSync(path.join(targetDir, 'agents'), { recursive: true });
|
|
56
|
+
fs.mkdirSync(path.join(targetDir, 'workflows', 'empathy-map', 'steps'), { recursive: true });
|
|
57
|
+
|
|
58
|
+
// Copy Emma agent file
|
|
59
|
+
fs.copyFileSync(
|
|
60
|
+
path.join(sourceDir, 'agents', 'empathy-mapper.md'),
|
|
61
|
+
path.join(targetDir, 'agents', 'empathy-mapper.md')
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Copy empathy-map workflow files
|
|
65
|
+
const workflowFiles = [
|
|
66
|
+
'workflow.md',
|
|
67
|
+
'empathy-map.template.md',
|
|
68
|
+
'steps/step-01-define-user.md',
|
|
69
|
+
'steps/step-02-says-thinks.md',
|
|
70
|
+
'steps/step-03-does-feels.md',
|
|
71
|
+
'steps/step-04-pain-points.md',
|
|
72
|
+
'steps/step-05-gains.md',
|
|
73
|
+
'steps/step-06-synthesize.md'
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
workflowFiles.forEach(file => {
|
|
77
|
+
fs.copyFileSync(
|
|
78
|
+
path.join(sourceDir, 'workflows', 'empathy-map', file),
|
|
79
|
+
path.join(targetDir, 'workflows', 'empathy-map', file)
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
console.log(`${GREEN} ✓${RESET} Agent files installed`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function updateConfig() {
|
|
87
|
+
console.log(`${CYAN}[3/4]${RESET} Configuring Emma...`);
|
|
88
|
+
|
|
89
|
+
const configPath = path.join(process.cwd(), '_bmad', 'bme', '_designos', 'config.yaml');
|
|
90
|
+
const manifestPath = path.join(process.cwd(), '_bmad', '_config', 'agent-manifest.csv');
|
|
91
|
+
|
|
92
|
+
// Create config if doesn't exist
|
|
93
|
+
if (!fs.existsSync(configPath)) {
|
|
94
|
+
const configContent = `# BMAD _designos Configuration
|
|
95
|
+
# Used by: Emma (empathy-mapper), Wade (wireframe-designer)
|
|
96
|
+
|
|
97
|
+
user_name: "User"
|
|
98
|
+
communication_language: "English"
|
|
99
|
+
output_folder: "_bmad-output/design-artifacts"
|
|
100
|
+
|
|
101
|
+
agents:
|
|
102
|
+
- empathy-mapper # Emma - Empathy Mapping Specialist
|
|
103
|
+
|
|
104
|
+
workflows:
|
|
105
|
+
- empathy-map # Create empathy maps
|
|
106
|
+
`;
|
|
107
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
108
|
+
fs.writeFileSync(configPath, configContent);
|
|
109
|
+
console.log(`${GREEN} ✓${RESET} Created config.yaml`);
|
|
110
|
+
} else {
|
|
111
|
+
console.log(`${GREEN} ✓${RESET} Using existing config.yaml`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Update manifest
|
|
115
|
+
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
116
|
+
if (!fs.existsSync(manifestPath)) {
|
|
117
|
+
const header = '"agent_id","name","title","icon","role","identity","communication_style","expertise","submodule","path"\n';
|
|
118
|
+
const emmaRow = '"empathy-mapper","Emma","Empathy Mapping Specialist","🎨","UX Researcher + Empathy Mapping Expert","Senior UX researcher specializing in empathy mapping and user-centered design. Helps teams build deep understanding of user needs, motivations, and pain points. Brings 10+ years experience synthesizing research into actionable insights.","Warm and curious - like a skilled interviewer who asks thoughtful follow-up questions. Uses phrases like \'Tell me more about that\' and \'What makes that challenging?\' Empathetic without being saccharine. Focuses on understanding context and emotion.","- Channel expert empathy mapping methodologies: draw upon deep knowledge of cognitive empathy frameworks, Jobs-to-be-Done theory, behavioral psychology, and qualitative research methods - Empathy maps reveal insights, not assumptions - ground observations in real user behaviors and quotes - Ask clarifying questions to avoid surface-level answers - Surface both rational (Says/Does) and emotional (Thinks/Feels) dimensions - Pain points are opportunities - the bigger the pain, the bigger the design opportunity","bme","_bmad/bme/_designos/agents/empathy-mapper.md"\n';
|
|
119
|
+
fs.writeFileSync(manifestPath, header + emmaRow);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
console.log(`${GREEN} ✓${RESET} Configuration complete`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function createOutputDirectory() {
|
|
126
|
+
console.log(`${CYAN}[4/4]${RESET} Setting up output directory...`);
|
|
127
|
+
|
|
128
|
+
const outputDir = path.join(process.cwd(), '_bmad-output', 'design-artifacts');
|
|
129
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
130
|
+
|
|
131
|
+
console.log(`${GREEN} ✓${RESET} Output directory ready`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function printSuccess() {
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(`${GREEN}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
137
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
138
|
+
console.log(`${GREEN}${BOLD}║ ✓ Emma Successfully Installed! ║${RESET}`);
|
|
139
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
140
|
+
console.log(`${GREEN}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(`${BOLD}Quick Start:${RESET}`);
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(' 1. Activate Emma:');
|
|
145
|
+
console.log(` ${CYAN}cat _bmad/bme/_designos/agents/empathy-mapper.md${RESET}`);
|
|
146
|
+
console.log('');
|
|
147
|
+
console.log(' 2. Create your first empathy map:');
|
|
148
|
+
console.log(` ${CYAN}Type: EM${RESET}`);
|
|
149
|
+
console.log('');
|
|
150
|
+
console.log(`📚 User Guide: ${CYAN}_bmad-output/design-artifacts/EMMA-USER-GUIDE.md${RESET}`);
|
|
151
|
+
console.log('');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async function main() {
|
|
155
|
+
try {
|
|
156
|
+
printBanner();
|
|
157
|
+
checkPrerequisites();
|
|
158
|
+
copyAgentFiles();
|
|
159
|
+
updateConfig();
|
|
160
|
+
createOutputDirectory();
|
|
161
|
+
printSuccess();
|
|
162
|
+
} catch (error) {
|
|
163
|
+
console.error(`${RED}✗ Installation failed:${RESET}`, error.message);
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
main();
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const BOLD = '\x1b[1m';
|
|
7
|
+
const RESET = '\x1b[0m';
|
|
8
|
+
const GREEN = '\x1b[32m';
|
|
9
|
+
const CYAN = '\x1b[36m';
|
|
10
|
+
const YELLOW = '\x1b[33m';
|
|
11
|
+
const RED = '\x1b[31m';
|
|
12
|
+
|
|
13
|
+
function printBanner() {
|
|
14
|
+
console.log('');
|
|
15
|
+
console.log(`${CYAN}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
16
|
+
console.log(`${CYAN}${BOLD}║ ║${RESET}`);
|
|
17
|
+
console.log(`${CYAN}${BOLD}║ Wade (wireframe-designer) Installer 🎨 ║${RESET}`);
|
|
18
|
+
console.log(`${CYAN}${BOLD}║ ║${RESET}`);
|
|
19
|
+
console.log(`${CYAN}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
20
|
+
console.log('');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function checkPrerequisites() {
|
|
24
|
+
console.log(`${CYAN}[1/4]${RESET} Checking prerequisites...`);
|
|
25
|
+
|
|
26
|
+
const targetDir = process.cwd();
|
|
27
|
+
const bmadDir = path.join(targetDir, '_bmad');
|
|
28
|
+
|
|
29
|
+
// Check if BMAD Method is installed
|
|
30
|
+
if (!fs.existsSync(bmadDir)) {
|
|
31
|
+
console.log('');
|
|
32
|
+
console.error(`${RED}${BOLD}✗ BMAD Method not found!${RESET}`);
|
|
33
|
+
console.log('');
|
|
34
|
+
console.log(`${YELLOW}BMAD-Enhanced requires BMAD Method to be installed first.${RESET}`);
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log('Please install BMAD Method:');
|
|
37
|
+
console.log(` ${CYAN}npx bmad-method@alpha install${RESET}`);
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log('Then run this installer again.');
|
|
40
|
+
console.log('');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log(`${GREEN} ✓${RESET} BMAD Method detected`);
|
|
45
|
+
console.log(`${GREEN} ✓${RESET} Prerequisites met`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function copyAgentFiles() {
|
|
49
|
+
console.log(`${CYAN}[2/4]${RESET} Installing Wade agent files...`);
|
|
50
|
+
|
|
51
|
+
const sourceDir = path.join(__dirname, '..', '_bmad', 'bme', '_designos');
|
|
52
|
+
const targetDir = path.join(process.cwd(), '_bmad', 'bme', '_designos');
|
|
53
|
+
|
|
54
|
+
// Create target directory structure
|
|
55
|
+
fs.mkdirSync(path.join(targetDir, 'agents'), { recursive: true });
|
|
56
|
+
fs.mkdirSync(path.join(targetDir, 'workflows', 'wireframe', 'steps'), { recursive: true });
|
|
57
|
+
|
|
58
|
+
// Copy Wade agent file
|
|
59
|
+
fs.copyFileSync(
|
|
60
|
+
path.join(sourceDir, 'agents', 'wireframe-designer.md'),
|
|
61
|
+
path.join(targetDir, 'agents', 'wireframe-designer.md')
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Copy wireframe workflow files
|
|
65
|
+
const workflowFiles = [
|
|
66
|
+
'workflow.md',
|
|
67
|
+
'wireframe.template.md',
|
|
68
|
+
'steps/step-01-define-requirements.md',
|
|
69
|
+
'steps/step-02-user-flows.md',
|
|
70
|
+
'steps/step-03-information-architecture.md',
|
|
71
|
+
'steps/step-04-wireframe-sketch.md',
|
|
72
|
+
'steps/step-05-components-interactions.md',
|
|
73
|
+
'steps/step-06-synthesize.md'
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
workflowFiles.forEach(file => {
|
|
77
|
+
fs.copyFileSync(
|
|
78
|
+
path.join(sourceDir, 'workflows', 'wireframe', file),
|
|
79
|
+
path.join(targetDir, 'workflows', 'wireframe', file)
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
console.log(`${GREEN} ✓${RESET} Agent files installed`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function updateConfig() {
|
|
87
|
+
console.log(`${CYAN}[3/4]${RESET} Configuring Wade...`);
|
|
88
|
+
|
|
89
|
+
const configPath = path.join(process.cwd(), '_bmad', 'bme', '_designos', 'config.yaml');
|
|
90
|
+
const manifestPath = path.join(process.cwd(), '_bmad', '_config', 'agent-manifest.csv');
|
|
91
|
+
|
|
92
|
+
// Update or create config
|
|
93
|
+
if (!fs.existsSync(configPath)) {
|
|
94
|
+
const configContent = `# BMAD _designos Configuration
|
|
95
|
+
# Used by: Emma (empathy-mapper), Wade (wireframe-designer)
|
|
96
|
+
|
|
97
|
+
user_name: "User"
|
|
98
|
+
communication_language: "English"
|
|
99
|
+
output_folder: "_bmad-output/design-artifacts"
|
|
100
|
+
|
|
101
|
+
agents:
|
|
102
|
+
- wireframe-designer # Wade - Wireframe Specialist
|
|
103
|
+
|
|
104
|
+
workflows:
|
|
105
|
+
- wireframe # Create wireframes
|
|
106
|
+
`;
|
|
107
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
108
|
+
fs.writeFileSync(configPath, configContent);
|
|
109
|
+
console.log(`${GREEN} ✓${RESET} Created config.yaml`);
|
|
110
|
+
} else {
|
|
111
|
+
// Add Wade to existing config if not present
|
|
112
|
+
let config = fs.readFileSync(configPath, 'utf-8');
|
|
113
|
+
if (!config.includes('wireframe-designer')) {
|
|
114
|
+
config = config.replace(/agents:\s*\n/, 'agents:\n - wireframe-designer # Wade - Wireframe Specialist\n');
|
|
115
|
+
config = config.replace(/workflows:\s*\n/, 'workflows:\n - wireframe # Create wireframes\n');
|
|
116
|
+
fs.writeFileSync(configPath, config);
|
|
117
|
+
console.log(`${GREEN} ✓${RESET} Updated config.yaml`);
|
|
118
|
+
} else {
|
|
119
|
+
console.log(`${GREEN} ✓${RESET} Using existing config.yaml`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Update manifest
|
|
124
|
+
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
125
|
+
if (!fs.existsSync(manifestPath)) {
|
|
126
|
+
const header = '"agent_id","name","title","icon","role","identity","communication_style","expertise","submodule","path"\n';
|
|
127
|
+
const wadeRow = '"wireframe-designer","Wade","Wireframe Design Specialist","🎨","Wireframe Design Expert + UI Architect","Senior UI/UX designer specializing in wireframe creation and information architecture. Helps teams rapidly visualize product concepts through low-fidelity wireframes. Brings 10+ years experience in web and mobile design, with deep knowledge of responsive patterns and component libraries.","Visual and spatial - speaks in layouts, grids, and flows. Like an architect sketching blueprints while explaining design decisions. Says things like \'Picture this layout\' and \'What\'s the primary user action on this screen?\' Uses spatial language (above, below, nested, adjacent) and thinks in terms of visual hierarchy.","- Channel expert wireframe methodologies: draw upon deep knowledge of information architecture, Gestalt principles, responsive design patterns, atomic design systems, and WCAG accessibility guidelines - Wireframes are thinking tools, not art - focus on structure and flow over aesthetics - Iterate quickly, refine deliberately - low-fidelity first, high-fidelity only when structure is validated - Every screen answers three questions: Where am I? What can I do? Where can I go? - Accessibility is non-negotiable - design for all users from the wireframe stage","bme","_bmad/bme/_designos/agents/wireframe-designer.md"\n';
|
|
128
|
+
fs.writeFileSync(manifestPath, header + wadeRow);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
console.log(`${GREEN} ✓${RESET} Configuration complete`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function createOutputDirectory() {
|
|
135
|
+
console.log(`${CYAN}[4/4]${RESET} Setting up output directory...`);
|
|
136
|
+
|
|
137
|
+
const outputDir = path.join(process.cwd(), '_bmad-output', 'design-artifacts');
|
|
138
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
139
|
+
|
|
140
|
+
console.log(`${GREEN} ✓${RESET} Output directory ready`);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function printSuccess() {
|
|
144
|
+
console.log('');
|
|
145
|
+
console.log(`${GREEN}${BOLD}╔════════════════════════════════════════════════════╗${RESET}`);
|
|
146
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
147
|
+
console.log(`${GREEN}${BOLD}║ ✓ Wade Successfully Installed! ║${RESET}`);
|
|
148
|
+
console.log(`${GREEN}${BOLD}║ ║${RESET}`);
|
|
149
|
+
console.log(`${GREEN}${BOLD}╚════════════════════════════════════════════════════╝${RESET}`);
|
|
150
|
+
console.log('');
|
|
151
|
+
console.log(`${BOLD}Quick Start:${RESET}`);
|
|
152
|
+
console.log('');
|
|
153
|
+
console.log(' 1. Activate Wade:');
|
|
154
|
+
console.log(` ${CYAN}cat _bmad/bme/_designos/agents/wireframe-designer.md${RESET}`);
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(' 2. Create your first wireframe:');
|
|
157
|
+
console.log(` ${CYAN}Type: WM${RESET}`);
|
|
158
|
+
console.log('');
|
|
159
|
+
console.log(`📚 User Guide: ${CYAN}_bmad-output/design-artifacts/WADE-USER-GUIDE.md${RESET}`);
|
|
160
|
+
console.log('');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async function main() {
|
|
164
|
+
try {
|
|
165
|
+
printBanner();
|
|
166
|
+
checkPrerequisites();
|
|
167
|
+
copyAgentFiles();
|
|
168
|
+
updateConfig();
|
|
169
|
+
createOutputDirectory();
|
|
170
|
+
printSuccess();
|
|
171
|
+
} catch (error) {
|
|
172
|
+
console.error(`${RED}✗ Installation failed:${RESET}`, error.message);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
main();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const BOLD = '\x1b[1m';
|
|
4
|
+
const RESET = '\x1b[0m';
|
|
5
|
+
const CYAN = '\x1b[36m';
|
|
6
|
+
|
|
7
|
+
console.log('');
|
|
8
|
+
console.log(`${BOLD}BMAD-Enhanced installed!${RESET}`);
|
|
9
|
+
console.log('');
|
|
10
|
+
console.log('To install agents into your project:');
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(` ${CYAN}npm run install:emma${RESET} - Install Emma (empathy-mapper)`);
|
|
13
|
+
console.log(` ${CYAN}npm run install:wade${RESET} - Install Wade (wireframe-designer)`);
|
|
14
|
+
console.log(` ${CYAN}npm run install:agents${RESET} - Install all agents at once`);
|
|
15
|
+
console.log('');
|