From 1943ca2ad1ae4b89137c66cc133391e50e063739 Mon Sep 17 00:00:00 2001 From: murat Date: Sat, 14 Feb 2026 09:39:47 -0600 Subject: [PATCH] docs: added docs on how to set the post install output in the module --- tools/cli/README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tools/cli/README.md b/tools/cli/README.md index 6d698580f..dbc7ee07c 100644 --- a/tools/cli/README.md +++ b/tools/cli/README.md @@ -5,3 +5,62 @@ For external official modules to be discoverable during install, ensure an entry for the external repo is added to external-official-modules.yaml. For community modules - this will be handled in a different way. This file is only for registration of modules under the bmad-code-org. + +## Post-Install Configuration Notes for Module Authors + +The installer can display setup guidance to users after a module's configuration is collected. This is handled by the `displayModulePostConfigNotes(moduleName)` method in `installers/lib/core/config-collector.js`. + +### When It Runs + +The method is called in two places: + +- After `collectModuleConfig()` completes (full interactive configuration) +- After `collectModuleConfigQuick()` completes (quick mode with existing config) + +This ensures users see relevant setup instructions regardless of installation path. + +### Guards + +Output is suppressed when: + +- **Silent mode** (`this._silentConfig`) — non-interactive installations skip all output +- **Feature disabled** — e.g., if the config value is `'none'`, no guidance is needed + +### Adding Support for a New Module + +To add post-config notes for your module, add a conditional block in `displayModulePostConfigNotes()`: + +```javascript +async displayModulePostConfigNotes(moduleName) { + if (this._silentConfig) return; + + // Existing: TEA module handler + if (moduleName !== 'tea') return; + // ... + + // To add your module, replace the early return above with: + if (moduleName === 'your-module') { + const config = this.collectedConfig[moduleName]; + if (!config || !config.your_config_key) return; + + const value = config.your_config_key; + if (value === 'none') return; + + const color = await prompts.getColor(); + await prompts.log.message(''); + await prompts.log.info(color.bold('Your Setup Instructions:')); + await prompts.log.message(color.dim(' Instructions based on selected value...')); + } +} +``` + +### Key Details + +- Read config values from `this.collectedConfig[moduleName]` +- Use `prompts.log.info()` for headers and `prompts.log.message()` for details +- Use `color.bold()` and `color.dim()` for visual hierarchy +- The config question that drives the output is defined in the module's `module.yaml` + +### Working Example: TEA Module + +The TEA module defines a `tea_browser_automation` config question with options: `auto`, `cli`, `mcp`, `none`. After configuration, the handler at lines 1207-1235 displays Playwright CLI install commands and/or MCP setup links based on the user's selection.