Compare commits
4 Commits
91a122fbc3
...
f1bfee1be3
| Author | SHA1 | Date |
|---|---|---|
|
|
f1bfee1be3 | |
|
|
6cd0ed3530 | |
|
|
dcc55dd0d5 | |
|
|
d37ee7f27a |
22
CHANGELOG.md
22
CHANGELOG.md
|
|
@ -1,5 +1,27 @@
|
|||
# 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]
|
||||
|
||||
**Release: February 4, 2026**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
@ -19,5 +19,3 @@ library: "{shared_path}/excalidraw-library.json"
|
|||
|
||||
default_output_file: "{output_folder}/excalidraw-diagrams/diagram-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -21,5 +21,3 @@ planning_artifacts: "{config_source}:planning_artifacts"
|
|||
implementation_artifacts: "{config_source}:implementation_artifacts"
|
||||
default_output_file: "{output_folder}/test-output.md"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -19,5 +19,3 @@ sprint_status: "{implementation_artifacts}/sprint-status.yaml"
|
|||
project_context: "**/project-context.md"
|
||||
implementation_artifacts: "{config_source}:implementation_artifacts"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -3,5 +3,3 @@
|
|||
name: minimal-test
|
||||
description: "A minimal workflow with only required fields"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -3,6 +3,4 @@
|
|||
name: template-false-test
|
||||
description: "A workflow with template set to false"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
template: false
|
||||
|
|
|
|||
|
|
@ -3,6 +3,4 @@
|
|||
name: template-path-test
|
||||
description: "A workflow with template set to a path"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
template: "{installed_path}/template.md"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
name: execution-hints-test
|
||||
description: "A workflow with execution hints"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
||||
execution_hints:
|
||||
interactive: false
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
name: input-patterns-test
|
||||
description: "A workflow with input_file_patterns using all load strategies"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
||||
input_file_patterns:
|
||||
epics:
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
name: required-tools-test
|
||||
description: "A workflow with required tools"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
||||
required_tools:
|
||||
- read_file
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
name: tags-test
|
||||
description: "A workflow with tags"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
||||
tags:
|
||||
- qa
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
name: variables-test
|
||||
description: "A workflow with variables section"
|
||||
author: "Test"
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
||||
variables:
|
||||
project_context: "**/project-context.md"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,48 @@
|
|||
const { program } = require('commander');
|
||||
const path = require('node:path');
|
||||
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
|
||||
// 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
|
||||
const commandsPath = path.join(__dirname, 'commands');
|
||||
const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));
|
||||
|
|
|
|||
|
|
@ -29,12 +29,10 @@ const executionHintsSchema = z
|
|||
// Main workflow schema
|
||||
const workflowSchema = z
|
||||
.object({
|
||||
// Required fields (all 13 workflow.yaml files have these)
|
||||
// Required fields
|
||||
name: z.string().min(1),
|
||||
description: z.string().min(1),
|
||||
author: z.string().min(1),
|
||||
standalone: z.boolean(),
|
||||
web_bundle: z.boolean(),
|
||||
|
||||
// Structured optional fields
|
||||
template: z.union([z.string(), z.literal(false)]).optional(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue