Skip to content

Initial extension contribution#3

Open
elvince wants to merge 67 commits intobmad-code-org:mainfrom
elvince:initial-extension-contribution
Open

Initial extension contribution#3
elvince wants to merge 67 commits intobmad-code-org:mainfrom
elvince:initial-extension-contribution

Conversation

@elvince
Copy link

@elvince elvince commented Feb 27, 2026

Initial upload for vscode extension:

BMAD Dashboard

A VS Code extension that acts as a real-time GPS for BMAD V6 projects. It monitors workflow artifacts, tracks sprint progress, and recommends next actions — all without leaving the editor.

Features

Sidebar Dashboard

Auto-activates when the workspace contains a _bmad/ directory. Appears as a custom icon in the Activity Bar.

Header Toolbar

  • Help icon — copies bmad help to clipboard
  • Overflow menu (⋮) — lists all available workflow commands with descriptions, plus a manual Refresh option; dismisses on click-outside or ESC

Sprint Progress

  • Visual progress bar with done / in-progress / backlog counts
  • Project name and completion percentage

Epic List

  • Collapsible cards per epic showing status, progress bar, and done/total story counts
  • Active epic highlighted (blue left border)
  • Done epics hidden by default; toggle to reveal them
  • Scrollable container (max 280 px)
  • Click epic title → expand/collapse story list
  • Shift+Click epic title → open epics.md in text editor
  • Click a story inside the list → open the story markdown file

Active Story Card

  • Shows current story's epic/story number, title, task progress bar, subtask count, and status badge
  • Progress combines tasks + subtasks
  • Click story title → open story file in preview
  • Shift+Click story title → open in text editor

Next Action Recommendation

State-machine-driven suggestion with mandatory/optional action kinds:

Condition Suggested Action
No sprint data Run Sprint Planning
Story in-progress Continue Story X.Y
Story in review Run Code Review
Story ready-for-dev Start Dev Story X.Y
No active story Create Next Story
Epic complete Run Retrospective
All done Sprint Complete

Each action has a Play button (execute in terminal) and a Copy button (clipboard).

Other Actions — Secondary workflow buttons that change based on project state (e.g., Correct Course, Create Story).

Planning Artifact Links — Quick links to PRD and Architecture docs. Click opens markdown preview; Shift+Click opens in text editor.

About Section — Displays BMAD version, last-updated date, and installed modules (from manifest.yaml).

Editor Panel

A multi-view editor panel (BMAD: Open Editor Panel command) with breadcrumb navigation:

  • Dashboard view — mirrors the sidebar dashboard
  • Epics Browser — browse epics and drill into story details
  • Stories Table & Kanban Board — view all stories in table or kanban layout
  • Document Library — file tree browser with markdown rendering, syntax highlighting, and table of contents

Real-Time Updates

  • File watcher monitors _bmad-output/**/*.{yaml,md} with 500 ms debounce
  • Any change to sprint-status.yaml or story files triggers a full state recompute and UI refresh

Configuration

Setting Default Purpose
bmad.outputRoot _bmad-output Root directory for BMAD output files
bmad.cliPrefix claude CLI prefix for terminal commands (e.g., claude, aider, copilot)
bmad.defaultClickBehavior markdown-preview Click behavior for doc links: markdown-preview or editor-panel
bmad.docLibraryPaths ["planning-artifacts", "implementation-artifacts", "docs"] Folders to display in the Document Library

Prerequisites

  • Node.js 22+
  • pnpm 10.26+ (corepack enable && corepack prepare pnpm@10.26.2)

Building

The extension uses a dual build system — esbuild for the extension host, Vite for the React webview.

pnpm install              # install dependencies
pnpm build                # full build (extension + webview)
pnpm build:extension      # build extension host only
pnpm build:webview        # build webview only
pnpm watch                # parallel watch mode for both

To package as a .vsix:

pnpm vscode:package       # produces out/bmad-dashboard-*.vsix

Testing

Webview tests (Vitest)

Runs in a jsdom environment using @testing-library/react.

pnpm test                 # run all Vitest tests once
pnpm test:watch           # watch mode
pnpm test:coverage        # generate coverage report (v8 provider)

Extension host tests (Mocha)

Runs under @vscode/test-electron for tests that need VS Code APIs.

pnpm test:extension       # run extension integration tests

Linting & type checking

pnpm lint                 # ESLint
pnpm typecheck            # typecheck both extension and webview

Release Process

Versioning and releases are fully automated via semantic-release and a GitHub Actions workflow.

How it works

  1. Push to main triggers the release workflow (.github/workflows/release.yml)
  2. Commit analysis@semantic-release/commit-analyzer determines the next version from Conventional Commits:
    • fix: → patch bump (1.2.x)
    • feat: → minor bump (1.x.0)
    • BREAKING CHANGE: / feat!: → major bump (x.0.0)
  3. ChangelogCHANGELOG.md is updated automatically
  4. Build & package — the extension is built and packaged as a .vsix
  5. Git commitpackage.json and CHANGELOG.md are committed with chore(release): <version> [skip ci]
  6. GitHub release — a release is created with the .vsix attached as a downloadable asset

CI pipeline

Pull requests to main run the CI workflow (.github/workflows/ci.yml):

  • Lint → Typecheck → Test → Build

Local dry run

pnpm release:dry          # preview what the next release would be

Project Structure

src/
├── extension/            # VS Code extension host (Node.js)
│   ├── extension.ts      # main entry point
│   ├── commands/         # command handlers
│   ├── parsers/          # YAML, epic, story file parsers
│   ├── providers/        # webview providers (dashboard, editor panel)
│   └── services/         # BMAD detector, file watcher, state manager, workflows
├── webviews/             # React webview (sandboxed)
│   ├── dashboard/        # sidebar dashboard components
│   └── editor-panel/     # multi-view editor (epics, stories, docs)
└── shared/               # shared types and message protocol

License

MIT

Vincent M. and others added 26 commits February 27, 2026 09:34
# 1.0.0 (2026-02-18)

### Bug Fixes

* name parsing ([74095ee](elvince/bmad-dashboard-extension@74095ee))
* path protection ([22188c9](elvince/bmad-dashboard-extension@22188c9))
* product brief detection ([f6f69d3](elvince/bmad-dashboard-extension@f6f69d3))
* shift click behabiro and docs ([ca62cbd](elvince/bmad-dashboard-extension@ca62cbd))

### Features

* 1-1-project-initialization-from-starter-template ([e34a1d3](elvince/bmad-dashboard-extension@e34a1d3))
* 1-2-test-framework-configuration ([a8d04c4](elvince/bmad-dashboard-extension@a8d04c4))
* 1-3-bmad-project-detection ([836da7d](elvince/bmad-dashboard-extension@836da7d))
* 1-4-sidebar-panel-registration ([2038e7f](elvince/bmad-dashboard-extension@2038e7f))
* 2-1-shared-types-and-message-protocol ([f03d78f](elvince/bmad-dashboard-extension@f03d78f))
* 2-2-sprint-status-parser ([98199f7](elvince/bmad-dashboard-extension@98199f7))
* 2-3-epic-file-parser ([80d74ee](elvince/bmad-dashboard-extension@80d74ee))
* 2-5 and 2-6 story ([6fad955](elvince/bmad-dashboard-extension@6fad955))
* 2-5-file-watcher-service ([1ed7e89](elvince/bmad-dashboard-extension@1ed7e89))
* 2.4: Story File Parser ([1274de3](elvince/bmad-dashboard-extension@1274de3))
* 3-1-dashboard-zustand-store-and-message-handler ([38d5db5](elvince/bmad-dashboard-extension@38d5db5))
* 3-2-sprint-status-display-component ([a746598](elvince/bmad-dashboard-extension@a746598))
* 3-3-epic-list-with-completion-status ([896d171](elvince/bmad-dashboard-extension@896d171))
* 3-4-active-story-card-with-task-progress ([60488df](elvince/bmad-dashboard-extension@60488df))
* 3-5-next-action-recommendation ([98e6508](elvince/bmad-dashboard-extension@98e6508))
* 3-6-manual-refresh-command ([0cb56fd](elvince/bmad-dashboard-extension@0cb56fd))
* 4-1-workflow-discovery-service ([3e248fd](elvince/bmad-dashboard-extension@3e248fd))
* 4-2-context-sensitive-cta-buttons ([b05362a](elvince/bmad-dashboard-extension@b05362a))
* 4-3-terminal-workflow-execution ([fd85b4b](elvince/bmad-dashboard-extension@fd85b4b))
* 4-4-copy-command-to-clipboard ([e1d99bc](elvince/bmad-dashboard-extension@e1d99bc))
* 5-2-next-action-enhancements ([3e686b9](elvince/bmad-dashboard-extension@3e686b9))
* 5-3-overflow-menu-and-help-icon ([763d13c](elvince/bmad-dashboard-extension@763d13c))
* 5-4-about-section-and-epic-list-ux ([76f60af](elvince/bmad-dashboard-extension@76f60af))
* greenfield process actions reviewed ([b84e5ab](elvince/bmad-dashboard-extension@b84e5ab))
…pdown

When a story file doesn't exist yet, clicking it now opens epics.md
scrolled to the relevant story heading instead of showing an error.
Uses URI fragment for markdown preview and revealRange for text editor.
Replace isPrimary boolean with a 'primary' | 'mandatory' | 'optional'
kind discriminant to support richer workflow recommendations. Add five
new workflows (validate-prd, edit-prd, create-ux-design,
check-implementation-readiness, qa-automate) and rewrite
computeWorkflowCandidates to propose contextual follow-up actions
based on the current BMAD lifecycle phase. Gate sprint-planning behind
a new hasReadinessReport planning artifact check.
# [1.1.0](elvince/bmad-dashboard-extension@v1.0.0...v1.1.0) (2026-02-19)

### Features

* add workflow sequencing with mandatory/optional action kinds ([ee8498d](elvince/bmad-dashboard-extension@ee8498d))
* fall back to epics.md when clicking unwritten story in epic dropdown ([77f1b03](elvince/bmad-dashboard-extension@77f1b03))
# [1.2.0](elvince/bmad-dashboard-extension@v1.1.0...v1.2.0) (2026-02-20)

### Bug Fixes

* file naming from story/epic name parsing with dot ([39f7c28](elvince/bmad-dashboard-extension@39f7c28))
* split story like 5.5a/b/c are now properly managed ([b85aec9](elvince/bmad-dashboard-extension@b85aec9))

### Features

* 5-5a-editor-panel-infrastructure-and-build-setup ([93458e9](elvince/bmad-dashboard-extension@93458e9))
* 5-5b-navigation-shell-breadcrumbs-dashboard-view-and-click-behavior ([2cfbbb7](elvince/bmad-dashboard-extension@2cfbbb7))
* 5-6-epics-browser-and-story-detail-views ([e28ec4c](elvince/bmad-dashboard-extension@e28ec4c))
* 5-7-stories-table-and-kanban-board-views ([b49ee37](elvince/bmad-dashboard-extension@b49ee37))
* 5-8-document-library-and-markdown-viewer ([707f9c8](elvince/bmad-dashboard-extension@707f9c8))
* add viewer menu entry ([31df0ba](elvince/bmad-dashboard-extension@31df0ba))
## [1.2.1](elvince/bmad-dashboard-extension@v1.2.0...v1.2.1) (2026-02-20)

### Bug Fixes

* story criteria not properly displayed ([185efd1](elvince/bmad-dashboard-extension@185efd1))
## [1.2.2](elvince/bmad-dashboard-extension@v1.2.1...v1.2.2) (2026-02-23)

### Bug Fixes

* next action optional retro is no more proposed if the epic is done ([1afc482](elvince/bmad-dashboard-extension@1afc482))
@coderabbitai
Copy link

coderabbitai bot commented Feb 27, 2026

Important

Review skipped

Too many files!

This PR contains 152 files, which is 2 over the limit of 150.

📥 Commits

Reviewing files that changed from the base of the PR and between 67a1264 and ff8f00e.

⛔ Files ignored due to path filters (2)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • resources/bmad-icon.svg is excluded by !**/*.svg
📒 Files selected for processing (152)
  • .gitattributes
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • .releaserc.json
  • .vscode-test.mjs
  • .vscode/css_custom_data.json
  • .vscode/extensions.json
  • .vscode/launch.json
  • .vscode/settings.json
  • .vscode/tasks.json
  • .vscodeignore
  • CHANGELOG.md
  • LICENSE.md
  • README.md
  • docs/architecture.md
  • docs/component-inventory.md
  • docs/development-guide.md
  • docs/index.md
  • docs/project-overview.md
  • docs/project-scan-report.json
  • docs/source-tree-analysis.md
  • eslint.config.mjs
  • package.json
  • src/extension/commands/index.ts
  • src/extension/extension.test.ts
  • src/extension/extension.ts
  • src/extension/parsers/epic-parser.test.ts
  • src/extension/parsers/epic-parser.ts
  • src/extension/parsers/index.ts
  • src/extension/parsers/sprint-status.test.ts
  • src/extension/parsers/sprint-status.ts
  • src/extension/parsers/story-parser.test.ts
  • src/extension/parsers/story-parser.ts
  • src/extension/providers/dashboard-view-provider.test.ts
  • src/extension/providers/dashboard-view-provider.ts
  • src/extension/providers/editor-panel-provider.test.ts
  • src/extension/providers/editor-panel-provider.ts
  • src/extension/providers/index.ts
  • src/extension/providers/message-handler.ts
  • src/extension/providers/webview-utils.ts
  • src/extension/services/bmad-detector.test.ts
  • src/extension/services/bmad-detector.ts
  • src/extension/services/file-tree-scanner.test.ts
  • src/extension/services/file-tree-scanner.ts
  • src/extension/services/file-watcher.test.ts
  • src/extension/services/file-watcher.ts
  • src/extension/services/index.ts
  • src/extension/services/state-manager.test.ts
  • src/extension/services/state-manager.ts
  • src/extension/services/workflow-discovery.test.ts
  • src/extension/services/workflow-discovery.ts
  • src/shared/messages.test.ts
  • src/shared/messages.ts
  • src/shared/types/bmad-metadata.ts
  • src/shared/types/dashboard-state.ts
  • src/shared/types/epic.ts
  • src/shared/types/file-tree.ts
  • src/shared/types/index.ts
  • src/shared/types/parse-result.test.ts
  • src/shared/types/parse-result.ts
  • src/shared/types/sprint-status.test.ts
  • src/shared/types/sprint-status.ts
  • src/shared/types/story.test.ts
  • src/shared/types/story.ts
  • src/shared/types/workflow.ts
  • src/webviews/app.test.tsx
  • src/webviews/app.tsx
  • src/webviews/dashboard/components/about-section.test.tsx
  • src/webviews/dashboard/components/about-section.tsx
  • src/webviews/dashboard/components/active-story-card.test.tsx
  • src/webviews/dashboard/components/active-story-card.tsx
  • src/webviews/dashboard/components/cta-buttons.test.tsx
  • src/webviews/dashboard/components/cta-buttons.tsx
  • src/webviews/dashboard/components/epic-list.test.tsx
  • src/webviews/dashboard/components/epic-list.tsx
  • src/webviews/dashboard/components/header-toolbar.test.tsx
  • src/webviews/dashboard/components/header-toolbar.tsx
  • src/webviews/dashboard/components/index.ts
  • src/webviews/dashboard/components/next-action-recommendation.test.tsx
  • src/webviews/dashboard/components/next-action-recommendation.tsx
  • src/webviews/dashboard/components/placeholder.test.tsx
  • src/webviews/dashboard/components/placeholder.tsx
  • src/webviews/dashboard/components/planning-artifact-links.test.tsx
  • src/webviews/dashboard/components/planning-artifact-links.tsx
  • src/webviews/dashboard/components/sprint-status.test.tsx
  • src/webviews/dashboard/components/sprint-status.tsx
  • src/webviews/dashboard/hooks/index.ts
  • src/webviews/dashboard/hooks/use-message-handler.test.ts
  • src/webviews/dashboard/hooks/use-message-handler.ts
  • src/webviews/dashboard/index.test.tsx
  • src/webviews/dashboard/index.tsx
  • src/webviews/dashboard/store.test.ts
  • src/webviews/dashboard/store.ts
  • src/webviews/dashboard/utils/build-command-with-story.ts
  • src/webviews/dashboard/utils/get-next-action.test.ts
  • src/webviews/dashboard/utils/get-next-action.ts
  • src/webviews/editor-panel/components/breadcrumb-bar.test.tsx
  • src/webviews/editor-panel/components/breadcrumb-bar.tsx
  • src/webviews/editor-panel/components/file-tree.test.tsx
  • src/webviews/editor-panel/components/file-tree.tsx
  • src/webviews/editor-panel/components/index.ts
  • src/webviews/editor-panel/components/kanban-board.test.tsx
  • src/webviews/editor-panel/components/kanban-board.tsx
  • src/webviews/editor-panel/components/markdown-renderer.test.tsx
  • src/webviews/editor-panel/components/markdown-renderer.tsx
  • src/webviews/editor-panel/components/navigation-shell.test.tsx
  • src/webviews/editor-panel/components/navigation-shell.tsx
  • src/webviews/editor-panel/hooks/index.ts
  • src/webviews/editor-panel/hooks/use-message-handler.test.ts
  • src/webviews/editor-panel/hooks/use-message-handler.ts
  • src/webviews/editor-panel/index.tsx
  • src/webviews/editor-panel/store.test.ts
  • src/webviews/editor-panel/store.ts
  • src/webviews/editor-panel/styles/hljs-vscode.css
  • src/webviews/editor-panel/types.ts
  • src/webviews/editor-panel/utils/parse-story-content.test.ts
  • src/webviews/editor-panel/utils/parse-story-content.ts
  • src/webviews/editor-panel/views/dashboard-view.test.tsx
  • src/webviews/editor-panel/views/dashboard-view.tsx
  • src/webviews/editor-panel/views/docs-view.test.tsx
  • src/webviews/editor-panel/views/docs-view.tsx
  • src/webviews/editor-panel/views/epic-detail-view.test.tsx
  • src/webviews/editor-panel/views/epic-detail-view.tsx
  • src/webviews/editor-panel/views/epics-view.test.tsx
  • src/webviews/editor-panel/views/epics-view.tsx
  • src/webviews/editor-panel/views/index.ts
  • src/webviews/editor-panel/views/placeholder-view.tsx
  • src/webviews/editor-panel/views/stories-view.test.tsx
  • src/webviews/editor-panel/views/stories-view.tsx
  • src/webviews/editor-panel/views/story-detail-view.test.tsx
  • src/webviews/editor-panel/views/story-detail-view.tsx
  • src/webviews/index.css
  • src/webviews/index.tsx
  • src/webviews/shared/components/index.ts
  • src/webviews/shared/hooks/index.ts
  • src/webviews/shared/hooks/use-vscode-api.test.ts
  • src/webviews/shared/hooks/use-vscode-api.ts
  • src/webviews/shared/utils/cn.test.ts
  • src/webviews/shared/utils/cn.ts
  • src/webviews/shared/utils/document-link.test.ts
  • src/webviews/shared/utils/document-link.ts
  • src/webviews/shared/utils/status-styles.ts
  • tsconfig.extension.json
  • tsconfig.json
  • tsconfig.webview.json
  • vite.config.ts
  • vitest.config.ts
  • vitest.setup.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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.

@wsmoak
Copy link
Collaborator

wsmoak commented Feb 28, 2026

Thanks for doing this! A few things, can you update the PR description with what it is, what it does, and what commands to build and install it locally?

Also the generated bmad stuff, the .claude/commands, _bmad and _bmad-output should not be in the PR.

Claude suggests git rm -r --cached .claude/commands (for each one) will remove them without deleting. -- then add them to .gitignore or .git/info/exclude to keep them out.

If that doesn't work I'd make a copy as a backup then git rm them and just re-install bmad after it's cleaned up.

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.

3 participants