ma-agents 3.8.0 → 3.11.0
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/README.md +13 -5
- package/bin/cli.js +140 -63
- package/lib/agents.js +12 -20
- package/lib/bmad-cache/cache-manifest.json +8 -8
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.pack → pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/cis/src/module-help.csv +5 -5
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.pack → pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/gds/src/module-help.csv +34 -34
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/tea/.github/workflows/publish.yaml +168 -0
- package/lib/bmad-cache/tea/README.md +67 -57
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.pack → pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +5 -6
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/contract-testing.md +2 -3
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +42 -95
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +5 -6
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +1 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/module-help.csv +9 -9
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +2 -2
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +39 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +41 -0
- package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +39 -0
- package/lib/bmad-extension/skills/cleanup-done/SKILL.md +39 -0
- package/lib/bmad-extension/skills/close-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/generate-backlog/SKILL.md +41 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/module.yaml +1 -1
- package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +39 -0
- package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +39 -0
- package/lib/bmad-extension/workflows/add-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/modify-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +39 -0
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
- package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +39 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +41 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +39 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +41 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +39 -0
- package/lib/bmad.js +76 -8
- package/lib/installer.js +6 -1
- package/package.json +4 -4
- package/skills/add-sprint/SKILL.md +39 -0
- package/skills/add-to-sprint/SKILL.md +39 -0
- package/skills/bmad-sprint-planning/SKILL.md +41 -0
- package/skills/bmad-sprint-status/SKILL.md +39 -0
- package/skills/cleanup-done/SKILL.md +39 -0
- package/skills/close-sprint/SKILL.md +39 -0
- package/skills/generate-backlog/SKILL.md +41 -0
- package/skills/modify-sprint/SKILL.md +39 -0
- package/skills/prioritize-backlog/SKILL.md +39 -0
- package/skills/remove-from-sprint/SKILL.md +39 -0
- package/skills/sprint-status-view/SKILL.md +39 -0
- package/skills/story-status-lookup/SKILL.md +38 -21
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.rev +0 -0
- package/lib/bmad-cache/tea/.github/workflows/manual-release.yaml +0 -216
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.rev +0 -0
|
@@ -36,6 +36,45 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
+
## Backend Routing
|
|
40
|
+
|
|
41
|
+
Before executing any status-update operations, determine and route to the correct backend:
|
|
42
|
+
|
|
43
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
44
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
45
|
+
|
|
46
|
+
2. If `tracking_system` is `file-system`:
|
|
47
|
+
Proceed with the **File-System Backend** instructions below.
|
|
48
|
+
|
|
49
|
+
3. If `tracking_system` is `jira`:
|
|
50
|
+
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Transition the issue to the new status using the Jira issue transition API. Map canonical status to Jira workflow status: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
51
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
52
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
53
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
54
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
55
|
+
c. If the Jira operation FAILS for any reason:
|
|
56
|
+
- If no Jira-capable tool is available in your current context:
|
|
57
|
+
Pause and present the user with:
|
|
58
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
59
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
60
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
61
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
62
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
63
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
64
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
65
|
+
Pause and present the user with:
|
|
66
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
67
|
+
> (a) Retry — attempt the Jira operation again
|
|
68
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
69
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
70
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
71
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
72
|
+
then proceed with **File-System Backend** instructions below.
|
|
73
|
+
|
|
74
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
39
78
|
## EXECUTION
|
|
40
79
|
|
|
41
80
|
<workflow>
|
|
@@ -42,6 +42,47 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
+
## Backend Routing
|
|
46
|
+
|
|
47
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
48
|
+
|
|
49
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
50
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
51
|
+
|
|
52
|
+
2. If `tracking_system` is `file-system`:
|
|
53
|
+
Proceed with the **File-System Backend** instructions below.
|
|
54
|
+
|
|
55
|
+
3. If `tracking_system` is `jira`:
|
|
56
|
+
> "This operation will create/update Jira sprints and items in bulk. If it fails mid-way, Jira may be in partial state. The Jira server URL is `{jira_url}` and project key is `{jira_project_key}` (from `_bmad/bmm/config.yaml`). Proceed?"
|
|
57
|
+
|
|
58
|
+
a. Perform the Jira operation: Query all epics, backlog issues, sprint definitions, and sprint items for project `{jira_project_key}` at `{jira_url}` (multiple sequential read calls). For the write phase: create new Jira sprints for each sprint definition not already in Jira (one API call per sprint). Create or update Jira issues for each item in the plan (one API call per item). Map item fields as follows: title → issue summary, type → issue type (story → Story, bug → Bug), status → Jira workflow status (see status mapping below), priority → issue priority/rank. Map sprint fields: name → sprint name, start_date → sprint start date, end_date → sprint end date. Status mapping: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
59
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
60
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
61
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
62
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
63
|
+
c. If the Jira operation FAILS for any reason:
|
|
64
|
+
- If no Jira-capable tool is available in your current context:
|
|
65
|
+
Pause and present the user with:
|
|
66
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
67
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
68
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
69
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
70
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
71
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
72
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
73
|
+
Pause and present the user with:
|
|
74
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
75
|
+
> (a) Retry — attempt the Jira operation again
|
|
76
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
77
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
78
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
79
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
80
|
+
then proceed with **File-System Backend** instructions below.
|
|
81
|
+
|
|
82
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
45
86
|
## EXECUTION
|
|
46
87
|
|
|
47
88
|
<workflow>
|
|
@@ -37,6 +37,45 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
+
## Backend Routing
|
|
41
|
+
|
|
42
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
43
|
+
|
|
44
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
45
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
46
|
+
|
|
47
|
+
2. If `tracking_system` is `file-system`:
|
|
48
|
+
Proceed with the **File-System Backend** instructions below.
|
|
49
|
+
|
|
50
|
+
3. If `tracking_system` is `jira`:
|
|
51
|
+
a. Perform the Jira operation: Query the active sprint for project `{jira_project_key}` at `{jira_url}` and retrieve all sprint issues with their statuses. Query backlog issue count. Query epic progress (completed stories per epic). Map Jira sprint states and issue statuses to canonical vocabulary per the status mapping below. Use this data for health analysis — no writes. Status mapping: Backlog/Open → backlog, To Do/Selected for Development → ready-for-dev, In Progress → in-progress, In Review/Code Review → review, Done/Resolved → done, On Hold/Blocked → on-hold, Won't Do/Cancelled → cancelled.
|
|
52
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
53
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
54
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
55
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
56
|
+
c. If the Jira operation FAILS for any reason:
|
|
57
|
+
- If no Jira-capable tool is available in your current context:
|
|
58
|
+
Pause and present the user with:
|
|
59
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
60
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
61
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
62
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
63
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
64
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
65
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
66
|
+
Pause and present the user with:
|
|
67
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
68
|
+
> (a) Retry — attempt the Jira operation again
|
|
69
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
70
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
71
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
72
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
73
|
+
then proceed with **File-System Backend** instructions below.
|
|
74
|
+
|
|
75
|
+
4. **File-System Backend** — execute the steps below.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
40
79
|
## EXECUTION
|
|
41
80
|
|
|
42
81
|
<workflow>
|
|
@@ -20,6 +20,45 @@ Keeps the active sprint view lean by archiving completed and cancelled work. Pre
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## Backend Routing
|
|
24
|
+
|
|
25
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
26
|
+
|
|
27
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
28
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
29
|
+
|
|
30
|
+
2. If `tracking_system` is `file-system`:
|
|
31
|
+
Proceed with the **File-System Backend** instructions below.
|
|
32
|
+
|
|
33
|
+
3. If `tracking_system` is `jira`:
|
|
34
|
+
a. Perform the Jira operation: Query all issues in project `{jira_project_key}` at `{jira_url}` with status Done/Resolved/Closed. For each such issue that maps to a local story file at `{story_location}/{id}.md`: transition the issue to the resolved/done Jira workflow state if not already there (using the issue transition API). Then move the local story file to `{story_location}/done/{id}.md` — this local file operation always executes regardless of backend. Note: Jira issues are NOT deleted; they remain in Jira as resolved.
|
|
35
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
36
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
37
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
38
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
39
|
+
c. If the Jira operation FAILS for any reason:
|
|
40
|
+
- If no Jira-capable tool is available in your current context:
|
|
41
|
+
Pause and present the user with:
|
|
42
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
43
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
44
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
45
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
46
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
47
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
48
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
49
|
+
Pause and present the user with:
|
|
50
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
51
|
+
> (a) Retry — attempt the Jira operation again
|
|
52
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
53
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
54
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
55
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
56
|
+
then proceed with **File-System Backend** instructions below.
|
|
57
|
+
|
|
58
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
23
62
|
<workflow>
|
|
24
63
|
|
|
25
64
|
<step n="0" goal="Load configuration and validate file existence">
|
|
@@ -13,6 +13,45 @@ Close an active sprint — archive done/cancelled items, disposition incomplete
|
|
|
13
13
|
|
|
14
14
|
**Schema Reference:** `_bmad-output/planning-artifacts/sprint-status-schema.md` (Story 17.9)
|
|
15
15
|
|
|
16
|
+
## Backend Routing
|
|
17
|
+
|
|
18
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
19
|
+
|
|
20
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
21
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
22
|
+
|
|
23
|
+
2. If `tracking_system` is `file-system`:
|
|
24
|
+
Proceed with the **File-System Backend** instructions below.
|
|
25
|
+
|
|
26
|
+
3. If `tracking_system` is `jira`:
|
|
27
|
+
a. Perform the Jira operation: Query all issues in the active sprint for project `{jira_project_key}` at `{jira_url}`. For done/cancelled items: transition each to resolved/done Jira state using the issue transition API; then move each corresponding local story file from `{story_location}/{id}.md` to `{story_location}/done/{id}.md` (local file operation — always executes). For incomplete items (not done/cancelled): remove each issue from the sprint using the "remove issue from sprint" operation (returns them to board backlog). Then close the sprint using the sprint close API.
|
|
28
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
29
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
30
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
31
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
32
|
+
c. If the Jira operation FAILS for any reason:
|
|
33
|
+
- If no Jira-capable tool is available in your current context:
|
|
34
|
+
Pause and present the user with:
|
|
35
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
36
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
37
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
38
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
39
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
40
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
41
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
42
|
+
Pause and present the user with:
|
|
43
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
44
|
+
> (a) Retry — attempt the Jira operation again
|
|
45
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
46
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
47
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
48
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
49
|
+
then proceed with **File-System Backend** instructions below.
|
|
50
|
+
|
|
51
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
16
55
|
<workflow>
|
|
17
56
|
|
|
18
57
|
<step n="0" goal="Load configuration and validate file existence">
|
|
@@ -22,6 +22,47 @@ This skill reads `epics.md` and `bug-*.md` files and writes the `backlog` and `e
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## Backend Routing
|
|
26
|
+
|
|
27
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
28
|
+
|
|
29
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
30
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
31
|
+
|
|
32
|
+
2. If `tracking_system` is `file-system`:
|
|
33
|
+
Proceed with the **File-System Backend** instructions below.
|
|
34
|
+
|
|
35
|
+
3. If `tracking_system` is `jira`:
|
|
36
|
+
> "This operation will create/update Jira items in bulk. If it fails mid-way, Jira may be in partial state. The Jira server URL is `{jira_url}` and project key is `{jira_project_key}` (from `_bmad/bmm/config.yaml`). Proceed?"
|
|
37
|
+
|
|
38
|
+
a. Perform the Jira operation: Query all Jira epics (issues of type Epic) in project `{jira_project_key}` at `{jira_url}` to build the epics map. Query all backlog issues (Story and Bug type, not assigned to any active sprint) in project `{jira_project_key}`. For any backlog items not already present in Jira, create new Jira issues (one API call per item). For existing items whose fields have changed, update them. Use the Jira field mapping: item.title → issue summary, item.type → issue type (story → Story, bug → Bug), item.status → Jira workflow status (see status mapping below), item.priority → issue priority. Status mapping: backlog → Backlog/Open, ready-for-dev → To Do/Selected for Development, in-progress → In Progress, review → In Review/Code Review, done → Done/Resolved, on-hold → On Hold/Blocked, cancelled → Won't Do/Cancelled.
|
|
39
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
40
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
41
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
42
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
43
|
+
c. If the Jira operation FAILS for any reason:
|
|
44
|
+
- If no Jira-capable tool is available in your current context:
|
|
45
|
+
Pause and present the user with:
|
|
46
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
47
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
48
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
49
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
50
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
51
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
52
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
53
|
+
Pause and present the user with:
|
|
54
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
55
|
+
> (a) Retry — attempt the Jira operation again
|
|
56
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
57
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
58
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
59
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
60
|
+
then proceed with **File-System Backend** instructions below.
|
|
61
|
+
|
|
62
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
25
66
|
<workflow>
|
|
26
67
|
|
|
27
68
|
<step n="1" goal="Resolve paths and load existing sprint-status.yaml state">
|
|
@@ -14,6 +14,45 @@ Guided workflow to modify an existing sprint's metadata (name, capacity, dates,
|
|
|
14
14
|
> **Scope:** This skill modifies sprint **metadata only** — name, capacity, start date, end date, and status.
|
|
15
15
|
> To assign items to a sprint, use `/add-to-sprint`. To remove items, use `/remove-from-sprint`.
|
|
16
16
|
|
|
17
|
+
## Backend Routing
|
|
18
|
+
|
|
19
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
20
|
+
|
|
21
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
22
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
23
|
+
|
|
24
|
+
2. If `tracking_system` is `file-system`:
|
|
25
|
+
Proceed with the **File-System Backend** instructions below.
|
|
26
|
+
|
|
27
|
+
3. If `tracking_system` is `jira`:
|
|
28
|
+
a. Perform the Jira operation: Find the sprint by name or ID in the board for project `{jira_project_key}` at `{jira_url}`. Update the sprint's name, dates, or goal using the sprint update API. If the status is being changed to `active`: start the sprint using the sprint start API (transitions the sprint from future/planning to active state — enforces the single-active-sprint constraint).
|
|
29
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
30
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
31
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
32
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
33
|
+
c. If the Jira operation FAILS for any reason:
|
|
34
|
+
- If no Jira-capable tool is available in your current context:
|
|
35
|
+
Pause and present the user with:
|
|
36
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
37
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
38
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
39
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
40
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
41
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
42
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
43
|
+
Pause and present the user with:
|
|
44
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
45
|
+
> (a) Retry — attempt the Jira operation again
|
|
46
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
47
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
48
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
49
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
50
|
+
then proceed with **File-System Backend** instructions below.
|
|
51
|
+
|
|
52
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
17
56
|
<workflow>
|
|
18
57
|
|
|
19
58
|
<step n="0" goal="Load configuration and validate file existence">
|
|
@@ -12,6 +12,45 @@ triggers:
|
|
|
12
12
|
|
|
13
13
|
Reprioritize backlog items in `sprint-status.yaml` using multiple criteria: severity, business value, dependencies, type, and age.
|
|
14
14
|
|
|
15
|
+
## Backend Routing
|
|
16
|
+
|
|
17
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
18
|
+
|
|
19
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
20
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
21
|
+
|
|
22
|
+
2. If `tracking_system` is `file-system`:
|
|
23
|
+
Proceed with the **File-System Backend** instructions below.
|
|
24
|
+
|
|
25
|
+
3. If `tracking_system` is `jira`:
|
|
26
|
+
a. Perform the Jira operation: Query all backlog issues (not assigned to any sprint) for project `{jira_project_key}` at `{jira_url}`. Apply the prioritization criteria specified by the user. Reorder the issues in the board backlog by updating the issue rank/priority order (use whatever ranking capability is available on the board — NextGen board issue ranking or classic board priority field). Map canonical priority back to Jira fields.
|
|
27
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
28
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
29
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
30
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
31
|
+
c. If the Jira operation FAILS for any reason:
|
|
32
|
+
- If no Jira-capable tool is available in your current context:
|
|
33
|
+
Pause and present the user with:
|
|
34
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
35
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
36
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
37
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
38
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
39
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
40
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
41
|
+
Pause and present the user with:
|
|
42
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
43
|
+
> (a) Retry — attempt the Jira operation again
|
|
44
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
45
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
46
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
47
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
48
|
+
then proceed with **File-System Backend** instructions below.
|
|
49
|
+
|
|
50
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
15
54
|
<workflow>
|
|
16
55
|
|
|
17
56
|
<step n="0" goal="Load configuration and validate file existence">
|
|
@@ -11,6 +11,45 @@ triggers:
|
|
|
11
11
|
|
|
12
12
|
Guided workflow to move sprint items back to the backlog in the unified `sprint-status.yaml` using reverse movement semantics (inverse of `add-to-sprint`).
|
|
13
13
|
|
|
14
|
+
## Backend Routing
|
|
15
|
+
|
|
16
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
17
|
+
|
|
18
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
19
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
20
|
+
|
|
21
|
+
2. If `tracking_system` is `file-system`:
|
|
22
|
+
Proceed with the **File-System Backend** instructions below.
|
|
23
|
+
|
|
24
|
+
3. If `tracking_system` is `jira`:
|
|
25
|
+
a. Perform the Jira operation: Find the Jira issue matching the item ID in project `{jira_project_key}` at `{jira_url}` (search by issue key or summary). Remove the issue from its current sprint using the "remove issue from sprint" operation, returning it to the board backlog.
|
|
26
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
27
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
28
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
29
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
30
|
+
c. If the Jira operation FAILS for any reason:
|
|
31
|
+
- If no Jira-capable tool is available in your current context:
|
|
32
|
+
Pause and present the user with:
|
|
33
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
34
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
35
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
36
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
37
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
38
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
39
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
40
|
+
Pause and present the user with:
|
|
41
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
42
|
+
> (a) Retry — attempt the Jira operation again
|
|
43
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
44
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
45
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
46
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
47
|
+
then proceed with **File-System Backend** instructions below.
|
|
48
|
+
|
|
49
|
+
4. **File-System Backend** — execute the workflow steps below.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
14
53
|
<workflow>
|
|
15
54
|
|
|
16
55
|
<step n="0" goal="Load configuration and validate file existence">
|
|
@@ -16,6 +16,45 @@ Display a formatted, read-only dashboard of all sprint, backlog, and epic data f
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## Backend Routing
|
|
20
|
+
|
|
21
|
+
Before executing any file-system operations, determine and route to the correct backend:
|
|
22
|
+
|
|
23
|
+
1. Read `_bmad-output/implementation-artifacts/sprint-status.yaml` and extract the `tracking_system` field.
|
|
24
|
+
If the field is absent or the file does not exist, read `sprint_backend` from `_bmad/bmm/config.yaml`. Use that value if present, otherwise default to `file-system`.
|
|
25
|
+
|
|
26
|
+
2. If `tracking_system` is `file-system`:
|
|
27
|
+
Proceed with the **File-System Backend** instructions below.
|
|
28
|
+
|
|
29
|
+
3. If `tracking_system` is `jira`:
|
|
30
|
+
a. Perform the Jira operation: Query all sprint data for project `{jira_project_key}` at `{jira_url}`: active sprint with all its issues and their statuses, backlog issues count and list, epic summary and progress. Map Jira sprint states to canonical vocabulary (future → planning, active → active, closed → closed). Map Jira issue statuses to canonical statuses per the status mapping below. Use this data for the display — no writes. Status mapping: Backlog/Open → backlog, To Do/Selected for Development → ready-for-dev, In Progress → in-progress, In Review/Code Review → review, Done/Resolved → done, On Hold/Blocked → on-hold, Won't Do/Cancelled → cancelled.
|
|
31
|
+
Use whatever Jira-capable tool is available in your current tool context.
|
|
32
|
+
Map Jira entities to the canonical schema (Sprint → sprints[], Backlog → backlog[],
|
|
33
|
+
Epic → epics[], Jira status → canonical vocabulary per Section 6.3 of the routing spec).
|
|
34
|
+
b. If the Jira operation SUCCEEDS: continue with the Jira data returned. Jira is the source of truth.
|
|
35
|
+
c. If the Jira operation FAILS for any reason:
|
|
36
|
+
- If no Jira-capable tool is available in your current context:
|
|
37
|
+
Pause and present the user with:
|
|
38
|
+
> "No Jira-capable tool is available. To use Jira tracking, configure a Jira integration
|
|
39
|
+
> in your agent (an MCP server, plugin, or native integration connected to the Jira
|
|
40
|
+
> instance at `{jira_url}`). How would you like to proceed?
|
|
41
|
+
> (a) Retry — attempt the Jira operation again once a Jira tool is configured
|
|
42
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
43
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
44
|
+
- If a Jira tool attempted the operation but returned an error:
|
|
45
|
+
Pause and present the user with:
|
|
46
|
+
> "The Jira operation failed: {actual Jira error details}. How would you like to proceed?
|
|
47
|
+
> (a) Retry — attempt the Jira operation again
|
|
48
|
+
> (b) Switch to file management — update sprint-status.yaml and config to use
|
|
49
|
+
> file-system backend, then complete this operation locally. This change is permanent."
|
|
50
|
+
If user chooses (b) in either case: write `tracking_system: file-system` to `sprint-status.yaml`,
|
|
51
|
+
update `sprint_backend: file-system` in `_bmad/bmm/config.yaml`,
|
|
52
|
+
then proceed with **File-System Backend** instructions below.
|
|
53
|
+
|
|
54
|
+
4. **File-System Backend** — execute the steps below.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
19
58
|
## Step 1 — Load sprint-status.yaml
|
|
20
59
|
|
|
21
60
|
Resolve the path to `sprint-status.yaml` using the BMAD config:
|
package/lib/bmad.js
CHANGED
|
@@ -752,6 +752,7 @@ async function installBmad(modules = ['bmm', 'bmb'], tools = [], projectRoot = p
|
|
|
752
752
|
const profile = require('./profile').getProfile(projectRoot);
|
|
753
753
|
await applyOnPremPhasePrefixToDeployedSkills(projectRoot, profile);
|
|
754
754
|
await deployMethodology(projectRoot, force);
|
|
755
|
+
await deployClineWorkflows(projectRoot, tools);
|
|
755
756
|
postStepsSucceeded = true;
|
|
756
757
|
return true;
|
|
757
758
|
} catch (error) {
|
|
@@ -868,6 +869,7 @@ async function runMigration(modules, tools, projectRoot, force, { userName, comm
|
|
|
868
869
|
await applyOnPremPhasePrefixToDeployedSkills(projectRoot, profile);
|
|
869
870
|
|
|
870
871
|
await deployMethodology(projectRoot, force);
|
|
872
|
+
await deployClineWorkflows(projectRoot, tools);
|
|
871
873
|
|
|
872
874
|
// All migration steps succeeded — safe to clean up the stage now.
|
|
873
875
|
// Cleaning up earlier would remove diagnostics if any of steps 3-4 or
|
|
@@ -948,6 +950,7 @@ async function updateBmad(modules = ['bmm', 'bmb'], tools = [], projectRoot = pr
|
|
|
948
950
|
const profile = require('./profile').getProfile(projectRoot);
|
|
949
951
|
await applyOnPremPhasePrefixToDeployedSkills(projectRoot, profile);
|
|
950
952
|
await deployMethodology(projectRoot, force);
|
|
953
|
+
await deployClineWorkflows(projectRoot, tools);
|
|
951
954
|
postStepsSucceeded = true;
|
|
952
955
|
return true;
|
|
953
956
|
} catch (error) {
|
|
@@ -1113,16 +1116,12 @@ const PERSONA_SKILL_MAP = Object.freeze({
|
|
|
1113
1116
|
// agents module into install-time code paths that don't need it. The five
|
|
1114
1117
|
// IDE tools listed are the only targets that receive `bmad-agent-*` persona
|
|
1115
1118
|
// skills post-22.6 (verified 2026-04-23 via scratch install).
|
|
1116
|
-
//
|
|
1117
|
-
//
|
|
1118
|
-
// platform target_dir. Without this update F1a's prefix pass would walk a
|
|
1119
|
-
// directory that no longer receives the persona SKILL.md files.
|
|
1119
|
+
// bmad-method 6.5.0 moved copilot, roo, and kilo to the shared .agents/skills/
|
|
1120
|
+
// directory. Deduplicated here — F1a walks each unique dir once.
|
|
1120
1121
|
const TOOL_SKILL_DIRS = Object.freeze([
|
|
1121
1122
|
path.join('.claude', 'skills'),
|
|
1122
|
-
path.join('.
|
|
1123
|
+
path.join('.agents', 'skills'), // copilot, roo-code, kilocode (bmad-method 6.5.0)
|
|
1123
1124
|
path.join('.cline', 'skills'),
|
|
1124
|
-
path.join('.roo', 'skills'),
|
|
1125
|
-
path.join('.kilocode', 'skills'),
|
|
1126
1125
|
]);
|
|
1127
1126
|
|
|
1128
1127
|
/**
|
|
@@ -1373,6 +1372,74 @@ async function deployMethodology(projectRoot = process.cwd(), force = false) {
|
|
|
1373
1372
|
console.log(chalk.gray(' Tip: Use /open-presentation to open the slides (install via npx ma-agents install open-presentation)'));
|
|
1374
1373
|
}
|
|
1375
1374
|
|
|
1375
|
+
/**
|
|
1376
|
+
* Generate Cline workflow wrappers for all BMAD skills installed to .cline/skills/.
|
|
1377
|
+
* Creates .clinerules/workflows/<skill-name>.md for each installed skill so they
|
|
1378
|
+
* can be invoked via / commands in Cline chat.
|
|
1379
|
+
* No-op when 'cline' is not in the selected tools list.
|
|
1380
|
+
*/
|
|
1381
|
+
async function deployClineWorkflows(projectRoot, tools = []) {
|
|
1382
|
+
if (!tools.includes('cline')) return;
|
|
1383
|
+
|
|
1384
|
+
const clineSkillsDir = path.join(projectRoot, '.cline', 'skills');
|
|
1385
|
+
if (!(await fs.pathExists(clineSkillsDir))) return;
|
|
1386
|
+
|
|
1387
|
+
const workflowsDir = path.join(projectRoot, '.clinerules', 'workflows');
|
|
1388
|
+
await fs.ensureDir(workflowsDir);
|
|
1389
|
+
|
|
1390
|
+
const entries = await fs.readdir(clineSkillsDir, { withFileTypes: true });
|
|
1391
|
+
const skillDirs = entries.filter(e => e.isDirectory());
|
|
1392
|
+
|
|
1393
|
+
let generated = 0;
|
|
1394
|
+
for (const entry of skillDirs) {
|
|
1395
|
+
const skillName = entry.name;
|
|
1396
|
+
const skillDir = path.join(clineSkillsDir, skillName);
|
|
1397
|
+
const skillMdPath = path.join(skillDir, 'SKILL.md');
|
|
1398
|
+
const workflowMdPath = path.join(skillDir, 'workflow.md');
|
|
1399
|
+
|
|
1400
|
+
if (!(await fs.pathExists(skillMdPath))) continue;
|
|
1401
|
+
|
|
1402
|
+
const skillMdContent = await fs.readFile(skillMdPath, 'utf8');
|
|
1403
|
+
let displayName = skillName.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
|
|
1404
|
+
let description = '';
|
|
1405
|
+
|
|
1406
|
+
const fmMatch = skillMdContent.match(/^---\n([\s\S]*?)\n---/);
|
|
1407
|
+
if (fmMatch) {
|
|
1408
|
+
const fm = fmMatch[1];
|
|
1409
|
+
const nameMatch = fm.match(/^name:\s*(.+)$/m);
|
|
1410
|
+
const descMatch = fm.match(/^description:\s*(.+)$/m);
|
|
1411
|
+
if (nameMatch) displayName = nameMatch[1].trim();
|
|
1412
|
+
if (descMatch) description = descMatch[1].trim().replace(/^['"]|['"]$/g, '');
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
const hasWorkflow = await fs.pathExists(workflowMdPath);
|
|
1416
|
+
const lines = [`# ${displayName}`, ''];
|
|
1417
|
+
if (description) lines.push(description, '');
|
|
1418
|
+
|
|
1419
|
+
if (hasWorkflow) {
|
|
1420
|
+
lines.push(
|
|
1421
|
+
'## Step 1: Read and follow the BMAD skill workflow',
|
|
1422
|
+
`Read the file \`.cline/skills/${skillName}/workflow.md\` and follow all instructions within it exactly.`,
|
|
1423
|
+
''
|
|
1424
|
+
);
|
|
1425
|
+
} else {
|
|
1426
|
+
lines.push(
|
|
1427
|
+
'## Step 1: Read and follow the BMAD skill instructions',
|
|
1428
|
+
`Read the file \`.cline/skills/${skillName}/SKILL.md\`. Ignore the YAML frontmatter block (the \`---\` delimited section at the top of the file). Follow all instructions in the body of that file exactly.`,
|
|
1429
|
+
''
|
|
1430
|
+
);
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
await fs.writeFile(path.join(workflowsDir, `${skillName}.md`), lines.join('\n'), 'utf8');
|
|
1434
|
+
generated++;
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
if (generated > 0) {
|
|
1438
|
+
console.log(chalk.green(` ✓ Generated ${generated} Cline workflow wrappers in .clinerules/workflows/`));
|
|
1439
|
+
console.log(chalk.gray(' Tip: In Cline, type / to browse and invoke BMAD skills'));
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1376
1443
|
async function prePopulateBmadCache(force = false) {
|
|
1377
1444
|
const cacheSource = path.join(__dirname, 'bmad-cache');
|
|
1378
1445
|
if (!(await fs.pathExists(cacheSource))) {
|
|
@@ -1531,7 +1598,7 @@ function ensureCanonicalConfigLocation(projectRoot) {
|
|
|
1531
1598
|
|
|
1532
1599
|
// ── Migration constants ─────────────────────────────────────────────────────
|
|
1533
1600
|
|
|
1534
|
-
const BMAD_TARGET_VERSION = '6.
|
|
1601
|
+
const BMAD_TARGET_VERSION = '6.6.0';
|
|
1535
1602
|
const BMAD_MIGRATION_THRESHOLD = '6.2.0'; // versions below this need migration
|
|
1536
1603
|
const BACKUP_DIR_NAME = '.backup-pre-migration';
|
|
1537
1604
|
|
|
@@ -2491,6 +2558,7 @@ module.exports = {
|
|
|
2491
2558
|
updateBmad,
|
|
2492
2559
|
prePopulateBmadCache,
|
|
2493
2560
|
deployMethodology,
|
|
2561
|
+
deployClineWorkflows,
|
|
2494
2562
|
// Story 22.7 — canonical config (_bmad/bmm/config.yaml) helpers
|
|
2495
2563
|
readCanonicalBmadConfig,
|
|
2496
2564
|
ensureCanonicalConfigLocation,
|
package/lib/installer.js
CHANGED
|
@@ -1581,7 +1581,12 @@ const OBSOLETE_SKILL_IDS = Object.freeze([...RETIRED_SKILL_IDS, ...RENAMED_SKILL
|
|
|
1581
1581
|
const OBSOLETE_TOOL_SKILL_DIRS = Object.freeze([
|
|
1582
1582
|
// Pre-F2b (PR #70) copilot wrote skills to .github/copilot/skills;
|
|
1583
1583
|
// F2b realigned the target to .github/skills to match the BMAD upstream path.
|
|
1584
|
-
{ obsolete: '.github/copilot/skills', replacedBy: '.github/skills', sinceVersion: '3.7.0' }
|
|
1584
|
+
{ obsolete: '.github/copilot/skills', replacedBy: '.github/skills', sinceVersion: '3.7.0' },
|
|
1585
|
+
// bmad-method 6.5.0 moved github-copilot, roo, and kilo platforms from
|
|
1586
|
+
// tool-specific paths to the shared .agents/skills/ directory.
|
|
1587
|
+
{ obsolete: '.github/skills', replacedBy: '.agents/skills', sinceVersion: '3.8.1' },
|
|
1588
|
+
{ obsolete: '.roo/skills', replacedBy: '.agents/skills', sinceVersion: '3.8.1' },
|
|
1589
|
+
{ obsolete: '.kilocode/skills', replacedBy: '.agents/skills', sinceVersion: '3.8.1' }
|
|
1585
1590
|
]);
|
|
1586
1591
|
|
|
1587
1592
|
async function migrateRetiredSkills(options = {}) {
|