bmad-method 6.0.0-alpha.20 → 6.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/package.json +2 -2
- package/samples/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +1 -1
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith.agent.yaml +1 -1
- package/src/core/agents/bmad-master.agent.yaml +4 -8
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +1 -1
- package/src/modules/bmb/agents/agent-builder.agent.yaml +36 -0
- package/src/modules/bmb/agents/module-builder.agent.yaml +48 -0
- package/src/modules/bmb/agents/workflow-builder.agent.yaml +40 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +2 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +8 -13
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +10 -14
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +1 -1
- package/src/modules/bmgd/agents/game-architect.agent.yaml +8 -17
- package/src/modules/bmgd/agents/game-designer.agent.yaml +21 -33
- package/src/modules/bmgd/agents/game-dev.agent.yaml +12 -16
- package/src/modules/bmgd/agents/game-qa.agent.yaml +16 -20
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +16 -20
- package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +14 -18
- package/src/modules/bmgd/module.yaml +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/steps/step-01-discover.md +1 -1
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +1 -1
- package/src/modules/bmm/_module-installer/installer.js +0 -34
- package/src/modules/bmm/agents/analyst.agent.yaml +10 -22
- package/src/modules/bmm/agents/architect.agent.yaml +6 -23
- package/src/modules/bmm/agents/dev.agent.yaml +2 -6
- package/src/modules/bmm/agents/pm.agent.yaml +10 -19
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +6 -2
- package/src/modules/bmm/agents/sm.agent.yaml +12 -24
- package/src/modules/bmm/agents/tea.agent.yaml +20 -25
- package/src/modules/bmm/agents/tech-writer.agent.yaml +18 -31
- package/src/modules/bmm/agents/ux-designer.agent.yaml +8 -20
- package/src/modules/bmm/module.yaml +3 -3
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +21 -32
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +19 -44
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +5 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +0 -15
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -5
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +22 -69
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +5 -43
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +8 -8
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +24 -53
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +6 -6
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +2 -11
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -11
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -11
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -11
- package/src/modules/cis/agents/presentation-master.agent.yaml +14 -23
- package/src/modules/cis/agents/storyteller/storyteller.agent.yaml +2 -11
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +6 -6
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +8 -8
- package/test/fixtures/agent-schema/{invalid → valid}/metadata/core-agent-with-module.agent.yaml +4 -7
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +23 -0
- package/test/test-installation-components.js +1 -1
- package/tools/cli/installers/lib/core/config-collector.js +1 -1
- package/tools/cli/installers/lib/core/installer.js +4 -4
- package/tools/cli/installers/lib/ide/antigravity.js +3 -3
- package/tools/cli/installers/lib/ide/claude-code.js +3 -3
- package/tools/cli/installers/lib/ide/codex.js +1 -1
- package/tools/cli/installers/lib/ide/github-copilot.js +1 -1
- package/tools/cli/lib/agent/compiler.js +4 -3
- package/tools/cli/lib/ui.js +1 -1
- package/tools/platform-codes.yaml +13 -1
- package/tools/schema/agent.js +30 -52
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -94
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +0 -242
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +0 -24
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +0 -108
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +0 -46
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +0 -39
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +0 -152
- package/src/modules/bmb/reference/agents/module-examples/README.md +0 -49
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +0 -53
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +0 -57
- package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +0 -126
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-wrong-shortcut.agent.yaml +0 -24
- package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
- package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
|
@@ -15,15 +15,6 @@ agent:
|
|
|
15
15
|
principles: Design is about THEM not us. Validate through real human interaction. Failure is feedback. Design WITH users not FOR them.
|
|
16
16
|
|
|
17
17
|
menu:
|
|
18
|
-
- trigger: design
|
|
18
|
+
- trigger: DT or fuzzy match on design-thinking
|
|
19
19
|
workflow: "{project-root}/_bmad/cis/workflows/design-thinking/workflow.yaml"
|
|
20
|
-
description: Guide human-centered design process
|
|
21
|
-
|
|
22
|
-
- trigger: party-mode
|
|
23
|
-
exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
|
|
24
|
-
description: Consult with other expert agents from the party
|
|
25
|
-
|
|
26
|
-
- trigger: advanced-elicitation
|
|
27
|
-
exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
|
|
28
|
-
description: Advanced elicitation techniques to challenge the LLM to get better results
|
|
29
|
-
web-only: true
|
|
20
|
+
description: "[DT] Guide human-centered design process"
|
|
@@ -15,15 +15,6 @@ agent:
|
|
|
15
15
|
principles: Markets reward genuine new value. Innovation without business model thinking is theater. Incremental thinking means obsolete.
|
|
16
16
|
|
|
17
17
|
menu:
|
|
18
|
-
- trigger:
|
|
18
|
+
- trigger: IS or fuzzy match on innovation-strategy
|
|
19
19
|
workflow: "{project-root}/_bmad/cis/workflows/innovation-strategy/workflow.yaml"
|
|
20
|
-
description: Identify disruption opportunities and business model innovation
|
|
21
|
-
|
|
22
|
-
- trigger: party-mode
|
|
23
|
-
exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
|
|
24
|
-
description: Consult with other expert agents from the party
|
|
25
|
-
|
|
26
|
-
- trigger: advanced-elicitation
|
|
27
|
-
exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
|
|
28
|
-
description: Advanced elicitation techniques to challenge the LLM to get better results
|
|
29
|
-
web-only: true
|
|
20
|
+
description: "[IS] Identify disruption opportunities and business model innovation"
|
|
@@ -23,39 +23,30 @@ agent:
|
|
|
23
23
|
- Story structure applies everywhere - hook, build tension, deliver payoff
|
|
24
24
|
|
|
25
25
|
menu:
|
|
26
|
-
- trigger: slide-deck
|
|
26
|
+
- trigger: SD or fuzzy match on slide-deck
|
|
27
27
|
workflow: "todo"
|
|
28
|
-
description: Create multi-slide presentation with professional layouts and visual hierarchy
|
|
28
|
+
description: "[SD] Create multi-slide presentation with professional layouts and visual hierarchy"
|
|
29
29
|
|
|
30
|
-
- trigger: explainer
|
|
30
|
+
- trigger: EX or fuzzy match on youtube-explainer
|
|
31
31
|
workflow: "todo"
|
|
32
|
-
description: Design YouTube/video explainer layout with visual script and engagement hooks
|
|
32
|
+
description: "[EX] Design YouTube/video explainer layout with visual script and engagement hooks"
|
|
33
33
|
|
|
34
|
-
- trigger: pitch-deck
|
|
34
|
+
- trigger: PD or fuzzy match on pitch-deck
|
|
35
35
|
workflow: "todo"
|
|
36
|
-
description: Craft investor pitch presentation with data visualization and narrative arc
|
|
36
|
+
description: "[PD] Craft investor pitch presentation with data visualization and narrative arc"
|
|
37
37
|
|
|
38
|
-
- trigger: talk
|
|
38
|
+
- trigger: CT or fuzzy match on conference-talk
|
|
39
39
|
workflow: "todo"
|
|
40
|
-
description: Build conference or workshop presentation materials with speaker notes
|
|
40
|
+
description: "[CT] Build conference talk or workshop presentation materials with speaker notes"
|
|
41
41
|
|
|
42
|
-
- trigger: infographic
|
|
42
|
+
- trigger: IN or fuzzy match on infographic
|
|
43
43
|
workflow: "todo"
|
|
44
|
-
description: Design creative information visualization with visual storytelling
|
|
44
|
+
description: "[IN] Design creative information visualization with visual storytelling"
|
|
45
45
|
|
|
46
|
-
- trigger: visual-metaphor
|
|
46
|
+
- trigger: VM or fuzzy match on visual-metaphor
|
|
47
47
|
workflow: "todo"
|
|
48
|
-
description: Create conceptual illustrations (Rube Goldberg machines, journey maps, creative processes)
|
|
48
|
+
description: "[VM] Create conceptual illustrations (Rube Goldberg machines, journey maps, creative processes)"
|
|
49
49
|
|
|
50
|
-
- trigger: concept-visual
|
|
50
|
+
- trigger: CV or fuzzy match on concept-visual
|
|
51
51
|
workflow: "todo"
|
|
52
|
-
description: Generate single expressive image that explains ideas creatively and memorably
|
|
53
|
-
|
|
54
|
-
- trigger: party-mode
|
|
55
|
-
exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
|
|
56
|
-
description: Consult with other expert agents from the party
|
|
57
|
-
|
|
58
|
-
- trigger: advanced-elicitation
|
|
59
|
-
exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
|
|
60
|
-
description: Advanced elicitation techniques to challenge the LLM to get better results
|
|
61
|
-
web-only: true
|
|
52
|
+
description: "[CV] Generate single expressive image that explains ideas creatively and memorably"
|
|
@@ -20,15 +20,6 @@ agent:
|
|
|
20
20
|
- "Load COMPLETE file {project-root}/_bmad/_memory/storyteller-sidecar/stories-told.md and review the history of stories created for this user"
|
|
21
21
|
|
|
22
22
|
menu:
|
|
23
|
-
- trigger: story
|
|
23
|
+
- trigger: ST or fuzzy match on story
|
|
24
24
|
exec: "{project-root}/_bmad/cis/workflows/storytelling/workflow.yaml"
|
|
25
|
-
description: Craft compelling narrative using proven frameworks
|
|
26
|
-
|
|
27
|
-
- trigger: party-mode
|
|
28
|
-
exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
|
|
29
|
-
description: Consult with other expert agents from the party
|
|
30
|
-
|
|
31
|
-
- trigger: advanced-elicitation
|
|
32
|
-
exec: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
|
|
33
|
-
description: Advanced elicitation techniques to challenge the LLM to get better results
|
|
34
|
-
web-only: true
|
|
25
|
+
description: "[ST] Craft compelling narrative using proven frameworks"
|
package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
# Test: Compound trigger with
|
|
1
|
+
# Test: Compound trigger with old format (no longer supported)
|
|
2
2
|
# Expected: FAIL
|
|
3
3
|
# Error code: custom
|
|
4
4
|
# Error path: agent.menu[0].trigger
|
|
5
|
-
# Error message: agent.menu[].trigger compound format error:
|
|
5
|
+
# Error message: agent.menu[].trigger compound format error: invalid compound trigger format
|
|
6
6
|
|
|
7
7
|
agent:
|
|
8
8
|
metadata:
|
|
9
9
|
id: compound-mismatched-kebab
|
|
10
|
-
name:
|
|
11
|
-
title:
|
|
10
|
+
name: Old Format
|
|
11
|
+
title: Old Format Test
|
|
12
12
|
icon: 🧪
|
|
13
13
|
|
|
14
14
|
persona:
|
|
@@ -19,6 +19,6 @@ agent:
|
|
|
19
19
|
- Test principle
|
|
20
20
|
|
|
21
21
|
menu:
|
|
22
|
-
- trigger: TS or tech-spec or fuzzy match on
|
|
23
|
-
description:
|
|
22
|
+
- trigger: TS or tech-spec or fuzzy match on tech-spec
|
|
23
|
+
description: Old format with middle kebab-case (no longer supported)
|
|
24
24
|
action: test
|
|
@@ -16,15 +16,15 @@ agent:
|
|
|
16
16
|
- Test compound format
|
|
17
17
|
|
|
18
18
|
menu:
|
|
19
|
-
- trigger: TS or
|
|
20
|
-
description: Two-word compound trigger
|
|
19
|
+
- trigger: TS or fuzzy match on tech-spec
|
|
20
|
+
description: "[TS] Two-word compound trigger"
|
|
21
21
|
action: tech_spec
|
|
22
|
-
- trigger: DS or
|
|
23
|
-
description: Another two-word compound trigger
|
|
22
|
+
- trigger: DS or fuzzy match on dev-story
|
|
23
|
+
description: "[DS] Another two-word compound trigger"
|
|
24
24
|
action: dev_story
|
|
25
|
-
- trigger: WI or
|
|
26
|
-
description: Three-word compound trigger (uses first 2 words for shortcut)
|
|
25
|
+
- trigger: WI or fuzzy match on workflow-init-process
|
|
26
|
+
description: "[WI] Three-word compound trigger (uses first 2 words for shortcut)"
|
|
27
27
|
action: workflow_init
|
|
28
|
-
- trigger: H or
|
|
29
|
-
description: Single-word compound trigger (1-letter shortcut)
|
|
28
|
+
- trigger: H or fuzzy match on help
|
|
29
|
+
description: "[H] Single-word compound trigger (1-letter shortcut)"
|
|
30
30
|
action: help
|
package/test/fixtures/agent-schema/{invalid → valid}/metadata/core-agent-with-module.agent.yaml
RENAMED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
# Test: Core agent
|
|
2
|
-
# Expected:
|
|
3
|
-
#
|
|
4
|
-
# Error path: agent.metadata.module
|
|
5
|
-
# Error message: core agents must not include agent.metadata.module
|
|
6
|
-
# Path context: src/core/agents/core-agent-with-module.agent.yaml
|
|
1
|
+
# Test: Core agent can have module field
|
|
2
|
+
# Expected: PASS
|
|
3
|
+
# Note: Core agents can now include module field if needed
|
|
7
4
|
|
|
8
5
|
agent:
|
|
9
6
|
metadata:
|
|
10
7
|
id: core-with-module
|
|
11
8
|
name: Core With Module
|
|
12
9
|
title: Core Agent
|
|
13
|
-
icon:
|
|
10
|
+
icon: ✅
|
|
14
11
|
module: bmm
|
|
15
12
|
|
|
16
13
|
persona:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Test: Module agent can omit module field
|
|
2
|
+
# Expected: PASS
|
|
3
|
+
# Note: Module field is optional
|
|
4
|
+
|
|
5
|
+
agent:
|
|
6
|
+
metadata:
|
|
7
|
+
id: bmm-missing-module
|
|
8
|
+
name: No Module
|
|
9
|
+
title: Optional Module
|
|
10
|
+
icon: ✅
|
|
11
|
+
|
|
12
|
+
persona:
|
|
13
|
+
role: Test agent
|
|
14
|
+
identity: Test identity
|
|
15
|
+
communication_style: Test style
|
|
16
|
+
principles:
|
|
17
|
+
- Test principle
|
|
18
|
+
|
|
19
|
+
menu:
|
|
20
|
+
- trigger: help
|
|
21
|
+
description: Show help
|
|
22
|
+
action: display_help
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Test: Module agent can have any module value
|
|
2
|
+
# Expected: PASS
|
|
3
|
+
# Note: Module validation removed - agents can declare any module
|
|
4
|
+
|
|
5
|
+
agent:
|
|
6
|
+
metadata:
|
|
7
|
+
id: wrong-module
|
|
8
|
+
name: Any Module
|
|
9
|
+
title: Any Module Value
|
|
10
|
+
icon: ✅
|
|
11
|
+
module: cis
|
|
12
|
+
|
|
13
|
+
persona:
|
|
14
|
+
role: Test agent
|
|
15
|
+
identity: Test identity
|
|
16
|
+
communication_style: Test style
|
|
17
|
+
principles:
|
|
18
|
+
- Test principle
|
|
19
|
+
|
|
20
|
+
menu:
|
|
21
|
+
- trigger: help
|
|
22
|
+
description: Show help
|
|
23
|
+
action: display_help
|
|
@@ -175,7 +175,7 @@ async function runTests() {
|
|
|
175
175
|
|
|
176
176
|
assert(compiled.includes('testarch/knowledge'), 'TEA agent compilation includes knowledge base path');
|
|
177
177
|
|
|
178
|
-
assert(compiled.includes('
|
|
178
|
+
assert(compiled.includes('test-design'), 'TEA agent menu includes test-design workflow');
|
|
179
179
|
|
|
180
180
|
// Cleanup
|
|
181
181
|
await fs.remove(tempOutput);
|
|
@@ -2,7 +2,7 @@ const path = require('node:path');
|
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const yaml = require('yaml');
|
|
4
4
|
const chalk = require('chalk');
|
|
5
|
-
const inquirer = require('inquirer');
|
|
5
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
6
6
|
const { getProjectRoot, getModulePath } = require('../../../lib/project-root');
|
|
7
7
|
const { CLIUtils } = require('../../../lib/cli-utils');
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@ const path = require('node:path');
|
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
4
|
const ora = require('ora');
|
|
5
|
-
const inquirer = require('inquirer');
|
|
5
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
6
6
|
const { Detector } = require('./detector');
|
|
7
7
|
const { Manifest } = require('./manifest');
|
|
8
8
|
const { ModuleManager } = require('../modules/manager');
|
|
@@ -2140,7 +2140,7 @@ class Installer {
|
|
|
2140
2140
|
* Private: Prompt for update action
|
|
2141
2141
|
*/
|
|
2142
2142
|
async promptUpdateAction() {
|
|
2143
|
-
const inquirer = require('inquirer');
|
|
2143
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
2144
2144
|
return await inquirer.prompt([
|
|
2145
2145
|
{
|
|
2146
2146
|
type: 'list',
|
|
@@ -2170,7 +2170,7 @@ class Installer {
|
|
|
2170
2170
|
return !name.startsWith('_bmad'); // Everything else is manual cleanup
|
|
2171
2171
|
});
|
|
2172
2172
|
|
|
2173
|
-
const inquirer = require('inquirer');
|
|
2173
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
2174
2174
|
|
|
2175
2175
|
// Show warning for other offending paths FIRST
|
|
2176
2176
|
if (otherOffenders.length > 0) {
|
|
@@ -2469,7 +2469,7 @@ class Installer {
|
|
|
2469
2469
|
|
|
2470
2470
|
console.log(chalk.yellow(`\n⚠️ Found ${customModulesWithMissingSources.length} custom module(s) with missing sources:`));
|
|
2471
2471
|
|
|
2472
|
-
const inquirer = require('inquirer');
|
|
2472
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
2473
2473
|
let keptCount = 0;
|
|
2474
2474
|
let updatedCount = 0;
|
|
2475
2475
|
let removedCount = 0;
|
|
@@ -58,7 +58,7 @@ class AntigravitySetup extends BaseIdeSetup {
|
|
|
58
58
|
|
|
59
59
|
if (config.subagentChoices.install !== 'none') {
|
|
60
60
|
// Ask for installation location
|
|
61
|
-
const inquirer = require('inquirer');
|
|
61
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
62
62
|
const locationAnswer = await inquirer.prompt([
|
|
63
63
|
{
|
|
64
64
|
type: 'list',
|
|
@@ -297,7 +297,7 @@ class AntigravitySetup extends BaseIdeSetup {
|
|
|
297
297
|
choices = await this.promptSubagentInstallation(config.subagents);
|
|
298
298
|
|
|
299
299
|
if (choices.install !== 'none') {
|
|
300
|
-
const inquirer = require('inquirer');
|
|
300
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
301
301
|
const locationAnswer = await inquirer.prompt([
|
|
302
302
|
{
|
|
303
303
|
type: 'list',
|
|
@@ -334,7 +334,7 @@ class AntigravitySetup extends BaseIdeSetup {
|
|
|
334
334
|
* Prompt user for subagent installation preferences
|
|
335
335
|
*/
|
|
336
336
|
async promptSubagentInstallation(subagentConfig) {
|
|
337
|
-
const inquirer = require('inquirer');
|
|
337
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
338
338
|
|
|
339
339
|
// First ask if they want to install subagents
|
|
340
340
|
const { install } = await inquirer.prompt([
|
|
@@ -57,7 +57,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
57
57
|
|
|
58
58
|
if (config.subagentChoices.install !== 'none') {
|
|
59
59
|
// Ask for installation location
|
|
60
|
-
const inquirer = require('inquirer');
|
|
60
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
61
61
|
const locationAnswer = await inquirer.prompt([
|
|
62
62
|
{
|
|
63
63
|
type: 'list',
|
|
@@ -305,7 +305,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
305
305
|
choices = await this.promptSubagentInstallation(config.subagents);
|
|
306
306
|
|
|
307
307
|
if (choices.install !== 'none') {
|
|
308
|
-
const inquirer = require('inquirer');
|
|
308
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
309
309
|
const locationAnswer = await inquirer.prompt([
|
|
310
310
|
{
|
|
311
311
|
type: 'list',
|
|
@@ -342,7 +342,7 @@ class ClaudeCodeSetup extends BaseIdeSetup {
|
|
|
342
342
|
* Prompt user for subagent installation preferences
|
|
343
343
|
*/
|
|
344
344
|
async promptSubagentInstallation(subagentConfig) {
|
|
345
|
-
const inquirer = require('inquirer');
|
|
345
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
346
346
|
|
|
347
347
|
// First ask if they want to install subagents
|
|
348
348
|
const { install } = await inquirer.prompt([
|
|
@@ -21,7 +21,7 @@ class CodexSetup extends BaseIdeSetup {
|
|
|
21
21
|
* @returns {Object} Collected configuration
|
|
22
22
|
*/
|
|
23
23
|
async collectConfiguration(options = {}) {
|
|
24
|
-
const inquirer = require('inquirer');
|
|
24
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
25
25
|
|
|
26
26
|
let confirmed = false;
|
|
27
27
|
let installLocation = 'global';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
|
-
const inquirer = require('inquirer');
|
|
4
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
5
5
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -128,7 +128,8 @@ function buildMenuXml(menuItems) {
|
|
|
128
128
|
let xml = ' <menu>\n';
|
|
129
129
|
|
|
130
130
|
// Always inject menu display option first
|
|
131
|
-
xml += ` <item cmd="
|
|
131
|
+
xml += ` <item cmd="MH or fuzzy match on menu or help">[MH] Redisplay Menu Help</item>\n`;
|
|
132
|
+
xml += ` <item cmd="CH or fuzzy match on chat">[CH] Chat with the Agent about anything</item>\n`;
|
|
132
133
|
|
|
133
134
|
// Add user-defined menu items
|
|
134
135
|
if (menuItems && menuItems.length > 0) {
|
|
@@ -161,8 +162,8 @@ function buildMenuXml(menuItems) {
|
|
|
161
162
|
}
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
|
|
165
|
-
xml += ` <item cmd="
|
|
165
|
+
xml += ` <item cmd="PM or fuzzy match on party-mode" exec="{project-root}/_bmad/core/workflows/party-mode/workflow.md">[PM] Start Party Mode</item>\n`;
|
|
166
|
+
xml += ` <item cmd="DA or fuzzy match on exit, leave, goodbye or dismiss agent">[DA] Dismiss Agent</item>\n`;
|
|
166
167
|
|
|
167
168
|
xml += ' </menu>\n';
|
|
168
169
|
|
package/tools/cli/lib/ui.js
CHANGED
|
@@ -56,11 +56,23 @@ platforms:
|
|
|
56
56
|
description: "Enhanced Cline fork"
|
|
57
57
|
|
|
58
58
|
rovo:
|
|
59
|
-
name: "Rovo
|
|
59
|
+
name: "Rovo"
|
|
60
60
|
preferred: false
|
|
61
61
|
category: ide
|
|
62
62
|
description: "Atlassian's AI coding assistant"
|
|
63
63
|
|
|
64
|
+
rovo-dev:
|
|
65
|
+
name: "Rovo Dev"
|
|
66
|
+
preferred: false
|
|
67
|
+
category: ide
|
|
68
|
+
description: "Atlassian's Rovo development environment"
|
|
69
|
+
|
|
70
|
+
kiro-cli:
|
|
71
|
+
name: "Kiro CLI"
|
|
72
|
+
preferred: false
|
|
73
|
+
category: cli
|
|
74
|
+
description: "Kiro command-line interface"
|
|
75
|
+
|
|
64
76
|
github-copilot:
|
|
65
77
|
name: "GitHub Copilot"
|
|
66
78
|
preferred: false
|
package/tools/schema/agent.js
CHANGED
|
@@ -4,7 +4,7 @@ const { z } = require('zod');
|
|
|
4
4
|
|
|
5
5
|
const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'];
|
|
6
6
|
const TRIGGER_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
7
|
-
const COMPOUND_TRIGGER_PATTERN = /^([A-Z]{1,
|
|
7
|
+
const COMPOUND_TRIGGER_PATTERN = /^([A-Z]{1,3}) or fuzzy match on ([a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Derive the expected shortcut from a kebab-case trigger.
|
|
@@ -23,9 +23,9 @@ function deriveShortcutFromKebab(kebabTrigger) {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Parse and validate a compound trigger string.
|
|
26
|
-
* Format: "<SHORTCUT> or
|
|
26
|
+
* Format: "<SHORTCUT> or fuzzy match on <kebab-case>"
|
|
27
27
|
* @param {string} triggerValue The trigger string to parse.
|
|
28
|
-
* @returns {{ valid: boolean, kebabTrigger?: string, error?: string }}
|
|
28
|
+
* @returns {{ valid: boolean, shortcut?: string, kebabTrigger?: string, error?: string }}
|
|
29
29
|
*/
|
|
30
30
|
function parseCompoundTrigger(triggerValue) {
|
|
31
31
|
const match = COMPOUND_TRIGGER_PATTERN.exec(triggerValue);
|
|
@@ -33,26 +33,9 @@ function parseCompoundTrigger(triggerValue) {
|
|
|
33
33
|
return { valid: false, error: 'invalid compound trigger format' };
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const [, shortcut, kebabTrigger
|
|
36
|
+
const [, shortcut, kebabTrigger] = match;
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
if (kebabTrigger !== fuzzyKebab) {
|
|
40
|
-
return {
|
|
41
|
-
valid: false,
|
|
42
|
-
error: `kebab-case trigger mismatch: "${kebabTrigger}" vs "${fuzzyKebab}"`,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Validate shortcut matches derived value
|
|
47
|
-
const expectedShortcut = deriveShortcutFromKebab(kebabTrigger);
|
|
48
|
-
if (shortcut !== expectedShortcut) {
|
|
49
|
-
return {
|
|
50
|
-
valid: false,
|
|
51
|
-
error: `shortcut "${shortcut}" does not match expected "${expectedShortcut}" for "${kebabTrigger}"`,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return { valid: true, kebabTrigger };
|
|
38
|
+
return { valid: true, shortcut, kebabTrigger };
|
|
56
39
|
}
|
|
57
40
|
|
|
58
41
|
// Public API ---------------------------------------------------------------
|
|
@@ -115,6 +98,28 @@ function agentSchema(options = {}) {
|
|
|
115
98
|
});
|
|
116
99
|
return;
|
|
117
100
|
}
|
|
101
|
+
|
|
102
|
+
// Validate that shortcut matches description brackets
|
|
103
|
+
const descriptionMatch = item.description?.match(/^\[([A-Z]{1,3})\]/);
|
|
104
|
+
if (!descriptionMatch) {
|
|
105
|
+
ctx.addIssue({
|
|
106
|
+
code: 'custom',
|
|
107
|
+
path: ['agent', 'menu', index, 'description'],
|
|
108
|
+
message: `agent.menu[].description must start with [SHORTCUT] where SHORTCUT matches the trigger shortcut "${result.shortcut}"`,
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const descriptionShortcut = descriptionMatch[1];
|
|
114
|
+
if (descriptionShortcut !== result.shortcut) {
|
|
115
|
+
ctx.addIssue({
|
|
116
|
+
code: 'custom',
|
|
117
|
+
path: ['agent', 'menu', index, 'description'],
|
|
118
|
+
message: `agent.menu[].description shortcut "[${descriptionShortcut}]" must match trigger shortcut "${result.shortcut}"`,
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
118
123
|
canonicalTrigger = result.kebabTrigger;
|
|
119
124
|
} else if (!TRIGGER_PATTERN.test(triggerValue)) {
|
|
120
125
|
ctx.addIssue({
|
|
@@ -213,8 +218,9 @@ function buildAgentSchema(expectedModule) {
|
|
|
213
218
|
}
|
|
214
219
|
|
|
215
220
|
/**
|
|
216
|
-
* Validate metadata shape
|
|
221
|
+
* Validate metadata shape.
|
|
217
222
|
* @param {string|null} expectedModule Trimmed module slug or null when core agent metadata is expected.
|
|
223
|
+
* Note: Module field is optional and can be any value - no validation against path.
|
|
218
224
|
*/
|
|
219
225
|
function buildMetadataSchema(expectedModule) {
|
|
220
226
|
const schemaShape = {
|
|
@@ -225,35 +231,7 @@ function buildMetadataSchema(expectedModule) {
|
|
|
225
231
|
module: createNonEmptyString('agent.metadata.module').optional(),
|
|
226
232
|
};
|
|
227
233
|
|
|
228
|
-
return (
|
|
229
|
-
z
|
|
230
|
-
.object(schemaShape)
|
|
231
|
-
.strict()
|
|
232
|
-
// Refinement: guard presence and correctness of metadata.module.
|
|
233
|
-
.superRefine((value, ctx) => {
|
|
234
|
-
const moduleValue = typeof value.module === 'string' ? value.module.trim() : null;
|
|
235
|
-
|
|
236
|
-
if (expectedModule && !moduleValue) {
|
|
237
|
-
ctx.addIssue({
|
|
238
|
-
code: 'custom',
|
|
239
|
-
path: ['module'],
|
|
240
|
-
message: 'module-scoped agents must declare agent.metadata.module',
|
|
241
|
-
});
|
|
242
|
-
} else if (!expectedModule && moduleValue) {
|
|
243
|
-
ctx.addIssue({
|
|
244
|
-
code: 'custom',
|
|
245
|
-
path: ['module'],
|
|
246
|
-
message: 'core agents must not include agent.metadata.module',
|
|
247
|
-
});
|
|
248
|
-
} else if (expectedModule && moduleValue !== expectedModule) {
|
|
249
|
-
ctx.addIssue({
|
|
250
|
-
code: 'custom',
|
|
251
|
-
path: ['module'],
|
|
252
|
-
message: `agent.metadata.module must equal "${expectedModule}"`,
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
})
|
|
256
|
-
);
|
|
234
|
+
return z.object(schemaShape).strict();
|
|
257
235
|
}
|
|
258
236
|
|
|
259
237
|
function buildPersonaSchema() {
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# BMad Builder Agent Definition
|
|
2
|
-
# Master BMad Module Agent Team and Workflow Builder and Maintainer
|
|
3
|
-
|
|
4
|
-
agent:
|
|
5
|
-
webskip: true
|
|
6
|
-
metadata:
|
|
7
|
-
id: "_bmad/bmb/agents/bmad-builder.md"
|
|
8
|
-
name: BMad Builder
|
|
9
|
-
title: BMad Builder
|
|
10
|
-
icon: 🧙
|
|
11
|
-
module: bmb
|
|
12
|
-
|
|
13
|
-
persona:
|
|
14
|
-
role: Generalist Builder and BMAD System Maintainer
|
|
15
|
-
identity: A hands-on builder who gets things done efficiently and maintains the entire BMAD ecosystem
|
|
16
|
-
communication_style: Direct, action-oriented, and encouraging with a can-do attitude
|
|
17
|
-
principles:
|
|
18
|
-
- Execute resources directly without hesitation
|
|
19
|
-
- Load resources at runtime never pre-load
|
|
20
|
-
- Always present numbered lists for clear choices
|
|
21
|
-
- Focus on practical implementation and results
|
|
22
|
-
- Maintain system-wide coherence and standards
|
|
23
|
-
- Balance speed with quality and compliance
|
|
24
|
-
|
|
25
|
-
discussion: true
|
|
26
|
-
conversational_knowledge:
|
|
27
|
-
- agents: "{project-root}/_bmad/bmb/docs/agents/kb.csv"
|
|
28
|
-
- workflows: "{project-root}/_bmad/bmb/docs/workflows/kb.csv"
|
|
29
|
-
- modules: "{project-root}/_bmad/bmb/docs/modules/kb.csv"
|
|
30
|
-
|
|
31
|
-
menu:
|
|
32
|
-
- multi: "[CA] Create, [EA] Edit, or [VA] Validate with Compliance CheckBMAD agents with best practices"
|
|
33
|
-
triggers:
|
|
34
|
-
- create-agent:
|
|
35
|
-
- input: CA or fuzzy match create agent
|
|
36
|
-
- route: "{project-root}/_bmad/bmb/workflows/create-agent/workflow.md"
|
|
37
|
-
- data: null
|
|
38
|
-
- type: exec
|
|
39
|
-
- edit-agent:
|
|
40
|
-
- input: EA or fuzzy match edit agent
|
|
41
|
-
- route: "{project-root}/_bmad/bmb/workflows/edit-agent/workflow.md"
|
|
42
|
-
- data: null
|
|
43
|
-
- type: exec
|
|
44
|
-
- run-agent-compliance-check:
|
|
45
|
-
- input: VA or fuzzy match validate agent
|
|
46
|
-
- route: "{project-root}/_bmad/bmb/workflows/agent-compliance-check/workflow.md"
|
|
47
|
-
- data: null
|
|
48
|
-
- type: exec
|
|
49
|
-
|
|
50
|
-
- multi: "[CW] Create, [EW] Edit, or [VW] Validate with Compliance CheckBMAD workflows with best practices"
|
|
51
|
-
triggers:
|
|
52
|
-
- create-workflow:
|
|
53
|
-
- input: CW or fuzzy match create workflow
|
|
54
|
-
- route: "{project-root}/_bmad/bmb/workflows/create-workflow/workflow.md"
|
|
55
|
-
- data: null
|
|
56
|
-
- type: exec
|
|
57
|
-
- edit-workflow:
|
|
58
|
-
- input: EW or fuzzy match edit workflow
|
|
59
|
-
- route: "{project-root}/_bmad/bmb/workflows/edit-workflow/workflow.md"
|
|
60
|
-
- data: null
|
|
61
|
-
- type: exec
|
|
62
|
-
- run-workflow-compliance-check:
|
|
63
|
-
- input: VW or fuzzy match validate workflow
|
|
64
|
-
- route: "{project-root}/_bmad/bmb/workflows/workflow-compliance-check/workflow.md"
|
|
65
|
-
- data: null
|
|
66
|
-
- type: exec
|
|
67
|
-
|
|
68
|
-
- multi: "[BM] Brainstorm, [PBM] Product Brief, [CM] Create, [EM] Edit or [VM] Validate with Compliance Check BMAD modules with best practices"
|
|
69
|
-
triggers:
|
|
70
|
-
- brainstorm-module:
|
|
71
|
-
- input: BM or fuzzy match brainstorm module
|
|
72
|
-
- route: "{project-root}/_bmad/bmb/workflows/brainstorm-module/workflow.md"
|
|
73
|
-
- data: null
|
|
74
|
-
- type: exec
|
|
75
|
-
- product-brief-module:
|
|
76
|
-
- input: PBM or fuzzy match product brief module
|
|
77
|
-
- route: "{project-root}/_bmad/bmb/workflows/product-brief-module/workflow.md"
|
|
78
|
-
- data: null
|
|
79
|
-
- type: exec
|
|
80
|
-
- create-module:
|
|
81
|
-
- input: CM or fuzzy match create module
|
|
82
|
-
- route: "{project-root}/_bmad/bmb/workflows/create-module/workflow.md"
|
|
83
|
-
- data: null
|
|
84
|
-
- type: exec
|
|
85
|
-
- edit-module:
|
|
86
|
-
- input: EM or fuzzy match edit module
|
|
87
|
-
- route: "{project-root}/_bmad/bmb/workflows/edit-module/workflow.md"
|
|
88
|
-
- data: null
|
|
89
|
-
- type: exec
|
|
90
|
-
- run-module-compliance-check:
|
|
91
|
-
- input: VM or fuzzy match validate module
|
|
92
|
-
- route: "{project-root}/_bmad/bmb/workflows/module-compliance-check/workflow.md"
|
|
93
|
-
- data: null
|
|
94
|
-
- type: exec
|