Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be4fcd8668 | ||
|
|
03f30ad28b | ||
|
|
e32b477e42 | ||
|
|
e7b1ee37e3 | ||
|
|
87c451a5c3 | ||
|
|
a96fce793b | ||
|
|
e2985d6093 | ||
|
|
405954ad92 | ||
|
|
a4c0b1839d |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -24,4 +24,5 @@ sample-project/*
|
||||
.bmad-core
|
||||
.bmad-creator-tools
|
||||
.gemini
|
||||
.bmad*/
|
||||
.bmad*/.cursor/
|
||||
web-bundles/
|
||||
|
||||
16
.vscode/settings.json
vendored
16
.vscode/settings.json
vendored
@@ -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"
|
||||
]
|
||||
}
|
||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
version: 4.21.1
|
||||
version: 4.22.0
|
||||
markdownExploder: true
|
||||
prd:
|
||||
prdFile: docs/prd.md
|
||||
@@ -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/`)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
10
dist/agents/analyst.txt
vendored
10
dist/agents/analyst.txt
vendored
@@ -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/`)
|
||||
|
||||
10
dist/agents/architect.txt
vendored
10
dist/agents/architect.txt
vendored
@@ -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/
|
||||
|
||||
36
dist/agents/bmad-master.txt
vendored
36
dist/agents/bmad-master.txt
vendored
@@ -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)
|
||||
```
|
||||
|
||||
|
||||
14
dist/agents/bmad-orchestrator.txt
vendored
14
dist/agents/bmad-orchestrator.txt
vendored
@@ -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
2
dist/agents/dev.txt
vendored
@@ -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
8
dist/agents/pm.txt
vendored
@@ -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
6
dist/agents/po.txt
vendored
@@ -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
8
dist/agents/sm.txt
vendored
@@ -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
|
||||
|
||||
2
dist/agents/ux-expert.txt
vendored
2
dist/agents/ux-expert.txt
vendored
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
38
dist/teams/team-all.txt
vendored
38
dist/teams/team-all.txt
vendored
@@ -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
|
||||
|
||||
28
dist/teams/team-fullstack.txt
vendored
28
dist/teams/team-fullstack.txt
vendored
@@ -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/
|
||||
|
||||
30
dist/teams/team-ide-minimal.txt
vendored
30
dist/teams/team-ide-minimal.txt
vendored
@@ -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
|
||||
|
||||
28
dist/teams/team-no-ui.txt
vendored
28
dist/teams/team-no-ui.txt
vendored
@@ -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/
|
||||
|
||||
@@ -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`
|
||||
|
||||
53
docs/agentic-tools/vs-code-copilot-guide.md
Normal file
53
docs/agentic-tools/vs-code-copilot-guide.md
Normal 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.
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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:**
|
||||
|
||||
|
||||
@@ -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]]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
Binary file not shown.
4
package-lock.json
generated
4
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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}`;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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`);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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})`;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
29
tools/lib/yaml-utils.js
Normal 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
|
||||
};
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user