Compare commits

...

9 Commits

Author SHA1 Message Date
semantic-release-bot
be4fcd8668 chore(release): 4.24.3 [skip ci]
## [4.24.3](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.2...v4.24.3) (2025-07-04)

### Bug Fixes

* update YAML library from 'yaml' to 'js-yaml' in resolveExpansionPackCoreAgents for consistency ([#295](https://github.com/bmadcode/BMAD-METHOD/issues/295)) ([03f30ad](03f30ad28b))
2025-07-04 12:23:13 +00:00
Davor Racic
03f30ad28b fix: update YAML library from 'yaml' to 'js-yaml' in resolveExpansionPackCoreAgents for consistency (#295) 2025-07-04 07:22:49 -05:00
Serhii
e32b477e42 docs: add vs-code-copilot-guide (#290)
* docs: add vs-code-copilot-guide

* fix: correct broken link in vs-code-copilot-guide
2025-07-03 20:32:27 -05:00
semantic-release-bot
e7b1ee37e3 chore(release): 4.24.2 [skip ci]
## [4.24.2](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.1...v4.24.2) (2025-07-03)

### Bug Fixes

* version bump and restore dist folder ([87c451a](87c451a5c3))
2025-07-03 04:15:20 +00:00
Brian Madison
87c451a5c3 fix: version bump and restore dist folder 2025-07-02 23:14:54 -05:00
semantic-release-bot
a96fce793b chore(release): 4.24.1 [skip ci]
## [4.24.1](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.0...v4.24.1) (2025-07-03)

### Bug Fixes

* centralized yamlExtraction function and all now fix character issues for windows ([e2985d6](e2985d6093))
* filtering extension stripping logic update ([405954a](405954ad92))
* standardize on file extension .yaml instead of a mix of yml and yaml ([a4c0b18](a4c0b1839d))
2025-07-03 02:09:14 +00:00
Brian Madison
e2985d6093 fix: centralized yamlExtraction function and all now fix character issues for windows 2025-07-02 21:08:43 -05:00
Brian Madison
405954ad92 fix: filtering extension stripping logic update 2025-07-02 20:04:12 -05:00
Brian Madison
a4c0b1839d fix: standardize on file extension .yaml instead of a mix of yml and yaml 2025-07-02 19:59:49 -05:00
81 changed files with 407 additions and 300 deletions

3
.gitignore vendored
View File

@@ -24,4 +24,5 @@ sample-project/*
.bmad-core
.bmad-creator-tools
.gemini
.bmad*/
.bmad*/.cursor/
web-bundles/

16
.vscode/settings.json vendored
View File

@@ -1,7 +1,13 @@
{
"cSpell.words": [
"Agentic",
"elicitations",
"Shardable"
]
"chat.agent.enabled": true,
"chat.agent.maxRequests": 15,
"github.copilot.chat.agent.runTasks": true,
"chat.mcp.discovery.enabled": true,
"github.copilot.chat.agent.autoFix": true,
"chat.tools.autoApprove": false,
"cSpell.words": [
"Agentic",
"elicitations",
"Shardable"
]
}

View File

@@ -1,3 +1,26 @@
## [4.24.3](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.2...v4.24.3) (2025-07-04)
### Bug Fixes
* update YAML library from 'yaml' to 'js-yaml' in resolveExpansionPackCoreAgents for consistency ([#295](https://github.com/bmadcode/BMAD-METHOD/issues/295)) ([03f30ad](https://github.com/bmadcode/BMAD-METHOD/commit/03f30ad28b282fbb4fa5a6ed6b57d0327218cce0))
## [4.24.2](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.1...v4.24.2) (2025-07-03)
### Bug Fixes
* version bump and restore dist folder ([87c451a](https://github.com/bmadcode/BMAD-METHOD/commit/87c451a5c3161fbc86f88619a2bfcfc322eb247e))
## [4.24.1](https://github.com/bmadcode/BMAD-METHOD/compare/v4.24.0...v4.24.1) (2025-07-03)
### Bug Fixes
* centralized yamlExtraction function and all now fix character issues for windows ([e2985d6](https://github.com/bmadcode/BMAD-METHOD/commit/e2985d6093136575e8d8c91ce53c82abc4097de6))
* filtering extension stripping logic update ([405954a](https://github.com/bmadcode/BMAD-METHOD/commit/405954ad924d8bd66f94c918643f6e9c091d4d09))
* standardize on file extension .yaml instead of a mix of yml and yaml ([a4c0b18](https://github.com/bmadcode/BMAD-METHOD/commit/a4c0b1839d12d2ad21b7949aa30f4f7d82ec6c9c))
# [4.24.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.23.0...v4.24.0) (2025-07-02)
@@ -213,7 +236,7 @@
### Features
* dev can use debug log configured in core-config.yml ([0e5aaf0](https://github.com/bmadcode/BMAD-METHOD/commit/0e5aaf07bbc6fd9f2706ea26e35f5f38fd72147a))
* dev can use debug log configured in core-config.yaml ([0e5aaf0](https://github.com/bmadcode/BMAD-METHOD/commit/0e5aaf07bbc6fd9f2706ea26e35f5f38fd72147a))
# [4.8.0](https://github.com/bmadcode/BMAD-METHOD/compare/v4.7.0...v4.8.0) (2025-06-19)

View File

@@ -234,7 +234,7 @@ After uploading a bundle, type `/help` to see available commands.
- **[Complete User Guide](docs/user-guide.md)** - Full walkthrough from project inception to completion
- **[CLI Commands](docs/user-guide.md#cli-commands)** - Installation, updates, and management
- **[Upgrading from V3](docs/user-guide.md#upgrading-from-v3-to-v4)** - Migration instructions
- **[Core Configuration](docs/user-guide.md#core-configuration-coreconfigyml)** - V4's flexible project structure support
- **[Core Configuration](docs/user-guide.md#core-configuration)** - V4's flexible project structure support
- **[Teams & Workflows](docs/user-guide.md#team-configurations)** - Pre-configured agent teams
## Project Structure

View File

@@ -2,7 +2,7 @@
CRITICAL: Read the full YML to understand your operating params, start activation to alter your state of being, follow startup instructions, stay in this being until told to exit this mode:
```yml
```yaml
root: .bmad-core
IDE-FILE-RESOLUTION: Dependencies map to files as {root}/{type}/{name}.md where root=".bmad-core", type=folder (tasks/templates/checklists/utils), name=dependency name.
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "draft story"→*create→create-next-story task, "make a new prd" would be dependencies->tasks->create-doc combined with the dependencies->templates->prd-tmpl.md), or ask for clarification if ambiguous.

View File

@@ -2,7 +2,7 @@
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
```yml
```yaml
root: .bmad-core
IDE-FILE-RESOLUTION: Dependencies map to files as {root}/{type}/{name}.md where root=".bmad-core", type=folder (tasks/templates/checklists/utils), name=dependency name.
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "draft story"→*create→create-next-story task, "make a new prd" would be dependencies->tasks->create-doc combined with the dependencies->templates->prd-tmpl.md), or ask for clarification if ambiguous.
@@ -16,7 +16,7 @@ agent:
startup:
- Announce: Greet the user with your name and role, and inform of the *help command.
- CRITICAL: Load .bmad-core/core-config.yml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load .bmad-core/core-config.yaml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load ONLY files specified in devLoadAlwaysFiles. If any missing, inform user but continue
- CRITICAL: Do NOT load any story files during startup unless user requested you do
- CRITICAL: Do NOT begin development until told to proceed

View File

@@ -2,7 +2,7 @@
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
```yml
```yaml
root: .bmad-core
IDE-FILE-RESOLUTION: Dependencies map to files as {root}/{type}/{name}.md where root=".bmad-core", type=folder (tasks/templates/checklists/utils), name=dependency name.
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "draft story"→*create→create-next-story task, "make a new prd" would be dependencies->tasks->create-doc combined with the dependencies->templates->prd-tmpl.md), or ask for clarification if ambiguous.

View File

@@ -2,7 +2,7 @@
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
```yml
```yaml
root: .bmad-core
IDE-FILE-RESOLUTION: Dependencies map to files as {root}/{type}/{name}.md where root=".bmad-core", type=folder (tasks/templates/checklists/utils), name=dependency name.
REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (e.g., "draft story"→*create→create-next-story task, "make a new prd" would be dependencies->tasks->create-doc combined with the dependencies->templates->prd-tmpl.md), or ask for clarification if ambiguous.

View File

@@ -1,4 +1,4 @@
version: 4.21.1
version: 4.22.0
markdownExploder: true
prd:
prdFile: docs/prd.md

View File

@@ -161,11 +161,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -337,7 +337,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)

View File

@@ -28,7 +28,7 @@ Create detailed, implementation-ready stories for brownfield projects where trad
#### 0.1 Check Workflow Plan
- Load core-config.yml and check if `workflow.trackProgress: true`
- Load core-config.yaml and check if `workflow.trackProgress: true`
- If yes, check for active plan at `workflow.planFile`
- If plan exists:
- Verify story creation aligns with current plan step

View File

@@ -10,12 +10,12 @@ To identify the next logical story based on project progress and epic definition
[[LLM: CRITICAL - This MUST be your first step]]
- Load `.bmad-core/core-config.yml` from the project root
- Load `.bmad-core/core-config.yaml` from the project root
- If the file does not exist:
- HALT and inform the user: "core-config.yml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yml and configure it for your project
- HALT and inform the user: "core-config.yaml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yaml and configure it for your project
2. Run the BMAD installer against your project to upgrade and add the file automatically
Please add and configure core-config.yml before proceeding."
Please add and configure core-config.yaml before proceeding."
- Extract the following key configurations:
- `devStoryLocation`: Where to save story files
- `prd.prdSharded`: Whether PRD is sharded or monolithic

View File

@@ -8,20 +8,20 @@
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."

View File

@@ -8,7 +8,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:

View File

@@ -396,7 +396,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)

View File

@@ -288,7 +288,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -644,8 +644,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/

View File

@@ -13,7 +13,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```

View File

@@ -15,7 +15,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:

View File

@@ -665,7 +665,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -2113,11 +2113,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -2289,7 +2289,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)

View File

@@ -120,7 +120,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1315,7 +1315,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)
@@ -2164,7 +2164,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -2520,8 +2520,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/

View File

@@ -1199,7 +1199,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1900,12 +1900,12 @@ To identify the next logical story based on project progress and epic definition
[[LLM: CRITICAL - This MUST be your first step]]
- Load `.bmad-core/core-config.yml` from the project root
- Load `.bmad-core/core-config.yaml` from the project root
- If the file does not exist:
- HALT and inform the user: "core-config.yml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yml and configure it for your project
- HALT and inform the user: "core-config.yaml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yaml and configure it for your project
2. Run the BMAD installer against your project to upgrade and add the file automatically
Please add and configure core-config.yml before proceeding."
Please add and configure core-config.yaml before proceeding."
- Extract the following key configurations:
- `devStoryLocation`: Where to save story files
- `prd.prdSharded`: Whether PRD is sharded or monolithic
@@ -2510,20 +2510,20 @@ Would you like to proceed with documentation indexing? Please provide the requir
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."
@@ -2704,7 +2704,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -3343,7 +3343,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)
@@ -5718,7 +5718,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -6074,8 +6074,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/
@@ -9104,11 +9104,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -9280,7 +9280,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -9714,7 +9714,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```

View File

@@ -290,7 +290,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -742,7 +742,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -1146,11 +1146,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -1322,7 +1322,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -1750,7 +1750,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```

2
dist/agents/dev.txt vendored
View File

@@ -53,7 +53,7 @@ agent:
customization: null
startup:
- Announce: Greet the user with your name and role, and inform of the *help command.
- CRITICAL: Load .bmad-core/core-config.yml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load .bmad-core/core-config.yaml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load ONLY files specified in devLoadAlwaysFiles. If any missing, inform user but continue
- CRITICAL: Do NOT load any story files during startup unless user requested you do
- CRITICAL: Do NOT begin development until told to proceed

8
dist/agents/pm.txt vendored
View File

@@ -117,7 +117,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -993,20 +993,20 @@ The LLM will:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."

6
dist/agents/po.txt vendored
View File

@@ -208,20 +208,20 @@ The LLM will:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."

8
dist/agents/sm.txt vendored
View File

@@ -102,12 +102,12 @@ To identify the next logical story based on project progress and epic definition
[[LLM: CRITICAL - This MUST be your first step]]
- Load `.bmad-core/core-config.yml` from the project root
- Load `.bmad-core/core-config.yaml` from the project root
- If the file does not exist:
- HALT and inform the user: "core-config.yml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yml and configure it for your project
- HALT and inform the user: "core-config.yaml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yaml and configure it for your project
2. Run the BMAD installer against your project to upgrade and add the file automatically
Please add and configure core-config.yml before proceeding."
Please add and configure core-config.yaml before proceeding."
- Extract the following key configurations:
- `devStoryLocation`: Where to save story files
- `prd.prdSharded`: Whether PRD is sharded or monolithic

View File

@@ -477,7 +477,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:

View File

@@ -117,7 +117,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:

View File

@@ -1004,7 +1004,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -2969,7 +2969,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -3225,7 +3225,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```

View File

@@ -586,7 +586,7 @@ IMPORTANT: Only proceed after plan.md is approved
expansion-packs/
└── {pack-name}/
├── plan.md (ALREADY CREATED)
├── manifest.yml
├── manifest.yaml
├── README.md
├── agents/
│ ├── {pack-name}-orchestrator.md (REQUIRED - Custom themed orchestrator)
@@ -609,13 +609,13 @@ expansion-packs/
├── workflows/
│ └── {domain}-workflow.md (REQUIRED if multiple agents)
└── agent-teams/
└── {domain}-team.yml (REQUIRED if multiple agents)
└── {domain}-team.yaml (REQUIRED if multiple agents)
```
#### 3.2 Create Manifest
Create `manifest.yml`:
Create `manifest.yaml`:
```yaml
name: {pack-name}
@@ -658,7 +658,7 @@ files:
- {domain}-workflow.md # REQUIRED if multiple agents - decision trees
agent-teams:
- {domain}-team.yml # REQUIRED if multiple agents - team config
- {domain}-team.yaml # REQUIRED if multiple agents - team config
# Data files users must provide (in their bmad-core/data/ directory)
required_user_data:
@@ -794,7 +794,7 @@ cp common/utils/workflow-management.md expansion-packs/{pack-name}/utils/
1. Design decision trees for workflow branching
2. Create handoff protocols to specialist agents
3. Implement validation loops and quality checkpoints
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.yml`
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.yaml`
5. **If multiple agents**: Create workflow in `workflows/{domain}-workflow.md`
6. Ensure orchestrator references workflow-management utility
7. Verify ALL referenced tasks exist (including core utilities)
@@ -965,7 +965,7 @@ Before declaring complete:
1. [ ] Decision trees and workflow orchestration complete
2. [ ] Knowledge base files embedded (best practices, terminology, standards)
3. [ ] Manifest.yml reflects all components and dependencies
3. [ ] Manifest.yaml reflects all components and dependencies
4. [ ] All items in plan.md marked complete
5. [ ] No orphaned tasks or templates
@@ -1072,7 +1072,7 @@ These files are automatically available to all agents and don't require user set
```text
healthcare/
├── plan.md (Created first for approval)
├── manifest.yml (with dependency mapping and character descriptions)
├── manifest.yaml (with dependency mapping and character descriptions)
├── README.md (featuring character introductions and numbered options)
├── agents/
│ ├── healthcare-orchestrator.md (Dr. Sarah Chen - YAML-in-Markdown)
@@ -1098,7 +1098,7 @@ healthcare/
│ ├── clinical-trial-workflow.md (decision trees with Mermaid diagrams)
│ └── compliance-audit-workflow.md (handoff protocols and quality gates)
└── agent-teams/
└── healthcare-team.yml (coordinated team configurations)
└── healthcare-team.yaml (coordinated team configurations)
Required user data files (bmad-core/data/):
- medical-terminology.md (institution-specific terms and abbreviations)
@@ -1309,7 +1309,7 @@ Embedded knowledge (automatic):
- [ ] All agent references verified (tasks, templates, data, checklists)
- [ ] Data requirements documented with validation criteria and examples
- [ ] README includes character introductions and numbered options explanation
- [ ] manifest.yml reflects actual files with dependency mapping and character descriptions
- [ ] manifest.yaml reflects actual files with dependency mapping and character descriptions
**Advanced Quality Gates:**
@@ -1732,7 +1732,7 @@ Present these numbered options to the user:
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
```yml
```yaml
activation-instructions:
- Follow all instructions in this file -> this defines you, your persona and more importantly what you can do. STAY IN CHARACTER!
- Only read the files/tasks listed here when user selects them for execution to minimize context usage

View File

@@ -118,7 +118,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1300,7 +1300,7 @@ kind: ConfigMap
metadata:
name: prometheus-config
data:
prometheus.yml: |
prometheus.yaml: |
global:
scrape_interval: {{scrape_interval}}
scrape_configs:

View File

@@ -337,7 +337,7 @@ agent:
customization: null
startup:
- Announce: Greet the user with your name and role, and inform of the *help command.
- CRITICAL: Load .bmad-core/core-config.yml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load .bmad-core/core-config.yaml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load ONLY files specified in devLoadAlwaysFiles. If any missing, inform user but continue
- CRITICAL: Do NOT load any story files during startup unless user requested you do
- CRITICAL: Do NOT begin development until told to proceed
@@ -782,7 +782,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1234,7 +1234,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -1638,11 +1638,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -1814,7 +1814,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -2242,7 +2242,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```
@@ -4706,7 +4706,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)
@@ -5555,7 +5555,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -5911,8 +5911,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/
@@ -7788,20 +7788,20 @@ The story creation is successful when:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."
@@ -9675,12 +9675,12 @@ To identify the next logical story based on project progress and epic definition
[[LLM: CRITICAL - This MUST be your first step]]
- Load `.bmad-core/core-config.yml` from the project root
- Load `.bmad-core/core-config.yaml` from the project root
- If the file does not exist:
- HALT and inform the user: "core-config.yml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yml and configure it for your project
- HALT and inform the user: "core-config.yaml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yaml and configure it for your project
2. Run the BMAD installer against your project to upgrade and add the file automatically
Please add and configure core-config.yml before proceeding."
Please add and configure core-config.yaml before proceeding."
- Extract the following key configurations:
- `devStoryLocation`: Where to save story files
- `prd.prdSharded`: Whether PRD is sharded or monolithic

View File

@@ -626,7 +626,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1078,7 +1078,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -1482,11 +1482,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -1658,7 +1658,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -2086,7 +2086,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```
@@ -4551,20 +4551,20 @@ The LLM will:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."
@@ -6646,7 +6646,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)
@@ -7495,7 +7495,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -7851,8 +7851,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/

View File

@@ -319,7 +319,7 @@ agent:
customization: null
startup:
- Announce: Greet the user with your name and role, and inform of the *help command.
- CRITICAL: Load .bmad-core/core-config.yml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load .bmad-core/core-config.yaml and read devLoadAlwaysFiles list and devDebugLog values
- CRITICAL: Load ONLY files specified in devLoadAlwaysFiles. If any missing, inform user but continue
- CRITICAL: Do NOT load any story files during startup unless user requested you do
- CRITICAL: Do NOT begin development until told to proceed
@@ -526,7 +526,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -978,7 +978,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -1382,11 +1382,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -1558,7 +1558,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -1986,7 +1986,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```
@@ -2404,20 +2404,20 @@ The LLM will:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."
@@ -3690,12 +3690,12 @@ To identify the next logical story based on project progress and epic definition
[[LLM: CRITICAL - This MUST be your first step]]
- Load `.bmad-core/core-config.yml` from the project root
- Load `.bmad-core/core-config.yaml` from the project root
- If the file does not exist:
- HALT and inform the user: "core-config.yml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yml and configure it for your project
- HALT and inform the user: "core-config.yaml not found. This file is required for story creation. You can:
1. Copy it from GITHUB BMAD-METHOD/bmad-core/core-config.yaml and configure it for your project
2. Run the BMAD installer against your project to upgrade and add the file automatically
Please add and configure core-config.yml before proceeding."
Please add and configure core-config.yaml before proceeding."
- Extract the following key configurations:
- `devStoryLocation`: Where to save story files
- `prd.prdSharded`: Whether PRD is sharded or monolithic

View File

@@ -558,7 +558,7 @@ Generate documents from templates by EXECUTING (not just reading) embedded instr
### 0. Check Workflow Plan (if configured)
[[LLM: Check if plan tracking is enabled in core-config.yml]]
[[LLM: Check if plan tracking is enabled in core-config.yaml]]
- If `workflow.trackProgress: true`, check for active plan using utils#plan-management
- If plan exists and this document creation is part of the plan:
@@ -1010,7 +1010,7 @@ Update the status of steps in an active workflow plan, mark completions, add not
### 0. Load Plan Configuration
[[LLM: First load core-config.yml to get plan settings]]
[[LLM: First load core-config.yaml to get plan settings]]
Check workflow configuration:
@@ -1414,11 +1414,11 @@ npx bmad-method install
5. **MUST switch to Dev agent** for implementation
6. Keep planning and coding in separate chat sessions
## Core Configuration (core-config.yml)
## Core Configuration (core-config.yaml)
**New in V4**: The `bmad-core/core-config.yml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
**New in V4**: The `bmad-core/core-config.yaml` file is a critical innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
### What is core-config.yml?
### What is core-config.yaml?
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It enables:
@@ -1590,7 +1590,7 @@ The BMAD-Method is built around a modular architecture centered on the `bmad-cor
#### 2. Agent Teams (`bmad-core/agent-teams/`)
- **Purpose**: Define collections of agents bundled together for specific purposes
- **Examples**: `team-all.yml` (comprehensive bundle), `team-fullstack.yml` (full-stack development)
- **Examples**: `team-all.yaml` (comprehensive bundle), `team-fullstack.yaml` (full-stack development)
- **Usage**: Creates pre-packaged contexts for web UI environments
#### 3. Workflows (`bmad-core/workflows/`)
@@ -2018,7 +2018,7 @@ Provides utilities for agents and tasks to interact with workflow plans, check p
```
Check for workflow plan:
1. Look for docs/workflow-plan.md (default location)
2. Check core-config.yml for custom plan location
2. Check core-config.yaml for custom plan location
3. Return plan status (exists/not exists)
```
@@ -4483,20 +4483,20 @@ The LLM will:
## Primary Method: Automatic with markdown-tree
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
[[LLM: First, check if markdownExploder is set to true in bmad-core/core-config.yaml. If it is, attempt to run the command: `md-tree explode {input file} {output path}`.
If the command succeeds, inform the user that the document has been sharded successfully and STOP - do not proceed further.
If the command fails (especially with an error indicating the command is not found or not available), inform the user: "The markdownExploder setting is enabled but the md-tree command is not available. Please either:
1. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
2. Or set markdownExploder to false in bmad-core/core-config.yml
2. Or set markdownExploder to false in bmad-core/core-config.yaml
**IMPORTANT: STOP HERE - do not proceed with manual sharding until one of the above actions is taken.**"
If markdownExploder is set to false, inform the user: "The markdownExploder setting is currently false. For better performance and reliability, you should:
1. Set markdownExploder to true in bmad-core/core-config.yml
1. Set markdownExploder to true in bmad-core/core-config.yaml
2. Install @kayvan/markdown-tree-parser globally with: `npm install -g @kayvan/markdown-tree-parser`
I will now proceed with the manual sharding process."
@@ -6108,7 +6108,7 @@ After presenting the structure, apply `tasks#advanced-elicitation` protocol to r
{{project-root}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ └── main.yml
│ └── main.yaml
├── .vscode/ # VSCode settings (optional)
│ └── settings.json
├── build/ # Compiled output (git-ignored)
@@ -6957,7 +6957,7 @@ Use appropriate format for the chosen API style. If no API (e.g., static site),
^^CONDITION: has_rest_api^^
```yml
```yaml
openapi: 3.0.0
info:
title:
@@ -7313,8 +7313,8 @@ After presenting this section, apply `tasks#advanced-elicitation` protocol]]
{{project-name}}/
├── .github/ # CI/CD workflows
│ └── workflows/
│ ├── ci.yml
│ └── deploy.yml
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # Application packages
│ ├── web/ # Frontend application
│ │ ├── src/

View File

@@ -33,7 +33,7 @@ Select mode from the mode selector (usually in status bar):
### File Permission Summary
- **Documentation agents** (analyst, pm, po, sm): `.md`, `.txt` only
- **bmad-architect**: `.md`, `.txt`, `.yml`, `.yaml`, `.json`
- **bmad-architect**: `.md`, `.txt`, `.yaml`, `.yaml`, `.json`
- **bmad-qa**: Test files (`.test.*`, `.spec.*`) and `.md`
- **bmad-ux-expert**: `.md`, `.css`, `.scss`, `.html`, `.jsx`, `.tsx`
- **Full access**: `bmad-dev`, `bmad-bmad-master`, `bmad-orchestrator`

View File

@@ -0,0 +1,53 @@
# BMAD Method Guide for Visual Studio Code
This guide covers the setup and usage of the BMAD Method in Visual Studio Code. For the complete workflow, see the [BMAD Workflow Guide](../bmad-workflow-guide.md).
## Installation
When running `npx bmad-method install`, select **Visual Studio Code** as your IDE. This command will perform the following actions:
- Create the `.bmad-core/` directory with all the agent rule files.
- Create the `.vscode/` directory and add a `settings.json` file with the basic configuration to enable GitHub Copilot's agent mode.
## Using BMAD Agents in VS Code
1. In the GitHub Copilot Chat window, select **Agent** from the chat mode dropdown list (usually located next to the input field).
2. Once in Agent Mode, type `@` and the agent's name in the chat input to activate it:
- `@bmad-master` - Universal task executor
- `@sm` - Scrum Master
- `@dev` - Full-stack developer
- `@architect` - Solution architect
- `@pm` - Product manager
- `@analyst` - Business analyst
- `@qa` - QA specialist
- `@po` - Product owner
- `@ux-expert` - UX specialist
## VS Code Specific Features
- **Dynamic Configuration**: When you first invoke an agent (e.g., `@dev`), VS Code will automatically update `.vscode/settings.json` by adding the configuration for that chat mode.
- **Activation**: Use the `@` prefix in the GitHub Copilot Chat for instant switching between agents.
- **Collaboration**: Fully compatible with **Live Share**, allowing you, your team, and BMAD agents to work together in real-time.
- **Project Context**: Agents have full access to your workspace, including open files and the selected code.
## Tips for VS Code Users
- Use the `help` command (e.g., `@dev help`) to see the available commands for each agent.
- Use `@workspace` in the Copilot Chat to ask questions about your entire project.
- Consider adding `.vscode/` and `.bmad-core/` to your `.gitignore` file in team projects to avoid conflicts with personal settings.

View File

@@ -75,12 +75,12 @@ The `.bmad-core` directory contains all the definitions and resources that give
### 3.2. Agent Teams (`.bmad-core/agent-teams/`)
- **Purpose**: Team files (e.g., `team-all.yml`) define collections of agents and workflows that are bundled together for a specific purpose, like "full-stack development" or "backend-only". This creates a larger, pre-packaged context for web UI environments.
- **Purpose**: Team files (e.g., `team-all.yaml`) define collections of agents and workflows that are bundled together for a specific purpose, like "full-stack development" or "backend-only". This creates a larger, pre-packaged context for web UI environments.
- **Structure**: A team file lists the agents to include. It can use wildcards, such as `"*"` to include all agents. This allows for the creation of comprehensive bundles like `team-all`.
### 3.3. Workflows (`.bmad-core/workflows/`)
- **Purpose**: Workflows are YAML files (e.g., `greenfield-fullstack.yml`) that define a prescribed sequence of steps and agent interactions for a specific project type. They act as a strategic guide for the user and the `bmad-orchestrator` agent.
- **Purpose**: Workflows are YAML files (e.g., `greenfield-fullstack.yaml`) that define a prescribed sequence of steps and agent interactions for a specific project type. They act as a strategic guide for the user and the `bmad-orchestrator` agent.
- **Structure**: A workflow defines sequences for both complex and simple projects, lists the agents involved at each step, the artifacts they create, and the conditions for moving from one step to the next. It often includes a Mermaid diagram for visualization.
### 3.4. Reusable Resources (`templates`, `tasks`, `checklists`, `data`)
@@ -239,10 +239,10 @@ bmad-method/
│ │ ├── sm.md # Scrum master agent
│ │ └── ux-expert.md # UX designer agent
│ ├── agent-teams/ # Pre-configured agent teams
│ │ ├── team-all.yml # All agents bundle
│ │ ├── team-fullstack.yml # Full-stack development team
│ │ ├── team-ide-minimal.yml # Minimal IDE-focused team
│ │ └── team-no-ui.yml # Backend-only team
│ │ ├── team-all.yaml # All agents bundle
│ │ ├── team-fullstack.yaml # Full-stack development team
│ │ ├── team-ide-minimal.yaml # Minimal IDE-focused team
│ │ └── team-no-ui.yaml # Backend-only team
│ ├── checklists/ # Quality assurance checklists
│ │ ├── architect-checklist.md
│ │ ├── po-master-checklist.md
@@ -268,11 +268,11 @@ bmad-method/
│ │ ├── template-format.md # Template markup spec
│ │ └── workflow-management.md # Workflow helpers
│ ├── workflows/ # Development workflows
│ │ ├── brownfield-enhancement.yml
│ │ ├── greenfield-fullstack.yml
│ │ ├── greenfield-service.yml
│ │ └── greenfield-simple.yml
│ └── core-config.yml # V4 configuration system
│ │ ├── brownfield-enhancement.yaml
│ │ ├── greenfield-fullstack.yaml
│ │ ├── greenfield-service.yaml
│ │ └── greenfield-simple.yaml
│ └── core-config.yaml # V4 configuration system
├── dist/ # Pre-built bundles (generated)
│ ├── agents/ # Individual agent bundles
@@ -378,7 +378,7 @@ bmad-method/
### Key Files
- **core-config.yml**: V4's flexible configuration system
- **core-config.yaml**: V4's flexible configuration system
- **bmad-kb.md**: Central knowledge base loaded by most agents
- **template-format.md**: Specification for BMAD's template markup
- **dependency-resolver.js**: Manages agent resource loading

View File

@@ -104,7 +104,7 @@ After upgrading:
2. Optionally run the `doc-migration-task` to align your documents with V4 templates - you can do this with your agent by saying something like: 'run {drag in task} against {drag prd or arch file from docs} to align with {drag the template from .bmad-core/templates/full-stack-architecture.md}'
3. If you have separate front-end and backend architecture docs you can modify step 2 to merge both into a single full stack architecture or separate Front and Back end.
The reason #2 and #3 are optional is because now BMAD V4 makes sharding optional for the SM. See [Core Configuration](#core-configuration-coreconfigyml)
The reason #2 and #3 are optional is because now BMAD V4 makes sharding optional for the SM. See [Core Configuration](#core-configuration)
**Note**: The agents in `.bmad-core/` fully replace the items in `bmad-agent/` - you can remove the backup folder versions.
@@ -456,7 +456,7 @@ The SM agent serves as a critical bridge between high-level planning and technic
When the SM agent executes the `create-next-story` task:
1. **Loads Configuration**: Reads `core-config.yml` to understand project structure
1. **Loads Configuration**: Reads `core-config.yaml` to understand project structure
2. **Identifies Next Story**: Sequentially processes stories from epics (1.1, 1.2, 2.1, etc.)
3. **Gathers Architecture Context**: Reads relevant sharded architecture documents based on story type:
@@ -1131,11 +1131,11 @@ This file allows you to define your preferred technologies, patterns, and standa
When creating custom web bundles or uploading to AI platforms, include your `technical-preferences.md` content to ensure agents have your preferences from the start of any conversation.
### Core Configuration (core-config.yml)
### Core Configuration
The `bmad-core/core-config.yml` file is a critical V4 innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
The `bmad-core/core-config.yaml` file is a critical V4 innovation that enables BMAD to work seamlessly with any project structure, providing maximum flexibility and backwards compatibility.
#### Understanding core-config.yml
#### Understanding core-config.yaml
This configuration file acts as a map for BMAD agents, telling them exactly where to find your project documents and how they're structured. It's what makes V4 agents intelligent enough to work with V3 projects, custom layouts, or any document organization you prefer.
@@ -1350,7 +1350,7 @@ customTechnicalDocuments:
1. **Always Configure for Your Structure**: Don't force your project to match BMAD defaults
2. **Keep devLoadAlwaysFiles Focused**: Only include files needed for every dev task
3. **Use Debug Log**: Enable when troubleshooting story implementation issues
4. **Version Control core-config.yml**: Track changes to understand project evolution
4. **Version Control core-config.yaml**: Track changes to understand project evolution
5. **Document Custom Patterns**: If using custom epicFilePattern, document it
#### Troubleshooting

View File

@@ -1,5 +1,5 @@
name: bmad-2d-phaser-game-dev
version: 1.2.0
version: 1.3.0
short-title: 2D game development with Phaser 3 & TypeScript
description: >-
2D Game Development expansion pack for BMAD Method - Phaser 3 & TypeScript

View File

@@ -1,5 +1,5 @@
name: bmad-creator-tools
version: 1.1.0
version: 1.2.0
short-title: Tools for creating BMAD framework components
description: Tools for creating and extending BMAD framework components.
author: Brian (BMad)

View File

@@ -286,7 +286,7 @@ IMPORTANT: Only proceed after plan.md is approved
expansion-packs/
└── {pack-name}/
├── plan.md (ALREADY CREATED)
├── manifest.yml
├── manifest.yaml
├── README.md
├── agents/
│ ├── {pack-name}-orchestrator.md (REQUIRED - Custom themed orchestrator)
@@ -309,13 +309,13 @@ expansion-packs/
├── workflows/
│ └── {domain}-workflow.md (REQUIRED if multiple agents)
└── agent-teams/
└── {domain}-team.yml (REQUIRED if multiple agents)
└── {domain}-team.yaml (REQUIRED if multiple agents)
```
#### 3.2 Create Manifest
Create `manifest.yml`:
Create `manifest.yaml`:
```yaml
name: {pack-name}
@@ -358,7 +358,7 @@ files:
- {domain}-workflow.md # REQUIRED if multiple agents - decision trees
agent-teams:
- {domain}-team.yml # REQUIRED if multiple agents - team config
- {domain}-team.yaml # REQUIRED if multiple agents - team config
# Data files users must provide (in their bmad-core/data/ directory)
required_user_data:
@@ -494,7 +494,7 @@ cp common/utils/workflow-management.md expansion-packs/{pack-name}/utils/
1. Design decision trees for workflow branching
2. Create handoff protocols to specialist agents
3. Implement validation loops and quality checkpoints
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.yml`
4. **If multiple agents**: Create team configuration in `agent-teams/{domain}-team.yaml`
5. **If multiple agents**: Create workflow in `workflows/{domain}-workflow.md`
6. Ensure orchestrator references workflow-management utility
7. Verify ALL referenced tasks exist (including core utilities)
@@ -665,7 +665,7 @@ Before declaring complete:
1. [ ] Decision trees and workflow orchestration complete
2. [ ] Knowledge base files embedded (best practices, terminology, standards)
3. [ ] Manifest.yml reflects all components and dependencies
3. [ ] Manifest.yaml reflects all components and dependencies
4. [ ] All items in plan.md marked complete
5. [ ] No orphaned tasks or templates
@@ -772,7 +772,7 @@ These files are automatically available to all agents and don't require user set
```text
healthcare/
├── plan.md (Created first for approval)
├── manifest.yml (with dependency mapping and character descriptions)
├── manifest.yaml (with dependency mapping and character descriptions)
├── README.md (featuring character introductions and numbered options)
├── agents/
│ ├── healthcare-orchestrator.md (Dr. Sarah Chen - YAML-in-Markdown)
@@ -798,7 +798,7 @@ healthcare/
│ ├── clinical-trial-workflow.md (decision trees with Mermaid diagrams)
│ └── compliance-audit-workflow.md (handoff protocols and quality gates)
└── agent-teams/
└── healthcare-team.yml (coordinated team configurations)
└── healthcare-team.yaml (coordinated team configurations)
Required user data files (bmad-core/data/):
- medical-terminology.md (institution-specific terms and abbreviations)
@@ -1009,7 +1009,7 @@ Embedded knowledge (automatic):
- [ ] All agent references verified (tasks, templates, data, checklists)
- [ ] Data requirements documented with validation criteria and examples
- [ ] README includes character introductions and numbered options explanation
- [ ] manifest.yml reflects actual files with dependency mapping and character descriptions
- [ ] manifest.yaml reflects actual files with dependency mapping and character descriptions
**Advanced Quality Gates:**

View File

@@ -150,5 +150,5 @@ workflows: null
3. Replace all placeholders with actual values
4. Ensure agent names match available agents in the system
5. Verify workflow names match available workflows
6. Save as team-[descriptor].yml or [domain]-team.yml
6. Save as team-[descriptor].yaml or [domain]-team.yaml
7. Place in the agent-teams directory of the appropriate location]]

View File

@@ -10,7 +10,7 @@
CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
```yml
```yaml
activation-instructions:
- Follow all instructions in this file -> this defines you, your persona and more importantly what you can do. STAY IN CHARACTER!
- Only read the files/tasks listed here when user selects them for execution to minimize context usage

View File

@@ -28,7 +28,7 @@ Install this expansion pack when your project requires:
### Agents
- `devops.yml` - DevOps and Platform Engineering agent configuration
- `devops.yaml` - DevOps and Platform Engineering agent configuration
### Personas
@@ -116,8 +116,8 @@ Before deployment:
The DevOps agent can be added to team configurations:
- `team-technical.yml` - For technical implementation teams
- `team-full-org.yml` - For complete organizational teams
- `team-technical.yaml` - For technical implementation teams
- `team-full-org.yaml` - For complete organizational teams
## Dependencies

View File

@@ -1,5 +1,5 @@
name: bmad-infrastructure-devops
version: 1.1.0
version: 1.2.0
short-title: Infrastructure and DevOps capabilities
description: >-
This expansion pack extends BMAD Method with comprehensive infrastructure and

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "bmad-method",
"version": "4.24.0",
"version": "4.24.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bmad-method",
"version": "4.24.0",
"version": "4.24.3",
"license": "MIT",
"dependencies": {
"@kayvan/markdown-tree-parser": "^1.5.0",

View File

@@ -1,6 +1,6 @@
{
"name": "bmad-method",
"version": "4.24.0",
"version": "4.24.3",
"description": "Breakthrough Method of Agile AI-driven Development",
"main": "tools/cli.js",
"bin": {

View File

@@ -1,6 +1,7 @@
const fs = require("node:fs").promises;
const path = require("node:path");
const DependencyResolver = require("../lib/dependency-resolver");
const yamlUtils = require("../lib/yaml-utils");
class WebBuilder {
constructor(options = {}) {
@@ -111,10 +112,12 @@ class WebBuilder {
processAgentContent(content) {
// First, replace content before YAML with the template
const yamlContent = yamlUtils.extractYamlFromAgent(content);
if (!yamlContent) return content;
const yamlMatch = content.match(/```ya?ml\n([\s\S]*?)\n```/);
if (!yamlMatch) return content;
const yamlContent = yamlMatch[1];
const yamlStartIndex = content.indexOf(yamlMatch[0]);
const yamlEndIndex = yamlStartIndex + yamlMatch[0].length;
@@ -259,7 +262,7 @@ class WebBuilder {
const agentTeamsDir = path.join(packDir, "agent-teams");
try {
const teamFiles = await fs.readdir(agentTeamsDir);
const teamFile = teamFiles.find((f) => f.endsWith(".yml"));
const teamFile = teamFiles.find((f) => f.endsWith(".yaml"));
if (teamFile) {
console.log(` Building team bundle for ${packName}`);
@@ -272,7 +275,7 @@ class WebBuilder {
for (const outputDir of outputDirs) {
const teamsOutputDir = path.join(outputDir, "teams");
await fs.mkdir(teamsOutputDir, { recursive: true });
const outputFile = path.join(teamsOutputDir, teamFile.replace(".yml", ".txt"));
const outputFile = path.join(teamsOutputDir, teamFile.replace(".yaml", ".txt"));
await fs.writeFile(outputFile, bundle, "utf8");
console.log(` ✓ Created bundle: ${path.relative(this.rootDir, outputFile)}`);
}
@@ -294,11 +297,11 @@ class WebBuilder {
sections.push(this.formatSection(`agents#${agentName}`, agentContent));
// Resolve and add agent dependencies
const agentYaml = agentContent.match(/```yaml\n([\s\S]*?)\n```/);
if (agentYaml) {
const yamlContent = yamlUtils.extractYamlFromAgent(agentContent);
if (yamlContent) {
try {
const yaml = require("js-yaml");
const agentConfig = yaml.load(agentYaml[1]);
const agentConfig = yaml.load(yamlContent);
if (agentConfig.dependencies) {
// Add resources, first try expansion pack, then core
@@ -306,7 +309,7 @@ class WebBuilder {
if (Array.isArray(resources)) {
for (const resourceName of resources) {
let found = false;
const extensions = [".md", ".yml", ".yaml"];
const extensions = [".md", ".yaml"];
// Try expansion pack first
for (const ext of extensions) {
@@ -391,7 +394,7 @@ class WebBuilder {
// Add team configuration and parse to get agent list
const teamContent = await fs.readFile(teamConfigPath, "utf8");
const teamFileName = path.basename(teamConfigPath, ".yml");
const teamFileName = path.basename(teamConfigPath, ".yaml");
const teamConfig = this.parseYaml(teamContent);
sections.push(this.formatSection(`agent-teams#${teamFileName}`, teamContent));
@@ -416,9 +419,9 @@ class WebBuilder {
try {
const resourceFiles = await fs.readdir(resourcePath);
for (const resourceFile of resourceFiles.filter(
(f) => f.endsWith(".md") || f.endsWith(".yml")
(f) => f.endsWith(".md") || f.endsWith(".yaml")
)) {
const fileName = resourceFile.replace(/\.(md|yml)$/, "");
const fileName = resourceFile.replace(/\.(md|yaml)$/, "");
expansionResources.set(`${resourceDir}#${fileName}`, true);
}
} catch (error) {
@@ -474,13 +477,9 @@ class WebBuilder {
sections.push(this.formatSection(`agents#${agentId}`, coreAgentContent));
// Parse and collect dependencies from core agent
const agentYaml = coreAgentContent.match(/```yaml\n([\s\S]*?)\n```/);
if (agentYaml) {
const yamlContent = yamlUtils.extractYamlFromAgent(coreAgentContent, true);
if (yamlContent) {
try {
// Clean up the YAML to handle command descriptions after dashes
let yamlContent = agentYaml[1];
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, "$1$2");
const agentConfig = this.parseYaml(yamlContent);
if (agentConfig.dependencies) {
for (const [resourceType, resources] of Object.entries(agentConfig.dependencies)) {
@@ -508,7 +507,7 @@ class WebBuilder {
// Always prefer expansion pack versions if they exist
for (const [key, dep] of allDependencies) {
let found = false;
const extensions = [".md", ".yml", ".yaml"];
const extensions = [".md", ".yaml"];
// Always check expansion pack first, even if the dependency came from a core agent
if (expansionResources.has(key)) {
@@ -568,11 +567,11 @@ class WebBuilder {
try {
const resourceFiles = await fs.readdir(resourcePath);
for (const resourceFile of resourceFiles.filter(
(f) => f.endsWith(".md") || f.endsWith(".yml")
(f) => f.endsWith(".md") || f.endsWith(".yaml")
)) {
const filePath = path.join(resourcePath, resourceFile);
const fileContent = await fs.readFile(filePath, "utf8");
const fileName = resourceFile.replace(/\.(md|yml)$/, "");
const fileName = resourceFile.replace(/\.(md|yaml)$/, "");
// Only add if not already included as a dependency
const resourceKey = `${resourceDir}#${fileName}`;

View File

@@ -32,7 +32,7 @@ async function bumpAllVersions() {
const updatedItems = [];
// First, bump the core version
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yml');
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
try {
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
const coreConfig = yaml.load(coreConfigContent);
@@ -59,7 +59,7 @@ async function bumpAllVersions() {
for (const entry of entries) {
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'README.md') {
const packId = entry.name;
const configPath = path.join(expansionPacksDir, packId, 'config.yml');
const configPath = path.join(expansionPacksDir, packId, 'config.yaml');
if (fs.existsSync(configPath)) {
try {

View File

@@ -30,7 +30,7 @@ function bumpVersion(currentVersion, type) {
async function bumpCoreVersion() {
try {
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yml');
const coreConfigPath = path.join(__dirname, '..', 'bmad-core', 'core-config.yaml');
const coreConfigContent = fs.readFileSync(coreConfigPath, 'utf8');
const coreConfig = yaml.load(coreConfigContent);

View File

@@ -38,7 +38,7 @@ function bumpVersion(currentVersion, type) {
async function updateVersion() {
try {
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yml');
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
if (!fs.existsSync(configPath)) {
console.error(`Error: Expansion pack '${packId}' not found`);

View File

@@ -16,7 +16,7 @@ installer/
│ ├── ide-setup.js # IDE-specific setup
│ └── prompts.js # Interactive CLI prompts
├── config/ # Configuration files
│ └── install.config.yml # Installation profiles
│ └── install.config.yaml # Installation profiles
├── templates/ # IDE template files
│ ├── cursor-rules.md # Cursor template
│ ├── claude-commands.md # Claude Code template

View File

@@ -158,7 +158,7 @@ async function promptInstallation() {
const choices = [];
// Load core config to get short-title
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yml');
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
@@ -166,7 +166,7 @@ async function promptInstallation() {
let bmadOptionText;
if (state.type === 'v4_existing') {
const currentVersion = state.manifest?.version || 'unknown';
const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.yml
const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.yaml
const versionInfo = currentVersion === newVersion
? `(v${currentVersion} - reinstall)`
: `(v${currentVersion} → v${newVersion})`;

View File

@@ -1,10 +1,11 @@
const fs = require('fs-extra');
const path = require('path');
const yaml = require('js-yaml');
const { extractYamlFromAgent } = require('../../lib/yaml-utils');
class ConfigLoader {
constructor() {
this.configPath = path.join(__dirname, '..', 'config', 'install.config.yml');
this.configPath = path.join(__dirname, '..', 'config', 'install.config.yaml');
this.config = null;
}
@@ -41,9 +42,9 @@ class ConfigLoader {
const agentContent = await fs.readFile(agentPath, 'utf8');
// Extract YAML block from agent file
const yamlMatch = agentContent.match(/```yml\n([\s\S]*?)\n```/);
if (yamlMatch) {
const yamlContent = yaml.load(yamlMatch[1]);
const yamlContentText = extractYamlFromAgent(agentContent);
if (yamlContentText) {
const yamlContent = yaml.load(yamlContentText);
const agentConfig = yamlContent.agent || {};
agents.push({
@@ -79,10 +80,10 @@ class ConfigLoader {
for (const entry of entries) {
if (entry.isDirectory() && !entry.name.startsWith('.')) {
const packPath = path.join(expansionPacksDir, entry.name);
const configPath = path.join(packPath, 'config.yml');
const configPath = path.join(packPath, 'config.yaml');
try {
// Read config.yml
// Read config.yaml
const configContent = await fs.readFile(configPath, 'utf8');
const config = yaml.load(configContent);
@@ -97,7 +98,7 @@ class ConfigLoader {
dependencies: config.dependencies?.agents || []
});
} catch (error) {
// Fallback if config.yml doesn't exist or can't be read
// Fallback if config.yaml doesn't exist or can't be read
console.warn(`Failed to read config for expansion pack ${entry.name}: ${error.message}`);
// Try to derive info from directory name as fallback
@@ -180,7 +181,7 @@ class ConfigLoader {
const teams = [];
for (const entry of entries) {
if (entry.isFile() && entry.name.endsWith('.yml')) {
if (entry.isFile() && entry.name.endsWith('.yaml')) {
const teamPath = path.join(teamsDir, entry.name);
try {
@@ -189,7 +190,7 @@ class ConfigLoader {
if (teamConfig.bundle) {
teams.push({
id: path.basename(entry.name, '.yml'),
id: path.basename(entry.name, '.yaml'),
name: teamConfig.bundle.name || entry.name,
description: teamConfig.bundle.description || 'Team configuration',
icon: teamConfig.bundle.icon || '📋'
@@ -209,7 +210,7 @@ class ConfigLoader {
}
getTeamPath(teamId) {
return path.join(this.getBmadCorePath(), 'agent-teams', `${teamId}.yml`);
return path.join(this.getBmadCorePath(), 'agent-teams', `${teamId}.yaml`);
}
async getTeamDependencies(teamId) {
@@ -224,7 +225,7 @@ class ConfigLoader {
const depPaths = [];
// Add team config file
depPaths.push(`.bmad-core/agent-teams/${teamId}.yml`);
depPaths.push(`.bmad-core/agent-teams/${teamId}.yaml`);
// Add all agents
for (const agent of teamDeps.agents) {
@@ -236,7 +237,7 @@ class ConfigLoader {
// Add all resolved resources
for (const resource of teamDeps.resources) {
const filePath = `.bmad-core/${resource.type}/${resource.id}.${resource.type === 'workflows' ? 'yml' : 'md'}`;
const filePath = `.bmad-core/${resource.type}/${resource.id}.${resource.type === 'workflows' ? 'yaml' : 'md'}`;
if (!depPaths.includes(filePath)) {
depPaths.push(filePath);
}

View File

@@ -17,7 +17,7 @@ async function initializeModules() {
class FileManager {
constructor() {
this.manifestDir = ".bmad-core";
this.manifestFile = "install-manifest.yml";
this.manifestFile = "install-manifest.yaml";
}
async copyFile(source, destination) {
@@ -83,15 +83,15 @@ class FileManager {
this.manifestFile
);
// Read version from core-config.yml
const coreConfigPath = path.join(__dirname, "../../../bmad-core/core-config.yml");
// Read version from core-config.yaml
const coreConfigPath = path.join(__dirname, "../../../bmad-core/core-config.yaml");
let coreVersion = "unknown";
try {
const coreConfigContent = await fs.readFile(coreConfigPath, "utf8");
const coreConfig = yaml.load(coreConfigContent);
coreVersion = coreConfig.version || "unknown";
} catch (error) {
console.warn("Could not read version from core-config.yml, using 'unknown'");
console.warn("Could not read version from core-config.yaml, using 'unknown'");
}
const manifest = {
@@ -178,7 +178,7 @@ class FileManager {
const filePath = path.join(installDir, file.path);
// Skip checking the manifest file itself - it will always be different due to timestamps
if (file.path.endsWith('install-manifest.yml')) {
if (file.path.endsWith('install-manifest.yaml')) {
continue;
}

View File

@@ -3,6 +3,7 @@ const fs = require("fs-extra");
const yaml = require("js-yaml");
const fileManager = require("./file-manager");
const configLoader = require("./config-loader");
const { extractYamlFromAgent } = require("../../lib/yaml-utils");
// Dynamic import for ES module
let chalk;
@@ -27,7 +28,7 @@ class IdeSetup {
if (this.ideAgentConfig) return this.ideAgentConfig;
try {
const configPath = path.join(__dirname, '..', 'config', 'ide-agent-config.yml');
const configPath = path.join(__dirname, '..', 'config', 'ide-agent-config.yaml');
const configContent = await fs.readFile(configPath, 'utf8');
this.ideAgentConfig = yaml.load(configContent);
return this.ideAgentConfig;
@@ -98,11 +99,11 @@ class IdeSetup {
mdcContent += "## Agent Activation\n\n";
mdcContent +=
"CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n";
mdcContent += "```yml\n";
mdcContent += "```yaml\n";
// Extract just the YAML content from the agent file
const yamlMatch = agentContent.match(/```ya?ml\n([\s\S]*?)```/);
if (yamlMatch) {
mdcContent += yamlMatch[1].trim();
const yamlContent = extractYamlFromAgent(agentContent);
if (yamlContent) {
mdcContent += yamlContent;
} else {
// If no YAML found, include the whole content minus the header
mdcContent += agentContent.replace(/^#.*$/m, "").trim();
@@ -180,11 +181,11 @@ class IdeSetup {
mdContent += "## Agent Activation\n\n";
mdContent +=
"CRITICAL: Read the full YML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n";
mdContent += "```yml\n";
mdContent += "```yaml\n";
// Extract just the YAML content from the agent file
const yamlMatch = agentContent.match(/```ya?ml\n([\s\S]*?)```/);
if (yamlMatch) {
mdContent += yamlMatch[1].trim();
const yamlContent = extractYamlFromAgent(agentContent);
if (yamlContent) {
mdContent += yamlContent;
} else {
// If no YAML found, include the whole content minus the header
mdContent += agentContent.replace(/^#.*$/m, "").trim();
@@ -428,11 +429,11 @@ class IdeSetup {
mdContent += "## Role Definition\n\n";
mdContent +=
"When the user types `@" + agentId + "`, adopt this persona and follow these guidelines:\n\n";
mdContent += "```yml\n";
mdContent += "```yaml\n";
// Extract just the YAML content from the agent file
const yamlMatch = agentContent.match(/```ya?ml\n([\s\S]*?)```/);
if (yamlMatch) {
mdContent += yamlMatch[1].trim();
const yamlContent = extractYamlFromAgent(agentContent);
if (yamlContent) {
mdContent += yamlContent;
} else {
// If no YAML found, include the whole content minus the header
mdContent += agentContent.replace(/^#.*$/m, "").trim();

View File

@@ -2,6 +2,7 @@ const path = require("node:path");
const fileManager = require("./file-manager");
const configLoader = require("./config-loader");
const ideSetup = require("./ide-setup");
const { extractYamlFromAgent } = require("../../lib/yaml-utils");
// Dynamic imports for ES modules
let chalk, ora, inquirer;
@@ -19,13 +20,13 @@ class Installer {
async getCoreVersion() {
const yaml = require("js-yaml");
const fs = require("fs-extra");
const coreConfigPath = path.join(__dirname, "../../../bmad-core/core-config.yml");
const coreConfigPath = path.join(__dirname, "../../../bmad-core/core-config.yaml");
try {
const coreConfigContent = await fs.readFile(coreConfigPath, "utf8");
const coreConfig = yaml.load(coreConfigContent);
return coreConfig.version || "unknown";
} catch (error) {
console.warn("Could not read version from core-config.yml, using 'unknown'");
console.warn("Could not read version from core-config.yaml, using 'unknown'");
return "unknown";
}
}
@@ -185,7 +186,7 @@ class Installer {
// Check for V4 installation (has .bmad-core with manifest)
const bmadCorePath = path.join(installDir, ".bmad-core");
const manifestPath = path.join(bmadCorePath, "install-manifest.yml");
const manifestPath = path.join(bmadCorePath, "install-manifest.yaml");
if (await fileManager.pathExists(manifestPath)) {
state.type = "v4_existing";
@@ -713,7 +714,7 @@ class Installer {
for (const file of filesToRestore) {
// Skip the manifest file itself
if (file.endsWith('install-manifest.yml')) continue;
if (file.endsWith('install-manifest.yaml')) continue;
const relativePath = file.replace('.bmad-core/', '');
const destPath = path.join(installDir, file);
@@ -1009,7 +1010,7 @@ class Installer {
// Check if expansion pack already exists
let expansionDotFolder = path.join(installDir, `.${packId}`);
const existingManifestPath = path.join(expansionDotFolder, 'install-manifest.yml');
const existingManifestPath = path.join(expansionDotFolder, 'install-manifest.yaml');
if (await fileManager.pathExists(existingManifestPath)) {
spinner.stop();
@@ -1151,12 +1152,12 @@ class Installer {
}
}
// Copy config.yml
const configPath = path.join(expansionPackDir, 'config.yml');
// Copy config.yaml
const configPath = path.join(expansionPackDir, 'config.yaml');
if (await fileManager.pathExists(configPath)) {
const configDestPath = path.join(expansionDotFolder, 'config.yml');
const configDestPath = path.join(expansionDotFolder, 'config.yaml');
if (await fileManager.copyFile(configPath, configDestPath)) {
installedFiles.push(path.join(`.${packId}`, 'config.yml'));
installedFiles.push(path.join(`.${packId}`, 'config.yaml'));
}
}
@@ -1209,7 +1210,7 @@ class Installer {
async resolveExpansionPackCoreDependencies(installDir, expansionDotFolder, packId, spinner) {
const glob = require('glob');
const yaml = require('yaml');
const yaml = require('js-yaml');
const fs = require('fs').promises;
// Find all agent files in the expansion pack
@@ -1222,10 +1223,10 @@ class Installer {
const agentContent = await fs.readFile(agentPath, 'utf8');
// Extract YAML frontmatter to check dependencies
const yamlMatch = agentContent.match(/```yaml\n([\s\S]*?)```/);
if (yamlMatch) {
const yamlContent = extractYamlFromAgent(agentContent);
if (yamlContent) {
try {
const agentConfig = yaml.parse(yamlMatch[1]);
const agentConfig = yaml.parse(yamlContent);
const dependencies = agentConfig.dependencies || {};
// Check for core dependencies (those that don't exist in the expansion pack)
@@ -1264,11 +1265,11 @@ class Installer {
async resolveExpansionPackCoreAgents(installDir, expansionDotFolder, packId, spinner) {
const glob = require('glob');
const yaml = require('yaml');
const yaml = require('js-yaml');
const fs = require('fs').promises;
// Find all team files in the expansion pack
const teamFiles = glob.sync('agent-teams/*.yml', {
const teamFiles = glob.sync('agent-teams/*.yaml', {
cwd: expansionDotFolder
});
@@ -1314,13 +1315,10 @@ class Installer {
// Now resolve this agent's dependencies too
const agentContent = await fs.readFile(coreAgentPath, 'utf8');
const yamlMatch = agentContent.match(/```ya?ml\n([\s\S]*?)```/);
const yamlContent = extractYamlFromAgent(agentContent, true);
if (yamlMatch) {
if (yamlContent) {
try {
// Clean up the YAML to handle command descriptions
let yamlContent = yamlMatch[1];
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
const agentConfig = yaml.parse(yamlContent);
const dependencies = agentConfig.dependencies || {};
@@ -1330,7 +1328,7 @@ class Installer {
const deps = dependencies[depType] || [];
for (const dep of deps) {
const depFileName = dep.endsWith('.md') || dep.endsWith('.yml') ? dep : `${dep}.md`;
const depFileName = dep.endsWith('.md') || dep.endsWith('.yaml') ? dep : `${dep}.md`;
const expansionDepPath = path.join(expansionDotFolder, depType, depFileName);
// Check if dependency exists in expansion pack
@@ -1360,7 +1358,7 @@ class Installer {
}
}
} else {
console.warn(chalk.yellow(` Warning: Core agent ${agentId} not found for team ${path.basename(teamFile, '.yml')}`));
console.warn(chalk.yellow(` Warning: Core agent ${agentId} not found for team ${path.basename(teamFile, '.yaml')}`));
}
}
}
@@ -1528,7 +1526,7 @@ class Installer {
if (stats) {
// Check if it has a manifest
const manifestPath = path.join(folderPath, "install-manifest.yml");
const manifestPath = path.join(folderPath, "install-manifest.yaml");
if (await fileManager.pathExists(manifestPath)) {
const manifest = await fileManager.readExpansionPackManifest(installDir, folder.substring(1));
if (manifest) {
@@ -1539,8 +1537,8 @@ class Installer {
};
}
} else {
// Check if it has a config.yml (expansion pack without manifest)
const configPath = path.join(folderPath, "config.yml");
// Check if it has a config.yaml (expansion pack without manifest)
const configPath = path.join(folderPath, "config.yaml");
if (await fileManager.pathExists(configPath)) {
expansionPacks[folder.substring(1)] = {
path: folderPath,
@@ -1579,7 +1577,7 @@ class Installer {
for (const file of filesToRestore) {
// Skip the manifest file itself
if (file.endsWith('install-manifest.yml')) continue;
if (file.endsWith('install-manifest.yaml')) continue;
const relativePath = file.replace(`.${packId}/`, '');
const sourcePath = path.join(pack.packPath, relativePath);
@@ -1645,7 +1643,7 @@ class Installer {
while (currentDir !== path.dirname(currentDir)) {
const bmadDir = path.join(currentDir, ".bmad-core");
const manifestPath = path.join(bmadDir, "install-manifest.yml");
const manifestPath = path.join(bmadDir, "install-manifest.yaml");
if (await fileManager.pathExists(manifestPath)) {
return bmadDir;
@@ -1656,7 +1654,7 @@ class Installer {
// Also check if we're inside a .bmad-core directory
if (path.basename(process.cwd()) === ".bmad-core") {
const manifestPath = path.join(process.cwd(), "install-manifest.yml");
const manifestPath = path.join(process.cwd(), "install-manifest.yaml");
if (await fileManager.pathExists(manifestPath)) {
return process.cwd();
}

View File

@@ -1,6 +1,6 @@
{
"name": "bmad-method",
"version": "4.24.0",
"version": "4.24.3",
"description": "BMAD Method installer - AI-powered Agile development framework",
"main": "lib/installer.js",
"bin": {

View File

@@ -1,6 +1,7 @@
const fs = require('fs').promises;
const path = require('path');
const yaml = require('js-yaml');
const { extractYamlFromAgent } = require('./yaml-utils');
class DependencyResolver {
constructor(rootDir) {
@@ -14,17 +15,12 @@ class DependencyResolver {
const agentPath = path.join(this.bmadCore, 'agents', `${agentId}.md`);
const agentContent = await fs.readFile(agentPath, 'utf8');
// Extract YAML from markdown content
const yamlMatch = agentContent.replace(/\r/g, "").match(/```ya?ml\n([\s\S]*?)\n```/);
if (!yamlMatch) {
// Extract YAML from markdown content with command cleaning
const yamlContent = extractYamlFromAgent(agentContent, true);
if (!yamlContent) {
throw new Error(`No YAML configuration found in agent ${agentId}`);
}
// Clean up the YAML to handle command descriptions after dashes
let yamlContent = yamlMatch[1];
// Fix commands section: convert "- command - description" to just "- command"
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
const agentConfig = yaml.load(yamlContent);
const dependencies = {
@@ -53,7 +49,7 @@ class DependencyResolver {
}
async resolveTeamDependencies(teamId) {
const teamPath = path.join(this.bmadCore, 'agent-teams', `${teamId}.yml`);
const teamPath = path.join(this.bmadCore, 'agent-teams', `${teamId}.yaml`);
const teamContent = await fs.readFile(teamPath, 'utf8');
const teamConfig = yaml.load(teamContent);
@@ -120,7 +116,7 @@ class DependencyResolver {
}
try {
const extensions = ['.md', '.yml', '.yaml'];
const extensions = ['.md', '.yaml'];
let content = null;
let filePath = null;
@@ -183,8 +179,8 @@ class DependencyResolver {
try {
const files = await fs.readdir(path.join(this.bmadCore, 'agent-teams'));
return files
.filter(f => f.endsWith('.yml'))
.map(f => f.replace('.yml', ''));
.filter(f => f.endsWith('.yaml'))
.map(f => f.replace('.yaml', ''));
} catch (error) {
return [];
}

29
tools/lib/yaml-utils.js Normal file
View File

@@ -0,0 +1,29 @@
/**
* Utility functions for YAML extraction from agent files
*/
/**
* Extract YAML content from agent markdown files
* @param {string} agentContent - The full content of the agent file
* @param {boolean} cleanCommands - Whether to clean command descriptions (default: false)
* @returns {string|null} - The extracted YAML content or null if not found
*/
function extractYamlFromAgent(agentContent, cleanCommands = false) {
// Remove carriage returns and match YAML block
const yamlMatch = agentContent.replace(/\r/g, "").match(/```ya?ml\n([\s\S]*?)\n```/);
if (!yamlMatch) return null;
let yamlContent = yamlMatch[1].trim();
// Clean up command descriptions if requested
// Converts "- command - description" to just "- command"
if (cleanCommands) {
yamlContent = yamlContent.replace(/^(\s*-)(\s*"[^"]+")(\s*-\s*.*)$/gm, '$1$2');
}
return yamlContent;
}
module.exports = {
extractYamlFromAgent
};

View File

@@ -22,8 +22,8 @@ if (!/^\d+\.\d+\.\d+$/.test(newVersion)) {
async function updateVersion() {
try {
// Update in config.yml
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yml');
// Update in config.yaml
const configPath = path.join(__dirname, '..', 'expansion-packs', packId, 'config.yaml');
if (!fs.existsSync(configPath)) {
console.error(`Error: Expansion pack '${packId}' not found`);
@@ -39,7 +39,7 @@ async function updateVersion() {
const updatedYaml = yaml.dump(config, { indent: 2 });
fs.writeFileSync(configPath, updatedYaml);
console.log(`✓ Updated ${packId}/config.yml: ${oldVersion}${newVersion}`);
console.log(`✓ Updated ${packId}/config.yaml: ${oldVersion}${newVersion}`);
console.log(`\n✓ Successfully updated ${packId} to version ${newVersion}`);
console.log('\nNext steps:');
console.log('1. Test the changes');

View File

@@ -197,7 +197,7 @@ async function main() {
let changed = false;
if (ext === '.md') {
changed = await processMarkdownFile(filePath);
} else if (ext === '.yml' || ext === '.yaml' || basename.includes('roomodes') || basename.includes('.yml') || basename.includes('.yaml')) {
} else if (ext === '.yaml' || ext === '.yml' || basename.includes('roomodes') || basename.includes('.yaml') || basename.includes('.yml')) {
// Handle YAML files and special cases like .roomodes
changed = await processYamlFile(filePath);