diff --git a/docs/fr/how-to/customize-bmad.md b/docs/fr/how-to/customize-bmad.md index 94abfffde..f6a481235 100644 --- a/docs/fr/how-to/customize-bmad.md +++ b/docs/fr/how-to/customize-bmad.md @@ -127,7 +127,7 @@ prompts: ### 3. Appliquer vos modifications -Après modification, recompilez l'agent pour appliquer les changements : +Après modification, réinstallez pour appliquer les changements : ```bash npx bmad-method install @@ -137,17 +137,16 @@ L'installateur détecte l'installation existante et propose ces options : | Option | Ce qu'elle fait | | ----------------------------------- | ---------------------------------------------------------------------- | -| **Quick Update** | Met à jour tous les modules vers la dernière version et recompile tous les agents | -| **Recompile Agents** | Applique uniquement les personnalisations, sans mettre à jour les fichiers de modules | +| **Quick Update** | Met à jour tous les modules vers la dernière version et applique les personnalisations | | **Modify BMad Installation** | Flux d'installation complet pour ajouter ou supprimer des modules | -Pour des modifications de personnalisation uniquement, **Recompile Agents** est l'option la plus rapide. +Pour des modifications de personnalisation uniquement, **Quick Update** est l'option la plus rapide. ## Résolution des problèmes **Les modifications n'apparaissent pas ?** -- Exécutez `npx bmad-method install` et sélectionnez **Recompile Agents** pour appliquer les modifications +- Exécutez `npx bmad-method install` et sélectionnez **Quick Update** pour appliquer les modifications - Vérifiez que votre syntaxe YAML est valide (l'indentation compte) - Assurez-vous d'avoir modifié le bon fichier `.customize.yaml` pour l'agent @@ -160,7 +159,7 @@ Pour des modifications de personnalisation uniquement, **Recompile Agents** est **Besoin de réinitialiser un agent ?** - Effacez ou supprimez le fichier `.customize.yaml` de l'agent -- Exécutez `npx bmad-method install` et sélectionnez **Recompile Agents** pour restaurer les valeurs par défaut +- Exécutez `npx bmad-method install` et sélectionnez **Quick Update** pour restaurer les valeurs par défaut ## Personnalisation des workflows diff --git a/docs/fr/how-to/non-interactive-installation.md b/docs/fr/how-to/non-interactive-installation.md index 90ee4574f..46e8ad4dc 100644 --- a/docs/fr/how-to/non-interactive-installation.md +++ b/docs/fr/how-to/non-interactive-installation.md @@ -28,7 +28,7 @@ Nécessite [Node.js](https://nodejs.org) v20+ et `npx` (inclus avec npm). | `--modules ` | IDs de modules séparés par des virgules | `--modules bmm,bmb` | | `--tools ` | IDs d'outils/IDE séparés par des virgules (utilisez `none` pour ignorer) | `--tools claude-code,cursor` ou `--tools none` | | `--custom-content ` | Chemins vers des modules personnalisés séparés par des virgules | `--custom-content ~/my-module,~/another-module` | -| `--action ` | Action pour les installations existantes : `install` (par défaut), `update`, `quick-update`, ou `compile-agents` | `--action quick-update` | +| `--action ` | Action pour les installations existantes : `install` (par défaut), `update`, ou `quick-update` | `--action quick-update` | ### Configuration principale @@ -121,7 +121,7 @@ npx bmad-method install \ ## Ce que vous obtenez - Un répertoire `_bmad/` entièrement configuré dans votre projet -- Des agents et des flux de travail compilés pour vos modules et outils sélectionnés +- Des agents et des flux de travail configurés pour vos modules et outils sélectionnés - Un dossier `_bmad-output/` pour les artefacts générés ## Validation et gestion des erreurs @@ -132,7 +132,7 @@ BMad valide toutes les options fournis : - **Modules** — Avertit des IDs de modules invalides (mais n'échoue pas) - **Tools** — Avertit des IDs d'outils invalides (mais n'échoue pas) - **Custom Content** — Chaque chemin doit contenir un fichier `module.yaml` valide -- **Action** — Doit être l'une des suivantes : `install`, `update`, `quick-update`, `compile-agents` +- **Action** — Doit être l'une des suivantes : `install`, `update`, `quick-update` Les valeurs invalides entraîneront soit : 1. L’affichage d’un message d'erreur suivi d’un exit (pour les options critiques comme le répertoire) diff --git a/docs/how-to/customize-bmad.md b/docs/how-to/customize-bmad.md index d478c349b..cfb75333c 100644 --- a/docs/how-to/customize-bmad.md +++ b/docs/how-to/customize-bmad.md @@ -128,7 +128,7 @@ prompts: ### 3. Apply Your Changes -After editing, recompile the agent to apply changes: +After editing, reinstall to apply changes: ```bash npx bmad-method install @@ -138,17 +138,16 @@ The installer detects the existing installation and offers these options: | Option | What It Does | | ---------------------------- | ------------------------------------------------------------------- | -| **Quick Update** | Updates all modules to the latest version and recompiles all agents | -| **Recompile Agents** | Applies customizations only, without updating module files | +| **Quick Update** | Updates all modules to the latest version and applies customizations | | **Modify BMad Installation** | Full installation flow for adding or removing modules | -For customization-only changes, **Recompile Agents** is the fastest option. +For customization-only changes, **Quick Update** is the fastest option. ## Troubleshooting **Changes not appearing?** -- Run `npx bmad-method install` and select **Recompile Agents** to apply changes +- Run `npx bmad-method install` and select **Quick Update** to apply changes - Check that your YAML syntax is valid (indentation matters) - Verify you edited the correct `.customize.yaml` file for the agent @@ -161,7 +160,7 @@ For customization-only changes, **Recompile Agents** is the fastest option. **Need to reset an agent?** - Clear or delete the agent's `.customize.yaml` file -- Run `npx bmad-method install` and select **Recompile Agents** to restore defaults +- Run `npx bmad-method install` and select **Quick Update** to restore defaults ## Workflow Customization diff --git a/docs/how-to/non-interactive-installation.md b/docs/how-to/non-interactive-installation.md index fa7a1e7b1..62b3090d8 100644 --- a/docs/how-to/non-interactive-installation.md +++ b/docs/how-to/non-interactive-installation.md @@ -28,7 +28,7 @@ Requires [Node.js](https://nodejs.org) v20+ and `npx` (included with npm). | `--modules ` | Comma-separated module IDs | `--modules bmm,bmb` | | `--tools ` | Comma-separated tool/IDE IDs (use `none` to skip) | `--tools claude-code,cursor` or `--tools none` | | `--custom-content ` | Comma-separated paths to custom modules | `--custom-content ~/my-module,~/another-module` | -| `--action ` | Action for existing installations: `install` (default), `update`, `quick-update`, or `compile-agents` | `--action quick-update` | +| `--action ` | Action for existing installations: `install` (default), `update`, or `quick-update` | `--action quick-update` | ### Core Configuration @@ -121,7 +121,7 @@ npx bmad-method install \ ## What You Get - A fully configured `_bmad/` directory in your project -- Compiled agents and workflows for your selected modules and tools +- Agents and workflows configured for your selected modules and tools - A `_bmad-output/` folder for generated artifacts ## Validation and Error Handling @@ -132,7 +132,7 @@ BMad validates all provided flags: - **Modules** — Warns about invalid module IDs (but won't fail) - **Tools** — Warns about invalid tool IDs (but won't fail) - **Custom Content** — Each path must contain a valid `module.yaml` file -- **Action** — Must be one of: `install`, `update`, `quick-update`, `compile-agents` +- **Action** — Must be one of: `install`, `update`, `quick-update` Invalid values will either: 1. Show an error and exit (for critical options like directory) diff --git a/docs/zh-cn/how-to/customize-bmad.md b/docs/zh-cn/how-to/customize-bmad.md index 55396ac6e..5f762ba20 100644 --- a/docs/zh-cn/how-to/customize-bmad.md +++ b/docs/zh-cn/how-to/customize-bmad.md @@ -128,7 +128,7 @@ prompts: ### 3. 应用您的更改 -编辑后,重新编译智能体以应用更改: +编辑后,重新安装以应用更改: ```bash npx bmad-method install @@ -138,17 +138,16 @@ npx bmad-method install | Option | What It Does | | ---------------------------- | ------------------------------------------------------------------- | -| **Quick Update** | 将所有模块更新到最新版本并重新编译所有智能体 | -| **Recompile Agents** | 仅应用自定义配置,不更新模块文件 | +| **Quick Update** | 将所有模块更新到最新版本并应用自定义配置 | | **Modify BMad Installation** | 用于添加或删除模块的完整安装流程 | -对于仅自定义配置的更改,**Recompile Agents** 是最快的选项。 +对于仅自定义配置的更改,**Quick Update** 是最快的选项。 ## 故障排除 **更改未生效?** -- 运行 `npx bmad-method install` 并选择 **Recompile Agents** 以应用更改 +- 运行 `npx bmad-method install` 并选择 **Quick Update** 以应用更改 - 检查您的 YAML 语法是否有效(缩进很重要) - 验证您编辑的是该智能体正确的 `.customize.yaml` 文件 @@ -161,7 +160,7 @@ npx bmad-method install **需要重置智能体?** - 清空或删除智能体的 `.customize.yaml` 文件 -- 运行 `npx bmad-method install` 并选择 **Recompile Agents** 以恢复默认设置 +- 运行 `npx bmad-method install` 并选择 **Quick Update** 以恢复默认设置 ## 工作流自定义 diff --git a/docs/zh-cn/how-to/non-interactive-installation.md b/docs/zh-cn/how-to/non-interactive-installation.md index 11d57a712..930bbe639 100644 --- a/docs/zh-cn/how-to/non-interactive-installation.md +++ b/docs/zh-cn/how-to/non-interactive-installation.md @@ -28,7 +28,7 @@ sidebar: | `--modules ` | 逗号分隔的模块 ID | `--modules bmm,bmb` | | `--tools ` | 逗号分隔的工具/IDE ID(使用 `none` 跳过) | `--tools claude-code,cursor` 或 `--tools none` | | `--custom-content ` | 逗号分隔的自定义模块路径 | `--custom-content ~/my-module,~/another-module` | -| `--action ` | 对现有安装的操作:`install`(默认)、`update`、`quick-update` 或 `compile-agents` | `--action quick-update` | +| `--action ` | 对现有安装的操作:`install`(默认)、`update` 或 `quick-update` | `--action quick-update` | ### 核心配置 @@ -121,7 +121,7 @@ npx bmad-method install \ ## 安装结果 - 项目中完全配置的 `_bmad/` 目录 -- 为所选模块和工具编译的智能体和工作流 +- 为所选模块和工具配置的智能体和工作流 - 用于生成产物的 `_bmad-output/` 文件夹 ## 验证和错误处理 @@ -132,7 +132,7 @@ BMad 会验证所有提供的标志: - **模块** — 对无效的模块 ID 发出警告(但不会失败) - **工具** — 对无效的工具 ID 发出警告(但不会失败) - **自定义内容** — 每个路径必须包含有效的 `module.yaml` 文件 -- **操作** — 必须是以下之一:`install`、`update`、`quick-update`、`compile-agents` +- **操作** — 必须是以下之一:`install`、`update`、`quick-update` 无效值将: 1. 显示错误并退出(对于目录等关键选项) diff --git a/tools/cli/installers/lib/core/manifest-generator.js b/tools/cli/installers/lib/core/manifest-generator.js index c9b85db27..53f2e11c6 100644 --- a/tools/cli/installers/lib/core/manifest-generator.js +++ b/tools/cli/installers/lib/core/manifest-generator.js @@ -515,7 +515,7 @@ class ManifestGenerator { /** * Get agents from a directory recursively - * Only includes compiled .md files (not .agent.yaml source files) + * Only includes .md files with agent content */ async getAgentsFromDir(dirPath, moduleName, relativePath = '') { // Skip directories claimed by collectSkills @@ -572,7 +572,7 @@ class ManifestGenerator { const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name; const subDirAgents = await this.getAgentsFromDir(fullPath, moduleName, newRelativePath); agents.push(...subDirAgents); - } else if (entry.name.endsWith('.md') && !entry.name.endsWith('.agent.yaml') && entry.name.toLowerCase() !== 'readme.md') { + } else if (entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') { const content = await fs.readFile(fullPath, 'utf8'); // Skip files that don't contain tag (e.g., README files) diff --git a/tools/cli/installers/lib/modules/manager.js b/tools/cli/installers/lib/modules/manager.js index e2b3b5378..17a320c44 100644 --- a/tools/cli/installers/lib/modules/manager.js +++ b/tools/cli/installers/lib/modules/manager.js @@ -457,10 +457,6 @@ class ModuleManager { await fs.remove(targetPath); } - // Vendor cross-module workflows BEFORE copying - // This reads source agent.yaml files and copies referenced workflows - await this.vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName); - // Copy module files with filtering await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig); @@ -606,9 +602,7 @@ class ModuleManager { continue; } - // Only skip sidecar directories - they are handled separately during agent compilation - // But still allow other files in agent directories - const isInAgentDirectory = file.startsWith('agents/'); + // Skip sidecar directories - these contain agent-specific assets not needed at install time const isInSidecarDirectory = path .dirname(file) .split('/') @@ -630,11 +624,6 @@ class ModuleManager { continue; } - // Skip .agent.yaml files - they will be compiled separately - if (file.endsWith('.agent.yaml')) { - continue; - } - const sourceFile = path.join(sourcePath, file); const targetFile = path.join(targetPath, file); @@ -687,101 +676,6 @@ class ModuleManager { return agentFiles; } - /** - * Vendor cross-module workflows referenced in agent files - * Scans SOURCE agent.yaml files for workflow-install and copies workflows to destination - * @param {string} sourcePath - Source module path - * @param {string} targetPath - Target module path (destination) - * @param {string} moduleName - Module name being installed - */ - async vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName) { - const sourceAgentsPath = path.join(sourcePath, 'agents'); - - // Check if source agents directory exists - if (!(await fs.pathExists(sourceAgentsPath))) { - return; // No agents to process - } - - // Get all agent YAML files from source - const agentFiles = await fs.readdir(sourceAgentsPath); - const yamlFiles = agentFiles.filter((f) => f.endsWith('.agent.yaml') || f.endsWith('.yaml')); - - if (yamlFiles.length === 0) { - return; // No YAML agent files - } - - let workflowsVendored = false; - - for (const agentFile of yamlFiles) { - const agentPath = path.join(sourceAgentsPath, agentFile); - const agentYaml = yaml.parse(await fs.readFile(agentPath, 'utf8')); - - // Check if agent has menu items with workflow-install - const menuItems = agentYaml?.agent?.menu || []; - const workflowInstallItems = menuItems.filter((item) => item['workflow-install']); - - if (workflowInstallItems.length === 0) { - continue; // No workflow-install in this agent - } - - if (!workflowsVendored) { - await prompts.log.info(`\n Vendoring cross-module workflows for ${moduleName}...`); - workflowsVendored = true; - } - - await prompts.log.message(` Processing: ${agentFile}`); - - for (const item of workflowInstallItems) { - const sourceWorkflowPath = item.exec; // Where to copy FROM - const installWorkflowPath = item['workflow-install']; // Where to copy TO - - // Parse SOURCE workflow path - // Example: {project-root}/_bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md - const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/); - if (!sourceMatch) { - await prompts.log.warn(` Could not parse workflow path: ${sourceWorkflowPath}`); - continue; - } - - const [, sourceModule, sourceWorkflowSubPath] = sourceMatch; - - // Parse INSTALL workflow path - // Example: {project-root}/_bmad/bmgd/workflows/4-production/create-story/workflow.md - const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/); - if (!installMatch) { - await prompts.log.warn(` Could not parse workflow-install path: ${installWorkflowPath}`); - continue; - } - - const installWorkflowSubPath = installMatch[2]; - - const sourceModulePath = getModulePath(sourceModule); - const actualSourceWorkflowPath = path.join(sourceModulePath, 'workflows', sourceWorkflowSubPath.replace(/\/workflow\.md$/, '')); - - const actualDestWorkflowPath = path.join(targetPath, 'workflows', installWorkflowSubPath.replace(/\/workflow\.md$/, '')); - - // Check if source workflow exists - if (!(await fs.pathExists(actualSourceWorkflowPath))) { - await prompts.log.warn(` Source workflow not found: ${actualSourceWorkflowPath}`); - continue; - } - - // Copy the entire workflow folder - await prompts.log.message( - ` Vendoring: ${sourceModule}/workflows/${sourceWorkflowSubPath.replace(/\/workflow\.md$/, '')} → ${moduleName}/workflows/${installWorkflowSubPath.replace(/\/workflow\.md$/, '')}`, - ); - - await fs.ensureDir(path.dirname(actualDestWorkflowPath)); - // Copy the workflow directory recursively with placeholder replacement - await this.copyDirectoryWithPlaceholderReplacement(actualSourceWorkflowPath, actualDestWorkflowPath); - } - } - - if (workflowsVendored) { - await prompts.log.success(` Workflow vendoring complete\n`); - } - } - /** * Create directories declared in module.yaml's `directories` key * This replaces the security-risky module installer pattern with declarative config