installer updates, bmd module added and moved out of src, created a plan for module installation tool for custom modules, minor flow improvements
This commit is contained in:
@@ -80,7 +80,7 @@ The installer is a multi-stage system that handles agent compilation, IDE integr
|
||||
```
|
||||
1. Collect User Input
|
||||
- Target directory, modules, IDEs
|
||||
- Custom module configuration (via install-menu-config.yaml)
|
||||
- Custom module configuration (via install-config.yaml)
|
||||
|
||||
2. Pre-Installation
|
||||
- Validate target, check conflicts, backup existing installations
|
||||
@@ -163,12 +163,12 @@ The installer supports **14 IDE environments** through a base-derived architectu
|
||||
|
||||
### Custom Module Configuration
|
||||
|
||||
Modules define interactive configuration menus via `install-menu-config.yaml` files in their `_module-installer/` directories.
|
||||
Modules define interactive configuration menus via `install-config.yaml` files in their `_module-installer/` directories.
|
||||
|
||||
**Config File Location**:
|
||||
|
||||
- Core: `src/core/_module-installer/install-menu-config.yaml`
|
||||
- Modules: `src/modules/{module}/_module-installer/install-menu-config.yaml`
|
||||
- Core: `src/core/_module-installer/install-config.yaml`
|
||||
- Modules: `src/modules/{module}/_module-installer/install-config.yaml`
|
||||
|
||||
**Configuration Types**:
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ class ConfigCollector {
|
||||
this.allAnswers = {};
|
||||
}
|
||||
// Load module's config.yaml (check new location first, then fallback)
|
||||
const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-menu-config.yaml');
|
||||
const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
|
||||
const legacyConfigPath = path.join(getModulePath(moduleName), 'config.yaml');
|
||||
|
||||
let configPath = null;
|
||||
|
||||
@@ -46,7 +46,7 @@ class ModuleManager {
|
||||
if (entry.isDirectory()) {
|
||||
const modulePath = path.join(this.modulesSourcePath, entry.name);
|
||||
// Check for new structure first
|
||||
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-menu-config.yaml');
|
||||
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
||||
// Fallback to old structure
|
||||
const configPath = path.join(modulePath, 'config.yaml');
|
||||
|
||||
|
||||
@@ -155,8 +155,27 @@ class YamlXmlBuilder {
|
||||
}
|
||||
|
||||
// Start building XML
|
||||
let xml = '<!-- Powered by BMAD-CORE™ -->\n\n';
|
||||
xml += `# ${metadata.title || 'Agent'}\n\n`;
|
||||
let xml = '';
|
||||
|
||||
if (buildMetadata.forWebBundle) {
|
||||
// Web bundle: keep existing format
|
||||
xml += '<!-- Powered by BMAD-CORE™ -->\n\n';
|
||||
xml += `# ${metadata.title || 'Agent'}\n\n`;
|
||||
} else {
|
||||
// Installation: use YAML frontmatter + instruction
|
||||
// Extract name from filename: "cli-chief.yaml" or "pm.agent.yaml" -> "cli chief" or "pm"
|
||||
const filename = buildMetadata.sourceFile || 'agent.yaml';
|
||||
let nameFromFile = path.basename(filename, path.extname(filename)); // Remove .yaml/.md extension
|
||||
nameFromFile = nameFromFile.replace(/\.agent$/, ''); // Remove .agent suffix if present
|
||||
nameFromFile = nameFromFile.replaceAll('-', ' '); // Replace dashes with spaces
|
||||
|
||||
xml += '---\n';
|
||||
xml += `name: "${nameFromFile}"\n`;
|
||||
xml += `description: "${metadata.title || 'BMAD Agent'}"\n`;
|
||||
xml += '---\n\n';
|
||||
xml +=
|
||||
"You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.\n\n";
|
||||
}
|
||||
|
||||
xml += '```xml\n';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user