Skip to content

fix: agent-manifest.csv empty after install#2115

Merged
bmadcode merged 2 commits intomainfrom
instaler-agents-party-fix
Mar 24, 2026
Merged

fix: agent-manifest.csv empty after install#2115
bmadcode merged 2 commits intomainfrom
instaler-agents-party-fix

Conversation

@bmadcode
Copy link
Copy Markdown
Collaborator

Summary

  • 9 BMM agent manifests declared type: skill instead of type: agent, so the manifest generator skipped them when building agent-manifest.csv
  • collectAgents() only scanned {module}/agents/ directories, but agents live at various paths (bmm/1-analysis/, cis/skills/, etc.) — now walks the full module tree
  • Module field precedence fixed: the module value from the manifest file always wins over directory-derived module name
  • Removed dead skillManifest load (legacy .md agent support removed from manifest generator)
  • Added TODO in bmad-artifacts.js documenting the entire legacy compiled-agent pipeline as dead code for future cleanup
  • Added 10 regression tests covering BMM, CIS, and GDS directory layouts

Test plan

  • All 243 installation component tests pass (10 new)
  • ESLint, markdownlint, Prettier all clean
  • Run npx bmad install and verify agent-manifest.csv is populated
  • Verify Party Mode loads agents from the manifest successfully

…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
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 24, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This PR reclassifies eight agent skills from type: skill to type: agent in their manifest files and refactors the manifest generator to recursively discover agents by searching module directory trees for bmad-skill-manifest.yaml files with type: agent, replacing the previous convention-based scanning approach.

Changes

Cohort / File(s) Summary
Agent Manifest Reclassifications
src/bmm-skills/1-analysis/bmad-agent-analyst/bmad-skill-manifest.yaml, src/bmm-skills/1-analysis/bmad-agent-tech-writer/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-agent-pm/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/bmad-skill-manifest.yaml, src/bmm-skills/3-solutioning/bmad-agent-architect/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-agent-dev/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-agent-qa/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-agent-sm/bmad-skill-manifest.yaml
Changed type field from skill to agent in all eight agent skill manifests while preserving all other metadata.
Agent Discovery Refactoring
tools/cli/installers/lib/core/manifest-generator.js
Reimplemented agent discovery to recursively traverse entire module directory trees (instead of scanning only bmad/<moduleName>/agents/) for directories containing bmad-skill-manifest.yaml with type: agent. Adds getAgentsFromDirRecursive() method, updates installation path construction to use manifest module field, adds debug output support, and removes legacy .md file and localskip handling.
Agent Discovery Test Coverage
test/test-installation-components.js
Added regression sub-test within "Test Suite 29" validating that agents with type: agent are discovered across different module directories (under bmm/, cis/, and gds/ subdirectories outside conventional agents/ locations). Verifies agent module attribution and manifest CSV output.
Documentation
tools/cli/installers/lib/ide/shared/bmad-artifacts.js
Added TODO comment noting that legacy agent discovery logic in the file (scanning for compiled .md files with <agent> tags) is obsolete; agents now use bmad-skill-manifest.yaml with type: agent format.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the primary bug being fixed: agent-manifest.csv being empty after installation.
Description check ✅ Passed The description directly addresses the changeset by explaining root causes, listing code changes, and providing test status, all relevant to the PR objectives.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch instaler-agents-party-fix

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Mar 24, 2026

🤖 Augment PR Summary

Summary: Fixes agent-manifest.csv being empty after install by aligning agent discovery with the current directory-based agent format.

Changes:

  • Corrects several BMM agent manifests to declare type: agent so they are included in agent manifest generation.
  • Updates ManifestGenerator.collectAgents() to walk each module’s directory tree and discover agents via bmad-skill-manifest.yaml (type: agent).
  • Makes manifest-declared module take precedence over directory-derived module attribution for agent records.
  • Removes the legacy compiled-agent .md parsing path from the manifest generator.
  • Adds a TODO note documenting the deprecated compiled-agent/launcher pipeline in IDE artifact helpers.
  • Adds regression tests covering BMM/CIS/GDS agent layouts and verifying agent-manifest.csv output.

Technical Notes: Agent discovery now relies on YAML sidecars (and SKILL.md directories) rather than compiled <agent> XML-tagged markdown files.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 2 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.


for (const agentDir of agentDirs) {
if (!agentDir.isDirectory()) continue;
const standaloneAgents = await this.getAgentsFromDirRecursive(standaloneAgentsDir, 'standalone', '', debug);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Fix This in Augment

🤖 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}`;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant