mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-29 16:14:59 +00:00
agents now are not duplicated and isntead cli commmands load from installed agent files
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
const path = require('node:path');
|
||||
const fs = require('fs-extra');
|
||||
const chalk = require('chalk');
|
||||
|
||||
/**
|
||||
* Generates launcher command files for each agent
|
||||
* Similar to WorkflowCommandGenerator but for agents
|
||||
*/
|
||||
class AgentCommandGenerator {
|
||||
constructor(bmadFolderName = 'bmad') {
|
||||
this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
|
||||
this.bmadFolderName = bmadFolderName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect agent artifacts for IDE installation
|
||||
* @param {string} bmadDir - BMAD installation directory
|
||||
* @param {Array} selectedModules - Modules to include
|
||||
* @returns {Object} Artifacts array with metadata
|
||||
*/
|
||||
async collectAgentArtifacts(bmadDir, selectedModules = []) {
|
||||
const { getAgentsFromBmad } = require('./bmad-artifacts');
|
||||
|
||||
// Get agents from INSTALLED bmad/ directory
|
||||
const agents = await getAgentsFromBmad(bmadDir, selectedModules);
|
||||
|
||||
const artifacts = [];
|
||||
|
||||
for (const agent of agents) {
|
||||
const launcherContent = await this.generateLauncherContent(agent);
|
||||
artifacts.push({
|
||||
type: 'agent-launcher',
|
||||
module: agent.module,
|
||||
name: agent.name,
|
||||
relativePath: path.join(agent.module, 'agents', `${agent.name}.md`),
|
||||
content: launcherContent,
|
||||
sourcePath: agent.path,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
artifacts,
|
||||
counts: {
|
||||
agents: agents.length,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate launcher content for an agent
|
||||
* @param {Object} agent - Agent metadata
|
||||
* @returns {string} Launcher file content
|
||||
*/
|
||||
async generateLauncherContent(agent) {
|
||||
// Load the template
|
||||
const template = await fs.readFile(this.templatePath, 'utf8');
|
||||
|
||||
// Replace template variables
|
||||
return template
|
||||
.replaceAll('{{name}}', agent.name)
|
||||
.replaceAll('{{module}}', agent.module)
|
||||
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
||||
.replaceAll('{bmad_folder}', this.bmadFolderName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write agent launcher artifacts to IDE commands directory
|
||||
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
||||
* @param {Array} artifacts - Agent launcher artifacts
|
||||
* @returns {number} Count of launchers written
|
||||
*/
|
||||
async writeAgentLaunchers(baseCommandsDir, artifacts) {
|
||||
let writtenCount = 0;
|
||||
|
||||
for (const artifact of artifacts) {
|
||||
if (artifact.type === 'agent-launcher') {
|
||||
const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
|
||||
await fs.ensureDir(moduleAgentsDir);
|
||||
|
||||
const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
|
||||
await fs.writeFile(launcherPath, artifact.content);
|
||||
writtenCount++;
|
||||
}
|
||||
}
|
||||
|
||||
return writtenCount;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { AgentCommandGenerator };
|
||||
Reference in New Issue
Block a user