mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-09-19 08:11:52 +08:00
V6.12
4 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5247108ba3 |
fix(installer): plain-text directory prompt, retire WDS, position on AiDD (#2680)
* fix(installer): submit the path shown and retire WDS from the picker Directory prompt The installation-directory prompt was a clack AutocompletePrompt whose render() drew only the text line. The candidate list existed but was never shown, and Enter returns the focused option rather than the typed text. Focus was sticky: it only reset when the previously focused value left the list, so a subdirectory selected while narrowing survived deleting back to the parent. Typing /path/to/workspace could install to /path/to/workspace/some-child with no sign of it on screen. Rebuilt on TextPrompt so the input line is the value: - the candidate list is visible, windowed, with an active-row marker - arrow keys and Tab write the highlighted candidate onto the input line - the list is frozen against the last typed text while browsing, so arrows walk siblings instead of descending (this also unsticks Tab cycling) - index -1 is the typed text, so backing out of the list restores it - Tab completes to real directories only, skipping "Create/use:" entries - directory() takes optional input/output streams so it is testable Module registry - WDS is marked deprecated: hidden from the picker unless already installed, shown with a notice when it is, never removed and still resolvable from its source so existing installs keep updating - deprecation notices now reach the CLI paths (--modules, --yes) and quick-update, which never render the picker's option hints - picker order is now bmm, bmb, cis, tea, bmad-loop, gds - the core row is hidden; it was a locked always-on checkbox. core is still added to the result, and the picker no longer requires a selection so a core-only install stays possible * fix(installer): replace the whole line when browsing directories _clearUserInput() sends readline ctrl+u, which deletes only what is left of the cursor, and _setUserInput() inserts at the cursor. Browsing after an arrow-key edit therefore left the surviving tail appended to the selected candidate: typing a path, pressing left three times, then down twice submitted ".../workspaceace" instead of ".../workspace/alpha". validateDirectorySync accepts that path when its parent exists, so the install went somewhere the user never typed - the same silent-divergence class this prompt was rebuilt to prevent. replaceLine() now moves to end of line (ctrl+e) before clearing. This also fixes the pre-existing instance of the bug on Tab. Alongside it: - shift+tab steps back through completions instead of acting as tab - the "... N more" counter counts only entries below the window, not every off-window entry, which overstated it once scrolled - an empty line resolves the default through expandHome/path.resolve, and seeds the candidate list from the same place, so the list always describes what Enter would submit - selectAllModules JSDoc no longer claims core is excluded - test escape sequences are written as escapes rather than raw bytes, and the keystroke driver has wider timing margins for CI * refactor(installer): make the directory prompt a plain text entry The candidate list, key hints and completion cycling were noise for the common case: people run the installer from the directory they want to install into, or one under it. Enter on an empty line already accepts that, so the list mostly served to push the actual question off screen. Removed the list rendering, the hint line, arrow/Tab browsing and the helpers that fed them (listDirectoryOptions, directoryWindow and the directory-probing utilities). What remains is a clack TextPrompt with a placeholder showing the default. The original defect stays fixed by construction rather than by bookkeeping: TextPrompt's value is the text on the input line, so there is no hidden selection that Enter could submit instead. Net effect on prompts.js versus main is -66 lines. * docs(installer): shorten module descriptions in the picker The hint beside a highlighted module ran long enough to wrap, which made the list harder to scan than the module names alone. Each description is now a single short phrase: - bmm Agile AI driven development - bmb Skill, workflow, and agent builder - cis Brainstorming, ideation, and creative problem solving - tea Enterprise testing BMM add-on - loop Builds, verifies, and retros a whole epic unattended - gds Ideate, design, and build games in any framework TEA is the only module that depends on BMM, and its description now says so. The others no longer imply it. "Loop" means nothing to a new user, so that description leads with what the module does rather than its name, and gds no longer enumerates engines. * feat(installer): pre-fill the directory prompt with the current directory The default was shown as dim placeholder text, so choosing anything near it meant typing the whole path by hand. It is now the real starting value on the input line: press Enter to take it, append to install one level down, or backspace to move up. Clearing the line and pressing Enter still accepts the default, and the placeholder remains for that case. * docs: reposition on Agile Ai Driven Development The tagline was absent from the installer and the README, and the slot under the wordmark where a tagline belongs was carrying the company line instead. AiDD is the category BMad Method operates in; the agile part is what BMad adds to it. Installer: - the banner reads tagline, then positioning, then company credit, in descending weight - bmm and cis picker descriptions match, with cis short enough that its row no longer wraps and shifts the list as you arrow onto it README: - the opening states the phrase, defines AiDD on first use, and drops the rhetorical "heard BMad means heavyweight process?" framing while keeping what it was defending - greenfield lean corrected: the opening now states the range, "add BMad to an existing codebase" is a CTA above the fold rather than a link at line 57, and a bullet names working from verified context on inherited code. Everything above the fold previously scaled by change size and nothing by codebase maturity, so a brownfield reader had no answer. - the module table matches the installer descriptions, uses full module names instead of letter codes, and adds BMad Loop, which was missing * docs: carry the module descriptions into the translated READMEs Game Dev Studio was the last picker row wide enough to wrap an 80-column terminal, which shifts the list as you arrow onto it. The engine list stays in the README tables, where there is room for it. The Chinese and Vietnamese READMEs have their own structure rather than being a translation of the current English one, so this only touches the two parts that had gone stale against the installer: the opening positioning line and the module table. Both tables now match the English one - installer descriptions, full module names instead of letter codes, and BMad Loop, which none of the three had. The translated prose needs a native reviewer before release. |
||
|
|
ea99b7ece5 |
chore(installer): remove 1,683 lines of dead code (#2247)
* chore(installer): remove dead code across installer modules
Delete 3 entirely dead files (agent-command-generator, bmad-artifacts,
module-injections) and remove ~50 unused exports from manifest.js,
cli-utils.js, prompts.js, path-utils.js, official-modules.js,
external-manager.js, custom-module-manager.js, and registry-client.js.
Removes corresponding dead tests.
* fix(installer): restore currentProjectDir writes for placeholder expansion
The previous commit removed the three assignments to
OfficialModules.currentProjectDir as dead code, but buildQuestion()
still reads the property to resolve {directory_name} placeholders in
module config defaults during interactive collection. Without the
writes, any module default containing {directory_name} would surface
the literal placeholder to users.
|
||
|
|
c46502f640 |
feat(installer): overhaul branding, versioning, and skill cleanup (#2223)
* feat(installer): overhaul branding, versioning, and skill cleanup Logo and branding: - Responsive logo: full "BMAD METHOD" at >=95 cols, "BMAD" for narrower terminals - Color scheme updated from yellow to blue (matching bmadcode.com brand) - Added copyright notice and tagline in white for contrast - Removed version number from logo (individual module versions shown in summary) - Added ™ to both wide and narrow logo variants Installer start message: - Replaced outdated V6 launch announcement with clean welcome - Consolidated redundant module/platform messaging into single intro - Tightened open source manifesto (same spirit, fewer words) - Merged speaking/media into support section with contact email - Added full social links: Website, Discord, YouTube, X, Facebook - Replaced docs.bmad-method.org and changelog links with bmadcode.com hub Install summary improvements: - Module names now show full display names from module.yaml (not abbreviations) - All module versions sourced from .claude-plugin/marketplace.json exclusively - Summary shows version transitions: "v6.2.2 -> v6.3.0", "v6.3.0, no change", or "v6.3.0, installed" for fresh installs - Switched summary from clack note() to box() for full-brightness text - Removed dim/gray styling that was hard to read on dark terminals - Links styled with color.blue instead of color.dim - Get started section leads with actionable steps (launch agent, run bmad-help) - Removed redundant social links (already shown in start message) Version source unification: - All module versions now come from .claude-plugin/marketplace.json only - Removed package.json as version source for core/bmm modules - Updated manifest.js getModuleVersionInfo() to use marketplace.json - Updated installer.js _getMarketplaceVersion() helper - Updated ui.js getMarketplaceVersion() for module selection display - Quick Update menu no longer shows misleading version (was using package.json) - Module selection list now shows versions next to each module name Skill cleanup overhaul: - Replaced blunt-force bmad-* prefix deletion with surgical removal system - Added removals.txt support: optional per-project file listing skills to remove - Created initial removals.txt with all skills removed since v6.2.0 - Install/update: captures previously installed skill IDs from skill-manifest.csv before manifest regeneration, then removes those + removals.txt entries - Uninstall: removes all installed skills via skill-manifest.csv + removals.txt - Deselecting modules now correctly removes their skills from IDE directories - User-created bmad-* skills in IDE directories are no longer destroyed - Legacy directory cleanup retains prefix matching (those dirs are abandoned) Bug fixes: - Fixed duplicate "CORE module already up to date" during quick update - Fixed version display showing package.json version instead of actual module version - Updated test fixture for bmad-os-* preservation test to use skill-manifest.csv * fix(installer): address Augment review findings - Fix plugins[0] fragility: extract highest version across all plugins in marketplace.json instead of assuming first entry (ui.js, installer.js, manifest.js) - Fix _readMarketplaceVersion ignoring moduleSourcePath: custom modules can now source their own marketplace.json by walking up from source path - Hard-exclude bmad-os-* utility skills in both surgical and legacy cleanup modes, preventing accidental deletion if tracked in manifests - Distinguish missing file vs parse error in skill-manifest.csv reading: warn on corrupt CSV instead of silently skipping cleanup * fix(installer): resolve module source before reading marketplace version Move _readMarketplaceVersion call after source type resolution so custom modules use their own source path instead of falling back to the external module cache, which could match a different module with the same code. |
||
|
|
513f440a23 |
refactor(installer): restructure installer with clean separation of concerns (#2129)
* refactor(installer): restructure installer with clean separation of concerns Move tools/cli/ to tools/installer/ with major structural cleanup: - InstallPaths async factory for path resolution and directory creation - Config value object (frozen) replaces mutable config bag - ExistingInstall value object replaces stateful Detector class - OfficialModules + CustomModules + ExternalModuleManager replace monolithic ModuleManager - install() is prompt-free; all user interaction in ui.js - Update state returned explicitly instead of mutating customConfig - Delete dead code: dependency-resolver, _base-ide, IdeConfigManager, platform-codes helpers, npx wrapper, xml-utils - Flatten directory structure: custom/handler → custom-handler, tools/cli/ → tools/installer/, lib/ directories removed - Update all path references in package.json, tests, CI, and docs * fix(installer): guard ExistingInstall.version and surface module.yaml errors Guard ExistingInstall.version access with .installed check in uninstall.js, ui.js, and installer.js to prevent throwing on empty/partial _bmad dirs. Surface invalid module.yaml parse errors as warnings instead of silently returning empty results. |