feat(installer): remote registry + remove custom content#2228
Conversation
Remove the entire local filesystem custom content feature from the installer to make way for marketplace-based plugin installation. Deleted: custom-handler.js, custom-module-cache.js, custom-modules.js Removed: --custom-content CLI flag, interactive custom content prompts, custom module caching, manifest tracking, missing-source resolution, and related test suites. Updated docs across all translations.
Fix admonition syntax (remove accidental space in :::note) across 4 translated docs files, and update stale JSDoc on listAvailable().
Switch module list source of truth from bundled external-official-modules.yaml to the remote marketplace registry (registry/official.yaml) fetched via raw.githubusercontent.com. - Rewrite ExternalModuleManager to fetch from GitHub with local fallback - Simplify selectAllModules/getDefaultModules to use registry as single source - Registry order controls display order; built_in flag prevents cloning - Rename fallback file to registry-fallback.yaml in modules/ - Only show legacy migration message when legacy dirs actually exist
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe PR refactors the module installer to fetch external modules from a remote GitHub registry with local fallback support, adds pre-existence checks for legacy directory cleanup, and updates the UI layer to source module lists from the unified external module manager instead of separate sources. Changes
Sequence Diagram(s)sequenceDiagram
participant UI as UI Layer
participant Manager as ExternalModuleManager
participant HTTP as HTTPS Fetch
participant GitHub as GitHub Registry
participant Local as Local Fallback
participant Cache as Cache
UI->>Manager: listAvailable()
Manager->>Cache: Check cachedModules
alt Cache exists
Cache-->>Manager: Return cached modules
else Cache miss
Manager->>HTTP: Fetch official.yaml from GitHub
HTTP->>GitHub: GET registry/official.yaml
alt Success
GitHub-->>HTTP: Registry data (array format)
HTTP-->>Manager: Module array
Manager->>Manager: _normalizeModule() per entry
else Fetch fails
Manager->>Local: Load registry-fallback.yaml
Local-->>Manager: Fallback registry (object format)
Manager->>Manager: _normalizeModule() per entry
end
Manager->>Cache: Store in cachedModules
end
Manager-->>UI: Normalized module array
UI->>UI: Build selection UI from array
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🤖 Augment PR SummarySummary: This PR simplifies the installer by removing the custom content/custom module pipeline and making the remote marketplace registry the source of truth for module discovery. Changes:
🤖 Was this summary useful? React with 👍 or 👎 |
| # (bmad-code-org/bmad-plugins-marketplace) is unreachable. | ||
| # The remote registry/official.yaml is the source of truth. | ||
|
|
||
| modules: |
There was a problem hiding this comment.
tools/installer/modules/registry-fallback.yaml:5 — The fallback registry omits the built-in modules that exist in the remote registry (notably core and bmm), but the UI now uses the registry as the sole module list. In a no-network interactive install this can make it impossible to select bmm and can lead to a core-only install, contradicting the stated offline fallback behavior.
Severity: high
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| // Pre-select only if already installed (not on fresh install) | ||
| value: mod.code, | ||
| hint: mod.description, | ||
| selected: isInstalled, |
There was a problem hiding this comment.
tools/installer/ui.js:582-600 — selectAllModules() only preselects already-installed modules and ignores the registry’s defaultSelected flag (even though getDefaultModules() uses it for --yes). This makes fresh interactive installs start with nothing selected beyond the locked core, so it’s easy to proceed without selecting expected defaults like bmm.
Severity: medium
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
Summary
external-official-modules.yamlto remote marketplace registry (registry/official.yamlvia raw.githubusercontent.com)selectAllModules/getDefaultModulesto use registry as single source; registry order controls display orderregistry-fallback.yamlwhen GitHub is unreachableTest plan