feat: add VS Code workflow prompt recommendations
Add chat.promptFilesRecommendations support for GitHub Copilot to show workflow shortcuts as new chat starters. - Add workflow-prompts-config.js with all BMM, BMGD, and core prompts - Add workflow-prompt-generator.js to create .github/prompts/*.prompt.md - Update github-copilot.js to generate prompts and configure VS Code - Add phase-based prompt toggling to implementation-readiness workflow - Add phase-based prompt toggling to sprint-planning workflow When implementation-readiness passes or sprint-planning completes, the workflows update VS Code settings to prioritize the 'keep going' cycle (create-story → dev-story → code-review) over setup phase prompts.
This commit is contained in:
parent
b509fb9a1e
commit
d662aee4b2
|
|
@ -114,6 +114,29 @@ The assessment found [number] issues requiring attention. Review the detailed re
|
|||
|
||||
The implementation readiness workflow is now complete. The report contains all findings and recommendations for the user to consider.
|
||||
|
||||
### 6. Update IDE Prompt Recommendations
|
||||
|
||||
If the readiness status is **READY**, update `.vscode/settings.json` to prioritize the implementation cycle prompts:
|
||||
|
||||
**Set these prompts to `true` (implementation cycle - "keep going" loop):**
|
||||
- `bmd-create-story`
|
||||
- `bmd-dev-story`
|
||||
- `bmd-code-review`
|
||||
- `bmd-retrospective`
|
||||
- `bmd-correct-course`
|
||||
|
||||
**Set these prompts to `false` (setup phase - already completed):**
|
||||
- `bmd-workflow-init`
|
||||
- `bmd-brainstorm`
|
||||
- `bmd-prd`
|
||||
- `bmd-ux-design`
|
||||
- `bmd-create-architecture`
|
||||
- `bmd-epics-stories`
|
||||
- `bmd-implementation-readiness`
|
||||
- `bmd-sprint-planning`
|
||||
|
||||
Update the `chat.promptFilesRecommendations` object in `.vscode/settings.json` with these values.
|
||||
|
||||
---
|
||||
|
||||
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
||||
|
|
|
|||
|
|
@ -179,6 +179,40 @@ development_status:
|
|||
|
||||
</step>
|
||||
|
||||
<step n="6" goal="Update IDE prompt recommendations for implementation phase">
|
||||
<action>Update `.vscode/settings.json` to prioritize the implementation cycle prompts.</action>
|
||||
|
||||
**Set these prompts to `true` (implementation cycle - "keep going" loop):**
|
||||
- `bmd-create-story`
|
||||
- `bmd-dev-story`
|
||||
- `bmd-code-review`
|
||||
- `bmd-retrospective`
|
||||
- `bmd-correct-course`
|
||||
|
||||
**Set these prompts to `false` (setup phase - already completed):**
|
||||
- `bmd-workflow-init`
|
||||
- `bmd-brainstorm`
|
||||
- `bmd-prd`
|
||||
- `bmd-ux-design`
|
||||
- `bmd-create-architecture`
|
||||
- `bmd-epics-stories`
|
||||
- `bmd-implementation-readiness`
|
||||
- `bmd-sprint-planning`
|
||||
|
||||
<action>Update the `chat.promptFilesRecommendations` object in `.vscode/settings.json` with these values.</action>
|
||||
|
||||
<action>Inform {user_name}:</action>
|
||||
|
||||
**IDE Updated for Implementation Phase**
|
||||
|
||||
The "keep going" cycle prompts are now prioritized in VS Code:
|
||||
- **New chat → @bmd-custom-bmm-sm → *create-story** (prepare a story)
|
||||
- **New chat → @bmd-custom-bmm-dev → *dev-story** (implement it)
|
||||
- **Same chat → *code-review** (review the code)
|
||||
- **Repeat!**
|
||||
|
||||
</step>
|
||||
|
||||
</workflow>
|
||||
|
||||
## Additional Documentation
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ const { BaseIdeSetup } = require('./_base-ide');
|
|||
const chalk = require('chalk');
|
||||
const inquirer = require('inquirer').default || require('inquirer');
|
||||
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
||||
const { WorkflowPromptGenerator } = require('./shared/workflow-prompt-generator');
|
||||
|
||||
/**
|
||||
* GitHub Copilot setup handler
|
||||
|
|
@ -13,6 +14,7 @@ class GitHubCopilotSetup extends BaseIdeSetup {
|
|||
super('github-copilot', 'GitHub Copilot', true); // preferred IDE
|
||||
this.configDir = '.github';
|
||||
this.agentsDir = 'agents';
|
||||
this.promptsDir = 'prompts';
|
||||
this.vscodeDir = '.vscode';
|
||||
}
|
||||
|
||||
|
|
@ -94,14 +96,12 @@ class GitHubCopilotSetup extends BaseIdeSetup {
|
|||
async setup(projectDir, bmadDir, options = {}) {
|
||||
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
||||
|
||||
// Configure VS Code settings using pre-collected config if available
|
||||
const config = options.preCollectedConfig || {};
|
||||
await this.configureVsCodeSettings(projectDir, { ...options, ...config });
|
||||
|
||||
// Create .github/agents directory
|
||||
const githubDir = path.join(projectDir, this.configDir);
|
||||
const agentsDir = path.join(githubDir, this.agentsDir);
|
||||
const promptsDir = path.join(githubDir, this.promptsDir);
|
||||
await this.ensureDir(agentsDir);
|
||||
await this.ensureDir(promptsDir);
|
||||
|
||||
// Clean up any existing BMAD files before reinstalling
|
||||
await this.cleanup(projectDir);
|
||||
|
|
@ -117,22 +117,37 @@ class GitHubCopilotSetup extends BaseIdeSetup {
|
|||
const agentContent = await this.createAgentContent({ module: artifact.module, name: artifact.name }, content);
|
||||
|
||||
// Use bmd- prefix: bmd-custom-{module}-{name}.agent.md
|
||||
const targetPath = path.join(agentsDir, `bmd-custom-${artifact.module}-${artifact.name}.agent.md`);
|
||||
const agentFileName = `bmd-custom-${artifact.module}-${artifact.name}`;
|
||||
const targetPath = path.join(agentsDir, `${agentFileName}.agent.md`);
|
||||
await this.writeFile(targetPath, agentContent);
|
||||
agentCount++;
|
||||
|
||||
console.log(chalk.green(` ✓ Created agent: bmd-custom-${artifact.module}-${artifact.name}`));
|
||||
console.log(chalk.green(` ✓ Created agent: ${agentFileName}`));
|
||||
}
|
||||
|
||||
// Generate workflow prompts from config (shared logic)
|
||||
// Each prompt includes nextSteps guidance for the agent to suggest next workflows
|
||||
const promptGen = new WorkflowPromptGenerator();
|
||||
const promptRecommendations = await promptGen.generatePromptFiles(promptsDir, options.selectedModules || []);
|
||||
const promptCount = Object.keys(promptRecommendations).length;
|
||||
|
||||
// Configure VS Code settings using pre-collected config if available
|
||||
const config = options.preCollectedConfig || {};
|
||||
await this.configureVsCodeSettings(projectDir, { ...options, ...config, promptRecommendations });
|
||||
|
||||
console.log(chalk.green(`✓ ${this.name} configured:`));
|
||||
console.log(chalk.dim(` - ${agentCount} agents created`));
|
||||
console.log(chalk.dim(` - ${promptCount} workflow prompts configured`));
|
||||
console.log(chalk.dim(` - Agents directory: ${path.relative(projectDir, agentsDir)}`));
|
||||
console.log(chalk.dim(` - Prompts directory: ${path.relative(projectDir, promptsDir)}`));
|
||||
console.log(chalk.dim(` - VS Code settings configured`));
|
||||
console.log(chalk.dim('\n Agents available in VS Code Chat view'));
|
||||
console.log(chalk.dim(' Workflow prompts show as new chat starters'));
|
||||
|
||||
return {
|
||||
success: true,
|
||||
agents: agentCount,
|
||||
prompts: promptCount,
|
||||
settings: true,
|
||||
};
|
||||
}
|
||||
|
|
@ -199,6 +214,11 @@ class GitHubCopilotSetup extends BaseIdeSetup {
|
|||
};
|
||||
}
|
||||
|
||||
// Add prompt file recommendations for new chat starters
|
||||
if (options.promptRecommendations && Object.keys(options.promptRecommendations).length > 0) {
|
||||
bmadSettings['chat.promptFilesRecommendations'] = options.promptRecommendations;
|
||||
}
|
||||
|
||||
// Merge settings (existing take precedence)
|
||||
const mergedSettings = { ...bmadSettings, ...existingSettings };
|
||||
|
||||
|
|
@ -307,6 +327,24 @@ ${cleanContent}
|
|||
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD agents`));
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up prompts directory
|
||||
const promptsDir = path.join(projectDir, this.configDir, this.promptsDir);
|
||||
if (await fs.pathExists(promptsDir)) {
|
||||
const files = await fs.readdir(promptsDir);
|
||||
let removed = 0;
|
||||
|
||||
for (const file of files) {
|
||||
if (file.startsWith('bmd-') && file.endsWith('.prompt.md')) {
|
||||
await fs.remove(path.join(promptsDir, file));
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
|
||||
if (removed > 0) {
|
||||
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD prompt files`));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
const path = require('node:path');
|
||||
const fs = require('fs-extra');
|
||||
const { workflowPromptsConfig } = require('./workflow-prompts-config');
|
||||
|
||||
/**
|
||||
* Generate workflow prompt recommendations for IDE new chat starters
|
||||
* Uses static configuration from workflow-prompts-config.js which mirrors
|
||||
* the workflows documented in quick-start.md
|
||||
*
|
||||
* The implementation-readiness and sprint-planning workflows update
|
||||
* VS Code settings to toggle which prompts are shown based on project phase.
|
||||
*/
|
||||
class WorkflowPromptGenerator {
|
||||
/**
|
||||
* Get workflow prompts for selected modules
|
||||
* @param {Array<string>} selectedModules - Modules to include (e.g., ['bmm', 'bmgd'])
|
||||
* @returns {Array<Object>} Array of workflow prompt configurations
|
||||
*/
|
||||
getWorkflowPrompts(selectedModules = []) {
|
||||
const allPrompts = [];
|
||||
|
||||
// Always include core prompts
|
||||
if (workflowPromptsConfig.core) {
|
||||
allPrompts.push(...workflowPromptsConfig.core);
|
||||
}
|
||||
|
||||
// Add prompts for each selected module
|
||||
for (const moduleName of selectedModules) {
|
||||
if (workflowPromptsConfig[moduleName]) {
|
||||
allPrompts.push(...workflowPromptsConfig[moduleName]);
|
||||
}
|
||||
}
|
||||
|
||||
return allPrompts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate prompt files for an IDE
|
||||
* @param {string} promptsDir - Directory to write prompt files
|
||||
* @param {Array<string>} selectedModules - Modules to include
|
||||
* @returns {Object} Map of prompt names to true for VS Code settings
|
||||
*/
|
||||
async generatePromptFiles(promptsDir, selectedModules = []) {
|
||||
const prompts = this.getWorkflowPrompts(selectedModules);
|
||||
const recommendations = {};
|
||||
|
||||
for (const prompt of prompts) {
|
||||
const promptContent = ['---', `agent: ${prompt.agent}`, `description: "${prompt.description}"`, '---', '', prompt.prompt, ''].join(
|
||||
'\n',
|
||||
);
|
||||
|
||||
const promptFilePath = path.join(promptsDir, `bmd-${prompt.name}.prompt.md`);
|
||||
await fs.writeFile(promptFilePath, promptContent);
|
||||
recommendations[`bmd-${prompt.name}`] = true;
|
||||
}
|
||||
|
||||
return recommendations;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { WorkflowPromptGenerator };
|
||||
|
|
@ -0,0 +1,192 @@
|
|||
/**
|
||||
* Workflow prompt configuration for IDE new chat starters
|
||||
*
|
||||
* This configuration defines the workflow prompts that appear as suggestions
|
||||
* when starting a new chat in VS Code (via chat.promptFilesRecommendations).
|
||||
*
|
||||
* The implementation-readiness and sprint-planning workflows update the
|
||||
* VS Code settings to toggle which prompts are shown based on project phase.
|
||||
*
|
||||
* Reference: docs/modules/bmm-bmad-method/quick-start.md
|
||||
*/
|
||||
|
||||
const workflowPromptsConfig = {
|
||||
// BMad Method Module (bmm) - Standard development workflow
|
||||
bmm: [
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Phase 1 - Analysis (Optional)
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
{
|
||||
name: 'workflow-init',
|
||||
agent: 'bmd-custom-bmm-analyst',
|
||||
shortcut: 'WI',
|
||||
description: '[WI] Initialize workflow and choose planning track',
|
||||
prompt: '*workflow-init',
|
||||
},
|
||||
{
|
||||
name: 'brainstorm',
|
||||
agent: 'bmd-custom-bmm-analyst',
|
||||
shortcut: 'BP',
|
||||
description: '[BP] Brainstorm project ideas and concepts',
|
||||
prompt: '*brainstorm-project',
|
||||
},
|
||||
{
|
||||
name: 'workflow-status',
|
||||
agent: 'bmd-custom-bmm-pm',
|
||||
shortcut: 'WS',
|
||||
description: '[WS] Check current workflow status and next steps',
|
||||
prompt: '*workflow-status',
|
||||
},
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Phase 2 - Planning (Required)
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
{
|
||||
name: 'prd',
|
||||
agent: 'bmd-custom-bmm-pm',
|
||||
shortcut: 'PR',
|
||||
description: '[PR] Create Product Requirements Document (PRD)',
|
||||
prompt: '*prd',
|
||||
},
|
||||
{
|
||||
name: 'ux-design',
|
||||
agent: 'bmd-custom-bmm-ux-designer',
|
||||
shortcut: 'UD',
|
||||
description: '[UD] Create UX Design specification',
|
||||
prompt: '*ux-design',
|
||||
},
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Phase 3 - Solutioning
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
{
|
||||
name: 'create-architecture',
|
||||
agent: 'bmd-custom-bmm-architect',
|
||||
shortcut: 'CA',
|
||||
description: '[CA] Create system architecture document',
|
||||
prompt: '*create-architecture',
|
||||
},
|
||||
{
|
||||
name: 'epics-stories',
|
||||
agent: 'bmd-custom-bmm-pm',
|
||||
shortcut: 'ES',
|
||||
description: '[ES] Create Epics and User Stories from PRD',
|
||||
prompt: '*epics-stories',
|
||||
},
|
||||
{
|
||||
name: 'implementation-readiness',
|
||||
agent: 'bmd-custom-bmm-architect',
|
||||
shortcut: 'IR',
|
||||
description: '[IR] Check implementation readiness across all docs',
|
||||
prompt: '*implementation-readiness',
|
||||
},
|
||||
{
|
||||
name: 'sprint-planning',
|
||||
agent: 'bmd-custom-bmm-sm',
|
||||
shortcut: 'SP',
|
||||
description: '[SP] Initialize sprint planning from epics',
|
||||
prompt: '*sprint-planning',
|
||||
},
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
// Phase 4 - Implementation: The "Keep Going" Cycle
|
||||
// New chat → SM → create-story → New chat → DEV → dev-story → code-review
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
{
|
||||
name: 'create-story',
|
||||
agent: 'bmd-custom-bmm-sm',
|
||||
shortcut: 'CS',
|
||||
description: '[CS] Create developer-ready story from epic',
|
||||
prompt: '*create-story',
|
||||
},
|
||||
{
|
||||
name: 'dev-story',
|
||||
agent: 'bmd-custom-bmm-dev',
|
||||
shortcut: 'DS',
|
||||
description: '[DS] Implement the current story',
|
||||
prompt: '*dev-story',
|
||||
},
|
||||
{
|
||||
name: 'code-review',
|
||||
agent: 'bmd-custom-bmm-dev',
|
||||
shortcut: 'CR',
|
||||
description: '[CR] Perform code review on implementation',
|
||||
prompt: '*code-review',
|
||||
},
|
||||
{
|
||||
name: 'retrospective',
|
||||
agent: 'bmd-custom-bmm-sm',
|
||||
shortcut: 'ER',
|
||||
description: '[ER] Run epic retrospective after completion',
|
||||
prompt: '*epic-retrospective',
|
||||
},
|
||||
{
|
||||
name: 'correct-course',
|
||||
agent: 'bmd-custom-bmm-sm',
|
||||
shortcut: 'CC',
|
||||
description: '[CC] Course correction when things go off track',
|
||||
prompt: '*correct-course',
|
||||
},
|
||||
],
|
||||
|
||||
// BMad Game Development Module (bmgd)
|
||||
bmgd: [
|
||||
// Implementation cycle
|
||||
{
|
||||
name: 'game-implement',
|
||||
agent: 'bmd-custom-bmgd-game-dev',
|
||||
shortcut: 'GI',
|
||||
description: '[GI] Implement game feature',
|
||||
prompt: '*game-implement',
|
||||
},
|
||||
{
|
||||
name: 'game-qa',
|
||||
agent: 'bmd-custom-bmgd-game-qa',
|
||||
shortcut: 'GQ',
|
||||
description: '[GQ] Test and QA game feature',
|
||||
prompt: '*game-qa',
|
||||
},
|
||||
// Planning & Design
|
||||
{
|
||||
name: 'game-design',
|
||||
agent: 'bmd-custom-bmgd-game-designer',
|
||||
shortcut: 'GD',
|
||||
description: '[GD] Design game mechanics and systems',
|
||||
prompt: '*game-design',
|
||||
},
|
||||
{
|
||||
name: 'game-architecture',
|
||||
agent: 'bmd-custom-bmgd-game-architect',
|
||||
shortcut: 'GA',
|
||||
description: '[GA] Create game technical architecture',
|
||||
prompt: '*game-architecture',
|
||||
},
|
||||
{
|
||||
name: 'game-sprint',
|
||||
agent: 'bmd-custom-bmgd-game-scrum-master',
|
||||
shortcut: 'GS',
|
||||
description: '[GS] Plan game development sprint',
|
||||
prompt: '*game-sprint',
|
||||
},
|
||||
],
|
||||
|
||||
// Core agents (always available)
|
||||
core: [
|
||||
{
|
||||
name: 'list-tasks',
|
||||
agent: 'bmd-custom-core-bmad-master',
|
||||
shortcut: 'LT',
|
||||
description: '[LT] List available tasks',
|
||||
prompt: '*list-tasks',
|
||||
},
|
||||
{
|
||||
name: 'list-workflows',
|
||||
agent: 'bmd-custom-core-bmad-master',
|
||||
shortcut: 'LW',
|
||||
description: '[LW] List available workflows',
|
||||
prompt: '*list-workflows',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
module.exports = { workflowPromptsConfig };
|
||||
Loading…
Reference in New Issue