Compare commits

..

4 Commits

Author SHA1 Message Date
Michael Pursifull f1bfee1be3
fix: remove standalone and web_bundle from workflow schema
The maintainer (Brian Madison) removed these fields from all workflow
files in two commits:

- f699a368: removed `standalone: true` from all workflow.yaml files
- 731bee26: removed `web_bundle: false` from all workflow.yaml files

These fields are no longer part of the workflow.yaml format. Update
the schema to match upstream and remove related test fixtures.

24/24 tests passing. 9/9 workflow files valid.
2026-02-05 09:42:39 -06:00
Michael Pursifull 6cd0ed3530
Merge branch 'main' into feat/validate-workflow-schema 2026-02-05 09:30:16 -06:00
Brian Madison dcc55dd0d5 Update CHANGELOG for v6.0.0-Beta.7
- Direct workflow invocation via slash commands
- Installer multi-workflow file support
- Version checking in CLI
2026-02-04 22:43:22 -06:00
Brian Madison d37ee7f27a add installer warning when newer version is available 2026-02-04 22:36:11 -06:00
18 changed files with 65 additions and 66 deletions

View File

@ -1,5 +1,27 @@
# Changelog # Changelog
## [6.0.0-Beta.7]
**Release: February 4, 2026**
### 🌟 Key Highlights
1. **Direct Workflow Invocation** — Agent workflows can now be run directly via slash commands instead of only through agent orchestration
2. **Installer Workflow Support** — Installer now picks up `workflow-*.md` files, enabling multiple workflow files per directory
### 🎁 Features
* **Slash Command Workflow Access** — Research and PRD workflows now accessible via direct slash commands: `/domain-research`, `/market-research`, `/technical-research`, `/create-prd`, `/edit-prd`, `/validate-prd` (bd620e38, 731bee26)
* **Version Checking** — CLI now checks npm for newer versions and displays a warning banner when updates are available (d37ee7f2)
### ♻️ Refactoring
* **Workflow File Splitting** — Split monolithic `workflow.md` files into specific `workflow-*.md` files for individual workflow invocation (bd620e38)
* **Installer Multi-Workflow Support** — Installer manifest generator now supports `workflow-*.md` pattern, allowing multiple workflow files per directory (731bee26)
* **Internal Skill Renaming** — Renamed internal project skills to use `bmad-os-` prefix for consistent naming (5276d58b)
---
## [6.0.0-Beta.6] ## [6.0.0-Beta.6]
**Release: February 4, 2026** **Release: February 4, 2026**

View File

@ -1,8 +0,0 @@
# Expected: FAIL
# Error code: invalid_type
# Error path: standalone
# Tests: AC4 — missing standalone produces error
name: missing-standalone-test
description: "A workflow missing the standalone field"
author: "Test"
web_bundle: false

View File

@ -1,8 +0,0 @@
# Expected: FAIL
# Error code: invalid_type
# Error path: web_bundle
# Tests: AC5 — missing web_bundle produces error
name: missing-web-bundle-test
description: "A workflow missing the web_bundle field"
author: "Test"
standalone: true

View File

@ -1,11 +0,0 @@
# Expected: FAIL
# Error code: invalid_type
# Error path: standalone
# Error expected: boolean
# Error received: string
# Tests: AC8 — standalone with non-boolean value produces wrong_type error
name: wrong-type-standalone-test
description: "A workflow with wrong type for standalone"
author: "Test"
standalone: "yes"
web_bundle: false

View File

@ -1,11 +0,0 @@
# Expected: FAIL
# Error code: invalid_type
# Error path: web_bundle
# Error expected: boolean
# Error received: string
# Tests: AC9 — web_bundle with non-boolean value produces wrong_type error
name: wrong-type-web-bundle-test
description: "A workflow with wrong type for web_bundle"
author: "Test"
standalone: true
web_bundle: "true"

View File

@ -19,5 +19,3 @@ library: "{shared_path}/excalidraw-library.json"
default_output_file: "{output_folder}/excalidraw-diagrams/diagram-{timestamp}.excalidraw" default_output_file: "{output_folder}/excalidraw-diagrams/diagram-{timestamp}.excalidraw"
standalone: true
web_bundle: false

View File

@ -21,5 +21,3 @@ planning_artifacts: "{config_source}:planning_artifacts"
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
default_output_file: "{output_folder}/test-output.md" default_output_file: "{output_folder}/test-output.md"
standalone: true
web_bundle: false

View File

@ -19,5 +19,3 @@ sprint_status: "{implementation_artifacts}/sprint-status.yaml"
project_context: "**/project-context.md" project_context: "**/project-context.md"
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
standalone: true
web_bundle: false

View File

@ -3,5 +3,3 @@
name: minimal-test name: minimal-test
description: "A minimal workflow with only required fields" description: "A minimal workflow with only required fields"
author: "Test" author: "Test"
standalone: true
web_bundle: false

View File

@ -3,6 +3,4 @@
name: template-false-test name: template-false-test
description: "A workflow with template set to false" description: "A workflow with template set to false"
author: "Test" author: "Test"
standalone: true
web_bundle: false
template: false template: false

View File

@ -3,6 +3,4 @@
name: template-path-test name: template-path-test
description: "A workflow with template set to a path" description: "A workflow with template set to a path"
author: "Test" author: "Test"
standalone: true
web_bundle: false
template: "{installed_path}/template.md" template: "{installed_path}/template.md"

View File

@ -3,8 +3,6 @@
name: execution-hints-test name: execution-hints-test
description: "A workflow with execution hints" description: "A workflow with execution hints"
author: "Test" author: "Test"
standalone: true
web_bundle: false
execution_hints: execution_hints:
interactive: false interactive: false

View File

@ -3,8 +3,6 @@
name: input-patterns-test name: input-patterns-test
description: "A workflow with input_file_patterns using all load strategies" description: "A workflow with input_file_patterns using all load strategies"
author: "Test" author: "Test"
standalone: true
web_bundle: false
input_file_patterns: input_file_patterns:
epics: epics:

View File

@ -3,8 +3,6 @@
name: required-tools-test name: required-tools-test
description: "A workflow with required tools" description: "A workflow with required tools"
author: "Test" author: "Test"
standalone: true
web_bundle: false
required_tools: required_tools:
- read_file - read_file

View File

@ -3,8 +3,6 @@
name: tags-test name: tags-test
description: "A workflow with tags" description: "A workflow with tags"
author: "Test" author: "Test"
standalone: true
web_bundle: false
tags: tags:
- qa - qa

View File

@ -3,8 +3,6 @@
name: variables-test name: variables-test
description: "A workflow with variables section" description: "A workflow with variables section"
author: "Test" author: "Test"
standalone: true
web_bundle: false
variables: variables:
project_context: "**/project-context.md" project_context: "**/project-context.md"

View File

@ -1,6 +1,48 @@
const { program } = require('commander'); const { program } = require('commander');
const path = require('node:path'); const path = require('node:path');
const fs = require('node:fs'); const fs = require('node:fs');
const { execSync } = require('node:child_process');
// Check for updates - do this asynchronously so it doesn't block startup
const packageJson = require('../../package.json');
const packageName = 'bmad-method';
checkForUpdate().catch(() => {
// Silently ignore errors - version check is best-effort
});
async function checkForUpdate() {
try {
// For beta versions, check the beta tag; otherwise check latest
const isBeta =
packageJson.version.includes('Beta') ||
packageJson.version.includes('beta') ||
packageJson.version.includes('alpha') ||
packageJson.version.includes('rc');
const tag = isBeta ? 'beta' : 'latest';
const result = execSync(`npm view ${packageName}@${tag} version`, {
encoding: 'utf8',
stdio: 'pipe',
timeout: 5000,
}).trim();
if (result && result !== packageJson.version) {
console.warn('');
console.warn(' ╔═══════════════════════════════════════════════════════════════════════════════╗');
console.warn(' ║ UPDATE AVAILABLE ║');
console.warn(' ║ ║');
console.warn(` ║ You are using version ${packageJson.version} but ${result} is available. ║`);
console.warn(' ║ ║');
console.warn(' ║ To update,exir and first run: ║');
console.warn(` ║ npm cache clean --force && npx bmad-method@${tag} install ║`);
console.warn(' ║ ║');
console.warn(' ╚═══════════════════════════════════════════════════════════════════════════════╝');
console.warn('');
}
} catch {
// Silently fail - network issues or npm not available
}
}
// Fix for stdin issues when running through npm on Windows // Fix for stdin issues when running through npm on Windows
// Ensures keyboard interaction works properly with CLI prompts // Ensures keyboard interaction works properly with CLI prompts
@ -20,9 +62,6 @@ if (process.stdin.isTTY) {
} }
} }
// Load package.json from root for version info
const packageJson = require('../../package.json');
// Load all command modules // Load all command modules
const commandsPath = path.join(__dirname, 'commands'); const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js')); const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));

View File

@ -29,12 +29,10 @@ const executionHintsSchema = z
// Main workflow schema // Main workflow schema
const workflowSchema = z const workflowSchema = z
.object({ .object({
// Required fields (all 13 workflow.yaml files have these) // Required fields
name: z.string().min(1), name: z.string().min(1),
description: z.string().min(1), description: z.string().min(1),
author: z.string().min(1), author: z.string().min(1),
standalone: z.boolean(),
web_bundle: z.boolean(),
// Structured optional fields // Structured optional fields
template: z.union([z.string(), z.literal(false)]).optional(), template: z.union([z.string(), z.literal(false)]).optional(),