Compare commits
5 Commits
2ef2c5d30d
...
4f5e24dda1
| Author | SHA1 | Date |
|---|---|---|
|
|
4f5e24dda1 | |
|
|
b815410904 | |
|
|
98a24fe4a7 | |
|
|
b9b51cd3fe | |
|
|
eeeea6f204 |
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
mode: primary
|
name: '{{name}}'
|
||||||
description: '{{description}}'
|
description: '{{description}}'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
---
|
---
|
||||||
|
name: '{{name}}'
|
||||||
description: '{{description}}'
|
description: '{{description}}'
|
||||||
---
|
---
|
||||||
|
|
||||||
Execute the BMAD '{{name}}' task.
|
Execute the BMAD '{{name}}' task.
|
||||||
|
|
||||||
TASK INSTRUCTIONS:
|
TASK INSTRUCTIONS:
|
||||||
|
|
||||||
1. LOAD the task file from {project-root}/{{bmadFolderName}}/{{path}}
|
1. LOAD the task file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
2. READ its entire contents
|
2. READ its entire contents
|
||||||
3. FOLLOW every instruction precisely as specified
|
3. FOLLOW every instruction precisely as specified
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
---
|
---
|
||||||
|
name: '{{name}}'
|
||||||
description: '{{description}}'
|
description: '{{description}}'
|
||||||
---
|
---
|
||||||
|
|
||||||
Execute the BMAD '{{name}}' tool.
|
Execute the BMAD '{{name}}' tool.
|
||||||
|
|
||||||
TOOL INSTRUCTIONS:
|
TOOL INSTRUCTIONS:
|
||||||
|
|
||||||
1. LOAD the tool file from {project-root}/{{bmadFolderName}}/{{path}}
|
1. LOAD the tool file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
2. READ its entire contents
|
2. READ its entire contents
|
||||||
3. FOLLOW every instruction precisely as specified
|
3. FOLLOW every instruction precisely as specified
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
---
|
---
|
||||||
|
name: '{{name}}'
|
||||||
description: '{{description}}'
|
description: '{{description}}'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -7,6 +8,7 @@ Execute the BMAD '{{name}}' workflow.
|
||||||
CRITICAL: You must load and follow the workflow definition exactly.
|
CRITICAL: You must load and follow the workflow definition exactly.
|
||||||
|
|
||||||
WORKFLOW INSTRUCTIONS:
|
WORKFLOW INSTRUCTIONS:
|
||||||
|
|
||||||
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
2. READ its entire contents
|
2. READ its entire contents
|
||||||
3. FOLLOW every step precisely as specified
|
3. FOLLOW every step precisely as specified
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
---
|
---
|
||||||
|
name: '{{name}}'
|
||||||
description: '{{description}}'
|
description: '{{description}}'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -7,6 +8,7 @@ Execute the BMAD '{{name}}' workflow.
|
||||||
CRITICAL: You must load and follow the workflow definition exactly.
|
CRITICAL: You must load and follow the workflow definition exactly.
|
||||||
|
|
||||||
WORKFLOW INSTRUCTIONS:
|
WORKFLOW INSTRUCTIONS:
|
||||||
|
|
||||||
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
2. READ its entire contents
|
2. READ its entire contents
|
||||||
3. FOLLOW every step precisely as specified
|
3. FOLLOW every step precisely as specified
|
||||||
|
|
|
||||||
|
|
@ -305,6 +305,7 @@ class UI {
|
||||||
// Build custom content config similar to promptCustomContentSource
|
// Build custom content config similar to promptCustomContentSource
|
||||||
const customPaths = [];
|
const customPaths = [];
|
||||||
const selectedModuleIds = [];
|
const selectedModuleIds = [];
|
||||||
|
const selectedModuleMetas = [];
|
||||||
|
|
||||||
for (const customPath of paths) {
|
for (const customPath of paths) {
|
||||||
const expandedPath = this.expandUserPath(customPath);
|
const expandedPath = this.expandUserPath(customPath);
|
||||||
|
|
@ -326,6 +327,11 @@ class UI {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!moduleMeta) {
|
||||||
|
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml is empty`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!moduleMeta.code) {
|
if (!moduleMeta.code) {
|
||||||
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`);
|
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -333,14 +339,22 @@ class UI {
|
||||||
|
|
||||||
customPaths.push(expandedPath);
|
customPaths.push(expandedPath);
|
||||||
selectedModuleIds.push(moduleMeta.code);
|
selectedModuleIds.push(moduleMeta.code);
|
||||||
|
selectedModuleMetas.push(moduleMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customPaths.length > 0) {
|
if (customPaths.length > 0) {
|
||||||
|
const sources = customPaths.map((p, i) => ({
|
||||||
|
path: p,
|
||||||
|
id: selectedModuleIds[i],
|
||||||
|
name: selectedModuleMetas[i].name || selectedModuleIds[i],
|
||||||
|
}));
|
||||||
customModuleResult = {
|
customModuleResult = {
|
||||||
selectedCustomModules: selectedModuleIds,
|
selectedCustomModules: selectedModuleIds,
|
||||||
customContentConfig: {
|
customContentConfig: {
|
||||||
hasCustomContent: true,
|
hasCustomContent: true,
|
||||||
paths: customPaths,
|
selected: true,
|
||||||
|
sources: sources,
|
||||||
|
selectedFiles: customPaths.map((p) => path.join(p, 'module.yaml')),
|
||||||
selectedModuleIds: selectedModuleIds,
|
selectedModuleIds: selectedModuleIds,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -446,6 +460,7 @@ class UI {
|
||||||
// Build custom content config similar to promptCustomContentSource
|
// Build custom content config similar to promptCustomContentSource
|
||||||
const customPaths = [];
|
const customPaths = [];
|
||||||
const selectedModuleIds = [];
|
const selectedModuleIds = [];
|
||||||
|
const selectedModuleMetas = [];
|
||||||
|
|
||||||
for (const customPath of paths) {
|
for (const customPath of paths) {
|
||||||
const expandedPath = this.expandUserPath(customPath);
|
const expandedPath = this.expandUserPath(customPath);
|
||||||
|
|
@ -467,6 +482,11 @@ class UI {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!moduleMeta) {
|
||||||
|
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml is empty`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!moduleMeta.code) {
|
if (!moduleMeta.code) {
|
||||||
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`);
|
await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -474,12 +494,20 @@ class UI {
|
||||||
|
|
||||||
customPaths.push(expandedPath);
|
customPaths.push(expandedPath);
|
||||||
selectedModuleIds.push(moduleMeta.code);
|
selectedModuleIds.push(moduleMeta.code);
|
||||||
|
selectedModuleMetas.push(moduleMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customPaths.length > 0) {
|
if (customPaths.length > 0) {
|
||||||
|
const sources = customPaths.map((p, i) => ({
|
||||||
|
path: p,
|
||||||
|
id: selectedModuleIds[i],
|
||||||
|
name: selectedModuleMetas[i].name || selectedModuleIds[i],
|
||||||
|
}));
|
||||||
customContentConfig = {
|
customContentConfig = {
|
||||||
hasCustomContent: true,
|
hasCustomContent: true,
|
||||||
paths: customPaths,
|
selected: true,
|
||||||
|
sources: sources,
|
||||||
|
selectedFiles: customPaths.map((p) => path.join(p, 'module.yaml')),
|
||||||
selectedModuleIds: selectedModuleIds,
|
selectedModuleIds: selectedModuleIds,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue