Update 9 files that referenced the old path
bmm/workflows/3-solutioning/architecture/steps/ to the correct
bmm/workflows/3-solutioning/create-architecture/steps/ after the
directory was renamed.
Fixes#1625
Co-authored-by: Junie <junie@jetbrains.com>
tools/audit-file-refs.md — a repeatable prompt that spawns parallel
Haiku subagents to semantically audit new-format source files for
non-conforming file references. Includes a self-check that verifies
all files are accounted for before producing the final report.
Replaces the planned regex extension (Item 1 of the master plan) with
an approach that can handle the full surface area of reference patterns
without exhaustive pattern enumeration.
Also excludes .junie/ from Prettier checks (IDE integration folder,
user-specific, not in repo).
Refs #1718
Co-authored-by: Brian <bmadcode@gmail.com>
Add CodeBuddy (Tencent Cloud Code Assistant) as a supported IDE platform:
- Add platform config to tools/platform-codes.yaml
- Add installer config to tools/cli/installers/lib/ide/platform-codes.yaml
- Add .codebuddy to .gitignore
CodeBuddy uses the default template type with target directory .codebuddy/commands
Co-authored-by: wison <wisonlin@tencent.com>
Co-authored-by: Brian <bmadcode@gmail.com>
- create-architecture/workflow.md: fix installed_path dir name
from 'architecture' to 'create-architecture'
- create-story/checklist.md: fix 2 refs from validate-workflow.xml
to workflow.xml (file does not exist with validate- prefix)
- package.json: add --strict to validate:refs so broken references
fail CI instead of logging warnings and exiting 0
Co-authored-by: Brian <bmadcode@gmail.com>
* fix(installer): add custom Rovo Dev installer with prompts.yml generation
Rovo Dev CLI requires a .rovodev/prompts.yml manifest to register prompts
for /prompts access. The config-driven installer was writing .md files but
never generating this manifest, so /prompts showed nothing.
- Create custom rovodev.js installer extending BaseIdeSetup
- Generate prompts.yml indexing all written workflow files
- Merge with existing user entries (only touch bmad- prefixed entries)
- Remove stale rovo entry from tools/platform-codes.yaml
Closes#1466
* fix(installer): prefix prompts.yml descriptions with entry name
The /prompts list in Rovo Dev only shows descriptions, making it hard
to identify entries. Prefix each description with the bmad entry name
so users see e.g. "bmad-bmm-create-prd - PRD workflow..." instead of
just the description text.
* refactor(installer): address review findings in Rovo Dev installer
- Hoist toDashPath import to module top level
- Extract _collectPromptEntries helper replacing 3 duplicated loops
- Remove unused detectionPaths (detect() is overridden)
- Guard generatePromptsYml when writtenFiles is empty
- Align cleanup() with detect() predicate (remove any bmad-*, not just .md)
- Use BaseIdeSetup abstractions (this.pathExists/readFile/writeFile) in cleanup()
- Update loadHandlers() JSDoc to include rovodev.js
---------
Co-authored-by: Brian <bmadcode@gmail.com>
* fix: replace bare _bmad/ backtick refs with {project-root}/_bmad/
Closes#1718 (partial — bare _bmad/ category only)
* fix: replace relative step refs with {project-root}/_bmad/ paths
Converts all ./step-XX.md, step-XX.md, and steps/step-XX.md
backtick references in new-format workflow and step files to
full {project-root}/_bmad/... paths.
Refs #1718
* fix: correct create-architecture installed path and remaining relative refs
- replace create-architecture with architecture in all step path refs
to match workflow.md installed_path definition
- convert ../data/ relative refs in create-prd step-05/06/11 frontmatter
- fix stale nextStepFile example in create-prd step-01b-continue
- fix bare step-01-init.md ref in create-architecture step-01b-continue
Fixes#1718
* fix: convert remaining relative data refs and fix stale examples in continue steps
* fix: inline quick-spec step navigation paths, remove frontmatter tokens
Replace {nextStepFile} and {skipToStepFile} frontmatter tokens with
explicit {project-root}/_bmad/ paths in all quick-spec step files.
These are LLM prompts, not config files -- inline paths are clearer
and carry semantic information without indirection. Also standardize
wording from "Load" to "Read fully and follow:" for consistency.
Also add .junie/ to .prettierignore to fix unrelated CI noise.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>
The 4-backtick markdown fence closed prematurely at line 235,
orphaning template content and causing a stray 3-backtick fence
to swallow sections 9-13 into an unclosed code block.
Windsurf is no longer a preferred IDE. Only Claude Code and Cursor
are now recommended. Windsurf remains a supported platform (installer
still works, templates stay, reference tables stay).
- Set preferred: false in both platform-codes.yaml files
- Move windsurf entry to "Other IDEs" section in tools/platform-codes.yaml
- Fix codex.js hardcoding preferred: true in constructor
- Remove stale "3 preferred tools" count from ui.js JSDoc
- Update docs to list only Claude Code and Cursor as recommended
- Update docs/index.md popular tools to Claude Code, Cursor, Codex CLI
BMad-Help is one of V6's flagship features but was undersold in docs.
This update positions it properly as the intelligent guide that:
- Inspects project state and detects what's completed
- Understands natural language queries
- Varies options based on installed modules
- Auto-invokes after every workflow
- Recommends first required tasks
Changes:
- Add dedicated "Meet BMad-Help" section to getting-started
- Expand commands.md with full BMad-Help subsection and examples
- Reposition get-answers-about-bmad.md to start with BMad-Help
- Enhance install-bmad.md and established-projects.md with query examples
- Add index.md tip box promoting /bmad-help as quickest way to dive in
Users running npx bmad-method install may get a stale beta version
due to npx caching. Added explicit version pin as a workaround.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Adds a new "Extend and Customize" section with a link to the BMad Builder documentation for users interested in creating custom agents, workflows, or modules.
- Update README to reflect V6 stable release and platform positioning
- Emphasize BMad Method as a module within the Module Ecosystem
- Simplify quick start and module sections
- Add Discord, GitHub, and YouTube links to installer next steps
The PRD workflow step-02 was refactored to be discovery-only with
forward references to steps 2b and 2c, but those files were never
created. This left a gap where the workflow jumped from classification
directly to success criteria with no executive summary generation.
- Add step-02b-vision.md: collaborative vision/differentiator discovery
- Add step-02c-executive-summary.md: generate and append exec summary
- Update step-02 nextStepFile to chain through 02b instead of skipping to 03
Adds bmad-os-diataxis-style-fix skill that automatically fixes
documentation to comply with the Diataxis framework and BMad
Method style guide rules.
- Includes Diataxis framework primer (4 document types)
- References main docs/_STYLE_GUIDE.md as single source of truth
- Detects doc type by folder location
- Applies fixes without committing (user reviews first)
* fix custom install bug
* fix manager.js
* From PR #1624: added empty module.yaml handling (skip + warn) and removed paths from the config to match promptCustomContentSource()
* fix: custom-content quick-update ENOENT, pass --custom-content through, add PR#1624 improvements to allow update installs to work using non-interactive mode
- Move "Module configuration complete" to appear after all customization
prompts finish, not just after defaults are applied
- Change spinner stop message to "Module defaults applied" for clarity
when customization follows; keep "Module configuration complete" for
express mode where no customization prompts follow
- Remove extra blank line before post-install notes
- Wrap spinner loop in try/finally for error safety
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): add uninstall command with selective component removal
Add `bmad uninstall` CLI command for clean removal of BMAD installations.
Interactive mode with directory router and component multiselect; non-interactive
`--yes` flag preserves user artifacts by default. Three-phase spinner UX,
manifest-scoped IDE cleanup, GitHub Copilot marker stripping, recursive empty
directory cleanup, and chalk-to-clack migration in copilot handler.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): address code review findings for uninstall command
- Add path traversal guard in uninstallOutputFolder (resolve + startsWith)
- Thread silent flag through to cleanupCopilotInstructions
- Trim text input before path.resolve in directory prompt
- DRY uninstall() by delegating to extracted helper methods
- Validate projectDir existence before probing for BMAD
- Use fs.rmdir instead of fs.remove in removeEmptyParents (race safety)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): add destructive action warning and confirm before uninstall
Move warning box after component selection and add a confirmation prompt
defaulting to No, so users see the irreversibility warning right before
the point of no return. Non-interactive --yes mode skips both.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>
* feat: tea automation prereq prompts
* fix: addressed PR comments
* docs: added docs on how to set the post install output in the module
* addressed PR request from Brian
Remove hallucinated mode: primary from opencode-agent template - OpenCode
defaults to mode: all and mode: primary does not enable Tab-switching as
the original PR #1556 claimed. Restore the name frontmatter field across
all OpenCode templates to match the standard pattern used by other IDEs.
- Remove YAML quotes from principles list item (consistency with other agents)
- Add missing comma: "at runtime never" → "at runtime, never" (run-on fix)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove output_folder/story_dir aliases, flatten variables sections (#1602)
Drop pointless alias variables (output_folder, story_dir, story_directory)
from Phase 4, Quick Flow, and QA workflows. Replace all references with
the canonical {implementation_artifacts} or {planning_artifacts} variables.
Also flatten unnecessary `variables:` YAML nesting in all affected
workflow.yaml files — the workflow engine treats all keys as top-level,
so the nesting added complexity with no semantic value.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add missing config declarations, remove remaining aliases and dead variables
- Add missing document_output_language and user_skill_level to create-story
(referenced in instructions.xml but never declared)
- Remove retrospectives_folder alias, replace with canonical implementation_artifacts
- Remove unused sprint_status and duplicate validation alias from correct-course
- Remove unused date, planning_artifacts, tracking_system from sprint-status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address PR review findings and rename shadowed output_folder variable
- Fix single/double brace mismatch for {implementation_artifacts} in
create-story instructions.xml (F1)
- Remove escaped asterisks in glob patterns in retrospective
instructions.md (F2)
- Eliminate redundant {config_source} re-resolution for story_location
in sprint-planning workflow.yaml (F5)
- Add explicit instruction to discover previous_story_num by scanning
artifacts instead of leaving it undefined (#7)
- Rename output_folder to project_knowledge in document-project
workflows to stop shadowing the canonical core config variable (#13)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use plural retrospectives in previous retro search instructions
The glob pattern can match multiple retrospective files for the same
epic (e.g., partial mid-sprint retro and full completion retro). Use
plural "retrospectives" to make clear the LLM should load all matches.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
When only one PRD exists in planning_artifacts, use it automatically
instead of prompting the user for its path. Still asks when multiple
PRDs are found or falls back to manual input when none are discovered.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(bmm): add missing project-context references to workflows
correct-course, retrospective, and sprint-status workflows were missing
project_context entirely. quick-spec referenced it in step files but not
in the initialization sequence.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(bmm): add explicit project-context load instructions to workflows
Add Load project_context if exists action to instruction files for
correct-course, retrospective, sprint-status, and sprint-planning.
The workflow.yaml declarations alone do not cause the file to be loaded;
the instruction files must explicitly reference it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove duplicate 'recompilation complete' message in compile-agents output
The spinner.stop() in compileAgents() already displays this message,
so the additional log.success() call produced a redundant line.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove deselected IDE configurations during installer update
When updating an existing installation, IDEs that were previously
configured but unchecked in the new selection are now detected and
cleaned up after user confirmation, mirroring the existing module
removal flow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove unreachable return statements after process.exit calls
Remove 4 dead `return;` statements that immediately follow `process.exit(0)`
calls in install.js. Since process.exit() terminates the process, the
subsequent return statements are unreachable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: batch directory creation log messages for cleaner installer output
Collect all created directory names during module directory setup and
emit them as a single log message instead of one per directory. This
eliminates the excessive blank-line spacing that @clack/prompts adds
between individual log.message() calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: consolidate directory creation output across all modules
Move directory creation logging from ModuleManager.createModuleDirectories
into the installer caller. The method now returns created directory info
instead of logging directly, allowing the installer to batch all module
directories into a single log message under one spinner. Also adds spacing
before the final "Installation complete" status line.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: propagate skipPrompts flag to IDE collectConfiguration calls
The --yes flag (skipPrompts) was not being passed through to IDE handler
collectConfiguration() calls, causing the Codex installer to hang on its
interactive prompt in non-interactive mode (CI/CD, --yes flag).
- Add skipPrompts parameter to collectToolConfigurations() and forward it
to handler.collectConfiguration() options
- Add early return in CodexSetup.collectConfiguration() when skipPrompts
is true, defaulting to global install location
- Guard IDE removal confirmation prompt with skipPrompts check, defaulting
to preserve existing configs (consistent with prompt default: false)
Fixes#1610
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address code review findings from PR #1612
- Restore saved IDE configurations when removal is cancelled or skipped
in non-interactive mode, preventing silent config downgrade (e.g.,
Codex 'project' install reverting to 'global')
- Short-circuit IDE removal block when skipPrompts is true to eliminate
unnecessary warning/cancelled log output in --yes mode
- Add null guard on config.ides before pushing re-added IDEs
- Return empty result object from createModuleDirectories early exits
instead of undefined for a uniform return contract
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: guard remaining unguarded prompts with skipPrompts for non-interactive mode
Add skipPrompts guards to 4 remaining unguarded interactive prompts in
installer.js that caused hangs in non-interactive mode (--yes flag):
- Module removal confirmation: preserves modules by default
- Update action selection: defaults to 'update'
- Custom module missing sources: keeps all modules
- Custom module delete confirmation: unreachable via early return
Additional robustness fixes:
- Defensive type-check before .trim() on prompt result (symbol guard)
- Console.log suppression scoped per-IDE instead of global try/finally
- process.exit flush via setImmediate for legacy v4 exit path
- JSDoc updated for new skipPrompts parameter
Follows established pattern from commit f967fdde (IDE skipPrompts guards).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: migrate installer console.warn/error calls to prompts.log API
Replace all user-facing console.warn(), console.error(), and console.log()
calls with their prompts.log.* equivalents for consistent @clack/prompts
styled output across the installer codebase.
- Migrate 13 console.warn/error calls across 5 files to prompts.log.*
- Convert moduleLogger callbacks to async prompts.log.* in installer.js
- Replace blank-line console.log() with prompts.log.message('')
- Add prompts import to 5 files that lacked it
- Remove redundant "Warning:" prefixes (prompts.log.warn adds styling)
- Remove redundant local prompts require in installer.js L454
- Add missing await on logger.log call in manager.js
- Debug-gated console.log calls in manifest-generator.js left as-is
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: replace installer spinner with tasks() progress and consolidate summary
Replace the serial spinner during non-interactive install phases with
@clack/prompts tasks() component for clearer progress visibility. The
install flow now uses two tasks() blocks (pre-IDE and post-IDE) with
the IDE setup retaining its own spinner since it may prompt.
- Refactor install phases into tasks() callbacks with message() updates
- Merge next-steps content into the "BMAD is ready to use!" summary note
- Fix spinner.stop() tense: "Reviewing..." → past tense ("reviewed")
- Move directory creation output after tasks() to avoid breaking progress
- Remove dead showInstallSummary() from ui.js
- Harden error handling: try/finally on IDE spinner, safe catch block
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: consolidate install messages into single start banner
Combine start and end marketing messages into one banner shown before
installation begins. Remove the post-install end message and its
displayEndMessage() calls — the install summary note now serves as
the final output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* style: apply prettier formatting to install command files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: rename "Module installers" label to "Module directories" in summary
The old script-based module installer pattern was replaced with
declarative directory creation, but the task title and summary label
were never updated to reflect that change.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add batch module configuration gateway with express/customize modes
Replace N individual "Accept Defaults?" confirm prompts with a single
select gateway ("Express Setup" vs "Customize"). When customizing, a
multiselect shows only modules with configurable options. All others
silently receive defaults via spinner progress.
- Add scanModuleSchemas() to pre-scan module metadata and display names
- Add select/multiselect gateway in collectAllConfigurations()
- Replace per-module confirm with modulesToCustomize Set check
- Suppress UI output during silent default config via _silentConfig flag
- Reorder installer tasks: module dirs before config generation
- Add resolution null guards for edge-case safety
- Cache ModuleManager instance via _getModuleManager() for reuse
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: move module directories instead of creating new ones on path change
When users modify a module's directory path during installer update/modify,
the old directory is now moved to the new location instead of creating an
empty directory while leaving the old one (with its documents) behind.
Includes: cross-device fs.move, error handling with fallback, path
normalization, parent/child path guard, and warning when both dirs exist.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add --yes flag guards to all unguarded prompts in update/modify path
Guard 5 interactive prompts in ui.js that caused the installer to hang
when --yes flag was used with existing installations. Add skipPrompts
field to 3 return objects that were missing it, ensuring installer.js
downstream guards work correctly for all update paths.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add custom GitHub Copilot installer handler
Adds a dedicated GitHub Copilot handler that generates:
- Agent files with .agent.md extension and enriched descriptions
- Prompt files (.prompt.md) for workflows, tasks, and agent activators
- copilot-instructions.md with project config and agent reference table
Replaces the generic config-driven handler with a custom one that
properly supports Copilot's agent/prompt file conventions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: escape YAML descriptions and preserve user copilot-instructions
- Escape single quotes in YAML frontmatter descriptions across all prompt
generators (createWorkflowPromptContent, createTechWriterPromptContent,
createAgentActivatorPromptContent) to match createAgentContent behavior
- Make copilot-instructions.md non-destructive using BMAD markers
(<!-- BMAD:START --> / <!-- BMAD:END -->) to preserve user content
- On cleanup, only remove content between markers; skip files without markers
- Back up existing unmarked files before overwriting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add error handling for CSV read/parse in loadAgentManifest and loadBmadHelp
Wrap file read and csv.parse in try/catch blocks so malformed or
unreadable CSV files gracefully degrade instead of aborting setup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use specific detection paths instead of .github configDir
Set configDir to null and use detectionPaths with
.github/copilot-instructions.md and .github/agents/ so the base
detect() doesn't false-positive on every GitHub repo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: add comments explaining hardcoded bmm/config.yaml in prompts
Clarify that bmm/config.yaml is safe to hardcode in generated prompt
content because these prompts are only created when bmm module data
(bmad-help.csv, agent artifacts) exists.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: guard against missing workflow-file in bmad-help.csv entries
Skip entries where workflow-file is empty/undefined to prevent
workflowFile.endsWith() from throwing during prompt generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: guard escapeYamlSingleQuote against undefined input
Default to empty string when value is undefined/null to prevent
replaceAll from throwing on missing CSV fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: preserve customised tool permissions across reinstalls
Before this change, reinstalling would overwrite any user-customised
tools arrays in agent and prompt frontmatter with the hardcoded default.
Now the installer reads existing tool permissions from .agent.md and
.prompt.md files before cleanup, and re-applies them to the regenerated
files. Falls back to the default ['read', 'edit', 'search', 'execute']
for new files or files without prior customisation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: prevent cleanup from stripping copilot-instructions.md markers before generation
The cleanup() method was removing the BMAD marker section from
copilot-instructions.md, leaving user content without markers.
generateCopilotInstructions() then treated the markerless file as
legacy, backed it up, and overwrote user content.
Fix: remove the copilot-instructions.md block from cleanup() entirely.
generateCopilotInstructions() already handles marker-based replacement
in a single read-modify-write pass that correctly preserves user content.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: update manager.js comments to include github-copilot.js
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: make agent capabilities data-driven via agent YAML metadata
Replace the hardcoded getAgentCapabilities() map with a data-driven
pipeline. Capabilities are now defined in each .agent.yaml source file,
compiled into the XML output, extracted into agent-manifest.csv by the
manifest generator, and read by the GitHub Copilot handler at install
time. New agents automatically get their capabilities without code
changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use this.bmadFolderName instead of hardcoded _bmad in template paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Removes the security-risky _module-installer pattern (code execution at
install time) in favor of a declarative `directories` key in module.yaml.
The main installer now handles directory creation centrally based on this
config, eliminating per-module installer.js scripts and their CJS/ESM issues.
Changes:
- Delete src/bmm/_module-installer/installer.js
- Delete src/core/_module-installer/installer.js
- Add `directories` key to src/bmm/module.yaml
- Rename runModuleInstaller() -> createModuleDirectories()
- Remove _module-installer from ESLint overrides
- Remove _module-installer from file-ref validator skip dirs
* fix: remove redundant "None" skip option from module selection
The "None - Skip module installation" option was unnecessary since
core is always locked/selected, satisfying the required constraint.
Users can simply press Enter with only core selected to skip modules.
Also removes dead code: selectModules(), getExternalModuleChoices(),
and selectExternalModules() methods that were never called.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: support ESM and .cjs module installers in ModuleManager
Module installer loading now handles three cases:
- .cjs files loaded via require() (always CommonJS regardless of package type)
- .js files loaded via dynamic import() (works for both CJS and ESM)
- CJS default export unwrapped automatically for consistent API
This fixes errors when external modules set "type":"module" in their
package.json. Those modules must still rename installer.js to
installer.cjs if it uses require() internally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address code review findings from PR #1590
- Filter 'core' from CLI --modules in update path for consistency
- Update selectAllModules() JSDoc to reflect core exclusion
- Fix ESM default-export unwrap to handle function/class exports
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: clarify module post-install script errors as non-fatal warnings
Change error display from log.error to log.warn and explain that the
module was installed successfully — only the optional post-install
script could not run. Prevents users from thinking the module
installation itself failed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: suppress non-fatal module post-install script errors
Post-install scripts fail due to CJS/ESM incompatibility but module
files are already copied successfully. Silently catch the error instead
of showing a warning that alarms users into thinking installation failed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove redundant modules and tools lines from install summary
The checkmark list already shows each installed module and IDE tool.
Keep only the install path and file-warning lines in the summary footer.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>