Files
BMAD-METHOD/bmad-modules.yaml
Brian 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.
2026-08-03 19:54:31 -05:00

134 lines
5.7 KiB
YAML

# Official module registry — the single source of truth for which modules
# the BMad installer offers and how they are displayed.
#
# Order here determines display order in the installer picker (after the
# built-in core and bmm entries, which are loaded from local module.yaml).
#
# default_channel (optional) — the install channel when the user does not
# override with --channel/--pin/--next. Valid values: stable | next.
# Omit to inherit the installer's hardcoded default (stable).
#
# deprecated (optional, default false) — when true, the module is hidden from
# the installer picker UNLESS it is already installed (so existing users can
# still see/manage it, but new users are not offered it).
# deprecation-message (optional) — surfaced in the picker hint for a deprecated
# module that is still installed; use it to point users to the replacement.
#
# marketplace-plugin (optional, default false) — when true, the module's
# installable skills are resolved from its .claude-plugin/marketplace.json via
# the plugin resolver (instead of copying the single module-definition dir).
# Use this for modules whose module.yaml does not sit alongside the skill
# folders. module-definition should still point at the real module.yaml so
# config/version lookups work.
#
# post-install-message (optional) — an "action needed" notice shown to the user
# after install completes, once for each install run that includes the module.
# Interactive installs require the user to acknowledge it (press Enter);
# non-interactive (--yes) installs print it and continue. Use for required
# follow-up steps (e.g. "run the X setup skill").
#
# aliases (optional) — prior `code` values this module was registered under.
# An existing install recorded under an alias resolves to this entry (source,
# name, description, post-install message) instead of being orphaned as
# "no source available" when the code changes. quick-update also migrates the
# install to the new code and removes the stale `_bmad/<alias>/` directory.
modules:
bmad-builder:
url: https://github.com/bmad-code-org/bmad-builder
module-definition: skills/module.yaml
code: bmb
name: "BMad Builder"
description: "Skill, workflow, and agent builder"
defaultSelected: false
type: bmad-org
npmPackage: bmad-builder
default_channel: stable
bmad-creative-intelligence-suite:
url: https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite
module-definition: src/module.yaml
code: cis
name: "BMad Creative Intelligence Suite"
description: "Creative thinking partners"
defaultSelected: false
type: bmad-org
npmPackage: bmad-creative-intelligence-suite
default_channel: stable
bmad-method-test-architecture-enterprise:
url: https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise
module-definition: src/module.yaml
code: tea
name: "BMad Test Architect"
description: "Enterprise testing BMM add-on"
defaultSelected: false
type: bmad-org
npmPackage: bmad-method-test-architecture-enterprise
default_channel: stable
bmad-loop:
url: https://github.com/bmad-code-org/bmad-loop
module-definition: src/bmad_loop/data/skills/bmad-loop-setup/assets/module.yaml
code: bmad-loop
# bauto is the pre-rename code (module was bmad-auto before both the repo
# and its contents were renamed to bmad-loop); keeps existing bauto
# installs migrating forward instead of being orphaned.
aliases: [bauto]
name: "BMad Loop"
description: "Builds, verifies, and retros a whole epic unattended"
defaultSelected: false
type: bmad-org
default_channel: stable
# Skills live outside a single module.yaml dir; resolve them from
# .claude-plugin/marketplace.json via the plugin resolver (see external-manager).
marketplace-plugin: true
post-install-message: |
BMad Loop installed. To finish setup, run the bmad-loop-setup skill
from your agent:
> use the bmad-loop-setup skill
It installs the bmad-loop orchestrator tool and wires up the per-project
hooks and policy. The automation skills don't run until setup completes.
bmad-game-dev-studio:
url: https://github.com/bmad-code-org/bmad-module-game-dev-studio.git
module-definition: src/module.yaml
code: gds
name: "BMad Game Dev Studio"
description: "Ideate, design, and build games"
defaultSelected: false
type: bmad-org
npmPackage: bmad-game-dev-studio
default_channel: stable
# --- Deprecated: hidden from the picker unless already installed ---
bmad-automator:
url: https://github.com/bmad-code-org/bmad-automator
module-definition: skills/module.yaml
code: automator
name: "BMad Automator Epic Builder Experimental"
description: "EXPERIMENTAL: only supports claude and codex currently"
defaultSelected: false
type: experimental
npmPackage: bmad-story-automator
default_channel: next
deprecated: true
deprecation-message: "BMad Automator has been deprecated and is replaced by BMad Loop (bmad-loop). Install BMad Loop instead."
bmad-method-wds-expansion:
url: https://github.com/bmad-code-org/bmad-method-wds-expansion
module-definition: src/module.yaml
code: wds
plugin_name: bmad-wds # WDS marketplace.json declares the plugin under this name
name: "Whiteport Design Studio"
description: "Strategic UX and Design first planning methodology"
defaultSelected: false
type: bmad-org
npmPackage: bmad-wds
default_channel: stable
deprecated: true
deprecation-message: "Whiteport Design Studio is no longer receiving updates. Its capabilities are being folded into BMad Method (bmm) as enhanced UX features. Your existing install is kept as-is."