fix: agent-manifest.csv empty after install#2115
Conversation
…th bug
Two bugs combined to produce an empty agent-manifest.csv:
1. collectAgents() only scanned {module}/agents/ directories, but agents
live at various paths (bmm/1-analysis/bmad-agent-analyst/,
cis/skills/bmad-cis-agent-*, etc.). Now walks the full module tree.
2. All 9 BMM agent manifests declared type: skill instead of type: agent.
The manifest generator requires type: agent to include a directory in
agent-manifest.csv. CIS, GDS, TEA, and WDS already had the correct type.
Changes:
- Fix 9 BMM bmad-skill-manifest.yaml files: type: skill → type: agent
- Replace collectAgents/getAgentsFromDir with full-tree recursive scan
- Module field from manifest file always takes precedence over directory
- Remove dead skillManifest load (legacy .md agent support removed)
- Add TODO in bmad-artifacts.js documenting legacy agent pipeline as dead code
- Add 10 regression tests covering BMM, CIS, and GDS directory layouts
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR reclassifies eight agent skills from Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ 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: Fixes Changes:
Technical Notes: Agent discovery now relies on YAML sidecars (and SKILL.md directories) rather than compiled 🤖 Was this summary useful? React with 👍 or 👎 |
|
|
||
| for (const agentDir of agentDirs) { | ||
| if (!agentDir.isDirectory()) continue; | ||
| const standaloneAgents = await this.getAgentsFromDirRecursive(standaloneAgentsDir, 'standalone', '', debug); |
There was a problem hiding this comment.
standaloneAgentsDir is _bmad/agents, but passing moduleName='standalone' makes downstream installPath/agent.path look like _bmad/standalone/..., which won’t match the on-disk location for standalone agents.
Severity: high
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| const m = dirManifest.__single; | ||
| const dirRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name; | ||
| const agentModule = m.module || moduleName; | ||
| const installPath = `${this.bmadFolderName}/${agentModule}/${dirRelativePath}`; |
There was a problem hiding this comment.
installPath is built using agentModule (from manifest), so if a manifest declares a different module than the directory being scanned, the path written to agent-manifest.csv can point at a non-existent location (breaking consumers that treat path as a filesystem reference).
Severity: medium
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
Summary
type: skillinstead oftype: agent, so the manifest generator skipped them when buildingagent-manifest.csvcollectAgents()only scanned{module}/agents/directories, but agents live at various paths (bmm/1-analysis/,cis/skills/, etc.) — now walks the full module treemodulevalue from the manifest file always wins over directory-derived module nameskillManifestload (legacy.mdagent support removed from manifest generator)bmad-artifacts.jsdocumenting the entire legacy compiled-agent pipeline as dead code for future cleanupTest plan
npx bmad installand verifyagent-manifest.csvis populated