diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md index aa78c14f..f19d077b 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md @@ -111,6 +111,29 @@ Report generated: {outputFile} The assessment found [number] issues requiring attention. Review the detailed report for specific findings and recommendations." +### 6. Update IDE Prompt Recommendations + +If the readiness status is **READY**, update `.vscode/settings.json` to prioritize the implementation cycle prompts. + +Read the existing `chat.promptFilesRecommendations` object and modify these keys: + +**Set to `true` (implementation cycle - "keep going" loop):** +- `bmd-create-story` +- `bmd-dev-story` +- `bmd-code-review` +- `bmd-retrospective` +- `bmd-correct-course` + +**Set 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` + ## WORKFLOW COMPLETE The implementation readiness workflow is now complete. The report contains all findings and recommendations for the user to consider. diff --git a/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md b/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md index c4f4bd42..88addaab 100644 --- a/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +++ b/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md @@ -179,6 +179,38 @@ development_status: + +Read the existing `.vscode/settings.json` and update the `chat.promptFilesRecommendations` object. + +**Set to `true` (implementation cycle - "keep going" loop):** +- `bmd-create-story` +- `bmd-dev-story` +- `bmd-code-review` +- `bmd-retrospective` +- `bmd-correct-course` + +**Set 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` + +Inform {user_name}: + +**IDE Updated for Implementation Phase** + +The "keep going" cycle prompts are now prioritized in VS Code: +- **@bmd-custom-bmm-sm → *create-story** (prepare a story) +- **@bmd-custom-bmm-dev → *dev-story** (implement it) +- **Same chat → *code-review** (review the code) +- **Repeat!** + + + ## Additional Documentation diff --git a/tools/cli/installers/lib/ide/github-copilot.js b/tools/cli/installers/lib/ide/github-copilot.js index b9dd5f98..ba0e18d3 100644 --- a/tools/cli/installers/lib/ide/github-copilot.js +++ b/tools/cli/installers/lib/ide/github-copilot.js @@ -2,6 +2,7 @@ const path = require('node:path'); const { BaseIdeSetup } = require('./_base-ide'); const chalk = require('chalk'); const { AgentCommandGenerator } = require('./shared/agent-command-generator'); +const { WorkflowPromptGenerator } = require('./shared/workflow-prompt-generator'); /** * GitHub Copilot setup handler @@ -12,6 +13,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`)); + } + } } /** diff --git a/tools/cli/installers/lib/ide/shared/workflow-prompt-generator.js b/tools/cli/installers/lib/ide/shared/workflow-prompt-generator.js new file mode 100644 index 00000000..cbc6f320 --- /dev/null +++ b/tools/cli/installers/lib/ide/shared/workflow-prompt-generator.js @@ -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} selectedModules - Modules to include (e.g., ['bmm', 'bmgd']) + * @returns {Array} 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} 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 }; diff --git a/tools/cli/installers/lib/ide/shared/workflow-prompts-config.js b/tools/cli/installers/lib/ide/shared/workflow-prompts-config.js new file mode 100644 index 00000000..f3a3e632 --- /dev/null +++ b/tools/cli/installers/lib/ide/shared/workflow-prompts-config.js @@ -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: 'PD', + description: '[PD] 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 + // SM → create-story → DEV → dev-story → code-review → (create-story | retrospective) + // ═══════════════════════════════════════════════════════════════════════ + { + 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 };