bmad-method 6.3.1-next.3 → 6.3.1-next.5
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/package.json +1 -1
- package/src/core-skills/module.yaml +1 -0
- package/tools/installer/cli-utils.js +0 -137
- package/tools/installer/core/manifest.js +0 -577
- package/tools/installer/ide/shared/path-utils.js +0 -145
- package/tools/installer/modules/custom-module-manager.js +0 -27
- package/tools/installer/modules/external-manager.js +0 -40
- package/tools/installer/modules/official-modules.js +2 -50
- package/tools/installer/modules/registry-client.js +0 -11
- package/tools/installer/prompts.js +0 -106
- package/tools/installer/ui.js +44 -11
- package/tools/installer/ide/shared/module-injections.js +0 -136
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
code: core
|
|
2
2
|
name: "BMad Core Module"
|
|
3
|
+
description: "Core configuration and shared resources"
|
|
3
4
|
|
|
4
5
|
header: "BMad Core Configuration"
|
|
5
6
|
subheader: "Configure the core settings for your BMad installation.\nThese settings will be used across all installed bmad skills, workflows, and agents."
|
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
const path = require('node:path');
|
|
2
|
-
const os = require('node:os');
|
|
3
1
|
const prompts = require('./prompts');
|
|
4
2
|
|
|
5
3
|
const CLIUtils = {
|
|
6
|
-
/**
|
|
7
|
-
* Get version from package.json
|
|
8
|
-
*/
|
|
9
|
-
getVersion() {
|
|
10
|
-
try {
|
|
11
|
-
const packageJson = require(path.join(__dirname, '..', '..', 'package.json'));
|
|
12
|
-
return packageJson.version || 'Unknown';
|
|
13
|
-
} catch {
|
|
14
|
-
return 'Unknown';
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
|
|
18
4
|
/**
|
|
19
5
|
* Display BMAD logo and version using @clack intro + box
|
|
20
6
|
*/
|
|
@@ -52,37 +38,6 @@ const CLIUtils = {
|
|
|
52
38
|
});
|
|
53
39
|
},
|
|
54
40
|
|
|
55
|
-
/**
|
|
56
|
-
* Display section header
|
|
57
|
-
* @param {string} title - Section title
|
|
58
|
-
* @param {string} subtitle - Optional subtitle
|
|
59
|
-
*/
|
|
60
|
-
async displaySection(title, subtitle = null) {
|
|
61
|
-
await prompts.note(subtitle || '', title);
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Display info box
|
|
66
|
-
* @param {string|Array} content - Content to display
|
|
67
|
-
* @param {Object} options - Box options
|
|
68
|
-
*/
|
|
69
|
-
async displayBox(content, options = {}) {
|
|
70
|
-
let text = content;
|
|
71
|
-
if (Array.isArray(content)) {
|
|
72
|
-
text = content.join('\n\n');
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const color = await prompts.getColor();
|
|
76
|
-
const borderColor = options.borderColor || 'cyan';
|
|
77
|
-
const colorMap = { green: color.green, red: color.red, yellow: color.yellow, cyan: color.cyan, blue: color.blue };
|
|
78
|
-
const formatBorder = colorMap[borderColor] || color.cyan;
|
|
79
|
-
|
|
80
|
-
await prompts.box(text, options.title, {
|
|
81
|
-
rounded: options.borderStyle === 'round' || options.borderStyle === undefined,
|
|
82
|
-
formatBorder,
|
|
83
|
-
});
|
|
84
|
-
},
|
|
85
|
-
|
|
86
41
|
/**
|
|
87
42
|
* Display module configuration header
|
|
88
43
|
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
@@ -93,98 +48,6 @@ const CLIUtils = {
|
|
|
93
48
|
const title = header || `Configuring ${moduleName.toUpperCase()} Module`;
|
|
94
49
|
await prompts.note(subheader || '', title);
|
|
95
50
|
},
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Display module with no custom configuration
|
|
99
|
-
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
100
|
-
* @param {string} header - Custom header from module.yaml
|
|
101
|
-
* @param {string} subheader - Custom subheader from module.yaml
|
|
102
|
-
*/
|
|
103
|
-
async displayModuleNoConfig(moduleName, header = null, subheader = null) {
|
|
104
|
-
const title = header || `${moduleName.toUpperCase()} Module - No Custom Configuration`;
|
|
105
|
-
await prompts.note(subheader || '', title);
|
|
106
|
-
},
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Display step indicator
|
|
110
|
-
* @param {number} current - Current step
|
|
111
|
-
* @param {number} total - Total steps
|
|
112
|
-
* @param {string} description - Step description
|
|
113
|
-
*/
|
|
114
|
-
async displayStep(current, total, description) {
|
|
115
|
-
const progress = `[${current}/${total}]`;
|
|
116
|
-
await prompts.log.step(`${progress} ${description}`);
|
|
117
|
-
},
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Display completion message
|
|
121
|
-
* @param {string} message - Completion message
|
|
122
|
-
*/
|
|
123
|
-
async displayComplete(message) {
|
|
124
|
-
const color = await prompts.getColor();
|
|
125
|
-
await prompts.box(`\u2728 ${message}`, 'Complete', {
|
|
126
|
-
rounded: true,
|
|
127
|
-
formatBorder: color.green,
|
|
128
|
-
});
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Display error message
|
|
133
|
-
* @param {string} message - Error message
|
|
134
|
-
*/
|
|
135
|
-
async displayError(message) {
|
|
136
|
-
const color = await prompts.getColor();
|
|
137
|
-
await prompts.box(`\u2717 ${message}`, 'Error', {
|
|
138
|
-
rounded: true,
|
|
139
|
-
formatBorder: color.red,
|
|
140
|
-
});
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Format list for display
|
|
145
|
-
* @param {Array} items - Items to display
|
|
146
|
-
* @param {string} prefix - Item prefix
|
|
147
|
-
*/
|
|
148
|
-
formatList(items, prefix = '\u2022') {
|
|
149
|
-
return items.map((item) => ` ${prefix} ${item}`).join('\n');
|
|
150
|
-
},
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Clear previous lines
|
|
154
|
-
* @param {number} lines - Number of lines to clear
|
|
155
|
-
*/
|
|
156
|
-
clearLines(lines) {
|
|
157
|
-
for (let i = 0; i < lines; i++) {
|
|
158
|
-
process.stdout.moveCursor(0, -1);
|
|
159
|
-
process.stdout.clearLine(1);
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Display module completion message
|
|
165
|
-
* @param {string} moduleName - Name of the completed module
|
|
166
|
-
* @param {boolean} clearScreen - Whether to clear the screen first (deprecated, always false now)
|
|
167
|
-
*/
|
|
168
|
-
displayModuleComplete(moduleName, clearScreen = false) {
|
|
169
|
-
// No longer clear screen or show boxes - just a simple completion message
|
|
170
|
-
// This is deprecated but kept for backwards compatibility
|
|
171
|
-
},
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Expand path with ~ expansion
|
|
175
|
-
* @param {string} inputPath - Path to expand
|
|
176
|
-
* @returns {string} Expanded path
|
|
177
|
-
*/
|
|
178
|
-
expandPath(inputPath) {
|
|
179
|
-
if (!inputPath) return inputPath;
|
|
180
|
-
|
|
181
|
-
// Expand ~ to home directory
|
|
182
|
-
if (inputPath.startsWith('~')) {
|
|
183
|
-
return path.join(os.homedir(), inputPath.slice(1));
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return inputPath;
|
|
187
|
-
},
|
|
188
51
|
};
|
|
189
52
|
|
|
190
53
|
module.exports = { CLIUtils };
|