specweave 0.23.12 → 0.23.16

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.
Files changed (90) hide show
  1. package/CLAUDE.md +55 -0
  2. package/dist/src/core/progress/error-logger.d.ts +58 -0
  3. package/dist/src/core/progress/error-logger.d.ts.map +1 -0
  4. package/dist/src/core/progress/error-logger.js +99 -0
  5. package/dist/src/core/progress/error-logger.js.map +1 -0
  6. package/dist/src/core/spec-detector.d.ts +5 -0
  7. package/dist/src/core/spec-detector.d.ts.map +1 -1
  8. package/dist/src/core/spec-detector.js +91 -33
  9. package/dist/src/core/spec-detector.js.map +1 -1
  10. package/package.json +1 -1
  11. package/plugins/specweave/hooks/docs-changed.sh +9 -1
  12. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  13. package/plugins/specweave/hooks/human-input-required.sh +9 -1
  14. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  15. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  16. package/plugins/specweave/hooks/post-increment-change.sh +6 -1
  17. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  18. package/plugins/specweave/hooks/post-increment-completion.sh +6 -1
  19. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  20. package/plugins/specweave/hooks/post-increment-planning.sh +6 -1
  21. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  22. package/plugins/specweave/hooks/post-increment-status-change.sh +6 -1
  23. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  24. package/plugins/specweave/hooks/post-metadata-change.sh +7 -1
  25. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  26. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  27. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  28. package/plugins/specweave/hooks/pre-implementation.sh +9 -1
  29. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  30. package/plugins/specweave/hooks/pre-task-completion.sh +9 -1
  31. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  32. package/plugins/specweave/hooks/pre-tool-use.sh +9 -1
  33. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  34. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  35. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +9 -2
  36. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  37. package/plugins/specweave-ado/hooks/post-task-completion.sh +9 -1
  38. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  39. package/plugins/specweave-github/.claude-plugin/plugin.json +15 -1
  40. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +16 -0
  41. package/plugins/specweave-github/hooks/post-task-completion.sh +62 -1
  42. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  43. package/plugins/specweave-jira/hooks/post-task-completion.sh +9 -1
  44. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  45. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +48 -0
  46. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
  47. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +0 -21
  48. package/plugins/specweave-alternatives/skills/bmad-method-expert/SKILL.md +0 -626
  49. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  50. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  51. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  52. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  53. package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +0 -1010
  54. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +0 -20
  55. package/plugins/specweave-cost-optimizer/skills/cost-optimizer/SKILL.md +0 -190
  56. package/plugins/specweave-docs/.claude-plugin/plugin.json +0 -19
  57. package/plugins/specweave-docs/skills/docusaurus/SKILL.md +0 -613
  58. package/plugins/specweave-docs/skills/spec-driven-brainstorming/README.md +0 -264
  59. package/plugins/specweave-docs/skills/spec-driven-brainstorming/SKILL.md +0 -439
  60. package/plugins/specweave-docs/skills/spec-driven-debugging/README.md +0 -479
  61. package/plugins/specweave-docs/skills/spec-driven-debugging/SKILL.md +0 -652
  62. package/plugins/specweave-figma/.claude-plugin/.mcp.json +0 -12
  63. package/plugins/specweave-figma/.claude-plugin/plugin.json +0 -20
  64. package/plugins/specweave-figma/ARCHITECTURE.md +0 -453
  65. package/plugins/specweave-figma/README.md +0 -728
  66. package/plugins/specweave-figma/skills/figma-to-code/SKILL.md +0 -632
  67. package/plugins/specweave-figma/skills/figma-to-code/test-1-token-generation.yaml +0 -29
  68. package/plugins/specweave-figma/skills/figma-to-code/test-2-component-generation.yaml +0 -27
  69. package/plugins/specweave-figma/skills/figma-to-code/test-3-typescript-generation.yaml +0 -28
  70. package/plugins/specweave-frontend/.claude-plugin/plugin.json +0 -21
  71. package/plugins/specweave-frontend/skills/design-system-architect/SKILL.md +0 -107
  72. package/plugins/specweave-frontend/skills/frontend/SKILL.md +0 -177
  73. package/plugins/specweave-frontend/skills/nextjs/SKILL.md +0 -176
  74. package/plugins/specweave-testing/.claude-plugin/plugin.json +0 -20
  75. package/plugins/specweave-testing/skills/e2e-playwright/README.md +0 -506
  76. package/plugins/specweave-testing/skills/e2e-playwright/SKILL.md +0 -457
  77. package/plugins/specweave-testing/skills/e2e-playwright/execute.js +0 -373
  78. package/plugins/specweave-testing/skills/e2e-playwright/lib/utils.js +0 -514
  79. package/plugins/specweave-testing/skills/e2e-playwright/package.json +0 -33
  80. package/plugins/specweave-tooling/.claude-plugin/plugin.json +0 -19
  81. package/plugins/specweave-tooling/skills/skill-creator/LICENSE.txt +0 -202
  82. package/plugins/specweave-tooling/skills/skill-creator/SKILL.md +0 -209
  83. package/plugins/specweave-tooling/skills/skill-creator/scripts/init_skill.py +0 -303
  84. package/plugins/specweave-tooling/skills/skill-creator/scripts/package_skill.py +0 -110
  85. package/plugins/specweave-tooling/skills/skill-creator/scripts/quick_validate.py +0 -65
  86. package/plugins/specweave-tooling/skills/skill-router/SKILL.md +0 -479
  87. package/plugins/specweave-ui/.claude-plugin/plugin.json +0 -26
  88. package/plugins/specweave-ui/.mcp.json +0 -10
  89. package/plugins/specweave-ui/README.md +0 -492
  90. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +0 -676
@@ -1,318 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * BMAD Project Analyzer
5
- *
6
- * Analyzes a BMAD-METHOD project structure and provides health assessment
7
- * and recommendations.
8
- */
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
-
13
- class BMADProjectAnalyzer {
14
- constructor(projectPath = process.cwd()) {
15
- this.projectPath = projectPath;
16
- this.issues = [];
17
- this.warnings = [];
18
- this.info = [];
19
- this.structure = {
20
- hasBmadCore: false,
21
- hasDocs: false,
22
- hasPRD: false,
23
- hasArchitecture: false,
24
- hasEpics: false,
25
- hasStories: false,
26
- hasQA: false,
27
- hasTechnicalPreferences: false,
28
- hasCoreConfig: false,
29
- nodeModules: false,
30
- packageJson: false
31
- };
32
- }
33
-
34
- checkPath(relativePath) {
35
- const fullPath = path.join(this.projectPath, relativePath);
36
- return fs.existsSync(fullPath);
37
- }
38
-
39
- readFile(relativePath) {
40
- try {
41
- const fullPath = path.join(this.projectPath, relativePath);
42
- return fs.readFileSync(fullPath, 'utf-8');
43
- } catch (error) {
44
- return null;
45
- }
46
- }
47
-
48
- countFiles(dirPath) {
49
- try {
50
- const fullPath = path.join(this.projectPath, dirPath);
51
- if (!fs.existsSync(fullPath)) return 0;
52
- const files = fs.readdirSync(fullPath);
53
- return files.filter(f => !f.startsWith('.')).length;
54
- } catch (error) {
55
- return 0;
56
- }
57
- }
58
-
59
- analyzeStructure() {
60
- console.log('\n🔍 Analyzing BMAD Project Structure...\n');
61
-
62
- // Check core BMAD structure
63
- this.structure.hasBmadCore = this.checkPath('bmad-core');
64
- this.structure.hasDocs = this.checkPath('docs');
65
- this.structure.hasPRD = this.checkPath('docs/prd.md');
66
- this.structure.hasArchitecture = this.checkPath('docs/architecture.md');
67
- this.structure.hasEpics = this.checkPath('docs/epics');
68
- this.structure.hasStories = this.checkPath('docs/stories');
69
- this.structure.hasQA = this.checkPath('docs/qa');
70
- this.structure.hasTechnicalPreferences = this.checkPath('.bmad-core/data/technical-preferences.md');
71
- this.structure.hasCoreConfig = this.checkPath('.bmad-core/core-config.yaml');
72
- this.structure.packageJson = this.checkPath('package.json');
73
- this.structure.nodeModules = this.checkPath('node_modules');
74
-
75
- // Core structure checks
76
- if (!this.structure.hasBmadCore && !this.structure.hasDocs) {
77
- this.issues.push('No BMAD structure detected. Run: npx bmad-method install');
78
- return; // Early return if not a BMAD project
79
- }
80
-
81
- if (this.structure.hasBmadCore) {
82
- this.info.push('✓ bmad-core/ directory found');
83
- } else {
84
- this.warnings.push('⚠ bmad-core/ directory not found - custom setup?');
85
- }
86
-
87
- if (this.structure.hasDocs) {
88
- this.info.push('✓ docs/ directory found');
89
- } else {
90
- this.warnings.push('⚠ docs/ directory not found - create with: mkdir docs');
91
- }
92
-
93
- // Planning artifacts
94
- if (this.structure.hasPRD) {
95
- const prdContent = this.readFile('docs/prd.md');
96
- const prdSize = prdContent ? prdContent.length : 0;
97
- this.info.push(`✓ PRD found (${(prdSize / 1024).toFixed(1)}KB)`);
98
- } else {
99
- this.info.push('ℹ No PRD yet - use @pm to create one');
100
- }
101
-
102
- if (this.structure.hasArchitecture) {
103
- const archContent = this.readFile('docs/architecture.md');
104
- const archSize = archContent ? archContent.length : 0;
105
- this.info.push(`✓ Architecture document found (${(archSize / 1024).toFixed(1)}KB)`);
106
- } else {
107
- this.info.push('ℹ No architecture document - use @architect to create one');
108
- }
109
-
110
- // Development artifacts
111
- const epicCount = this.countFiles('docs/epics');
112
- const storyCount = this.countFiles('docs/stories');
113
- const qaCount = this.countFiles('docs/qa/assessments');
114
-
115
- if (epicCount > 0) {
116
- this.info.push(`✓ ${epicCount} epic(s) found`);
117
- } else {
118
- this.info.push('ℹ No epics yet - use @po to shard PRD into epics');
119
- }
120
-
121
- if (storyCount > 0) {
122
- this.info.push(`✓ ${storyCount} user story(ies) found`);
123
- } else {
124
- this.info.push('ℹ No user stories yet - use @pm or @scrum to create stories');
125
- }
126
-
127
- if (qaCount > 0) {
128
- this.info.push(`✓ ${qaCount} QA assessment(s) found`);
129
- } else if (storyCount > 0) {
130
- this.warnings.push('⚠ Stories exist but no QA assessments - consider using @qa *risk and @qa *design');
131
- }
132
-
133
- // Configuration
134
- if (this.structure.hasTechnicalPreferences) {
135
- this.info.push('✓ Technical preferences configured');
136
- } else {
137
- this.warnings.push('⚠ No technical-preferences.md - consider creating one for consistent tech stack decisions');
138
- }
139
-
140
- if (this.structure.hasCoreConfig) {
141
- this.info.push('✓ Core configuration found');
142
- } else {
143
- this.warnings.push('⚠ No core-config.yaml found');
144
- }
145
-
146
- // Node.js setup
147
- if (this.structure.packageJson) {
148
- this.info.push('✓ package.json found');
149
- }
150
-
151
- if (this.structure.nodeModules) {
152
- this.info.push('✓ Dependencies installed');
153
- } else if (this.structure.packageJson) {
154
- this.warnings.push('⚠ package.json exists but node_modules missing - run: npm install');
155
- }
156
- }
157
-
158
- analyzeDocumentAlignment() {
159
- if (!this.structure.hasPRD || !this.structure.hasArchitecture) {
160
- return; // Can't check alignment without both documents
161
- }
162
-
163
- console.log('\n📋 Analyzing Document Alignment...\n');
164
-
165
- const prd = this.readFile('docs/prd.md');
166
- const arch = this.readFile('docs/architecture.md');
167
-
168
- // Basic checks for alignment
169
- const prdSections = this.extractSections(prd);
170
- const archSections = this.extractSections(arch);
171
-
172
- // Check if architecture references key PRD elements
173
- const prdHasEpics = /##\s*Epics/i.test(prd);
174
- const prdHasUserStories = /##\s*User Stories/i.test(prd);
175
- const archHasSystemDesign = /##\s*(System Design|Architecture Overview)/i.test(arch);
176
- const archHasTechStack = /##\s*(Tech(nology)? Stack|Technical Stack)/i.test(arch);
177
-
178
- if (prdHasEpics) {
179
- this.info.push('✓ PRD contains Epics section');
180
- }
181
-
182
- if (prdHasUserStories) {
183
- this.info.push('✓ PRD contains User Stories section');
184
- }
185
-
186
- if (archHasSystemDesign) {
187
- this.info.push('✓ Architecture has System Design section');
188
- } else {
189
- this.warnings.push('⚠ Architecture should include System Design section');
190
- }
191
-
192
- if (archHasTechStack) {
193
- this.info.push('✓ Architecture specifies Tech Stack');
194
- } else {
195
- this.warnings.push('⚠ Architecture should specify Technology Stack');
196
- }
197
-
198
- // Check document sizes - PRD and Architecture should be substantial
199
- if (prd.length < 2000) {
200
- this.warnings.push('⚠ PRD seems short (<2KB) - ensure it\'s comprehensive');
201
- }
202
-
203
- if (arch.length < 1500) {
204
- this.warnings.push('⚠ Architecture document seems short (<1.5KB) - ensure it\'s detailed');
205
- }
206
- }
207
-
208
- extractSections(markdown) {
209
- const sections = [];
210
- const lines = markdown.split('\n');
211
- for (const line of lines) {
212
- const match = line.match(/^#+\s+(.+)$/);
213
- if (match) {
214
- sections.push(match[1].trim());
215
- }
216
- }
217
- return sections;
218
- }
219
-
220
- analyzeWorkflowProgress() {
221
- console.log('\n📊 Workflow Progress Assessment...\n');
222
-
223
- const hasPRD = this.structure.hasPRD;
224
- const hasArch = this.structure.hasArchitecture;
225
- const hasEpics = this.structure.hasEpics && this.countFiles('docs/epics') > 0;
226
- const hasStories = this.structure.hasStories && this.countFiles('docs/stories') > 0;
227
- const hasQA = this.structure.hasQA && this.countFiles('docs/qa/assessments') > 0;
228
-
229
- let phase = 'Not Started';
230
- let nextSteps = [];
231
-
232
- if (!hasPRD && !hasArch) {
233
- phase = 'Planning Phase - Not Started';
234
- nextSteps = [
235
- '1. Create project brief',
236
- '2. Use @pm to create PRD',
237
- '3. Use @architect to design architecture',
238
- '4. Use @po to validate alignment'
239
- ];
240
- } else if (hasPRD && !hasArch) {
241
- phase = 'Planning Phase - PRD Created';
242
- nextSteps = [
243
- '1. Use @architect to design system architecture',
244
- '2. Use @po to validate PRD/Architecture alignment',
245
- '3. Use @po to shard documents into epics/stories'
246
- ];
247
- } else if (hasPRD && hasArch && !hasEpics) {
248
- phase = 'Planning Phase - Documents Complete';
249
- nextSteps = [
250
- '1. Use @po to validate document alignment',
251
- '2. Use @po to shard PRD into epics and stories',
252
- '3. Transition to IDE for development phase'
253
- ];
254
- } else if (hasEpics && !hasStories) {
255
- phase = 'Development Preparation';
256
- nextSteps = [
257
- '1. Use @pm or @scrum to create user stories from epics',
258
- '2. Use @qa *risk to assess story risks',
259
- '3. Use @qa *design to create test strategies'
260
- ];
261
- } else if (hasStories && !hasQA) {
262
- phase = 'Development Phase - Stories Ready';
263
- nextSteps = [
264
- '1. Use @qa *risk {story} for risk assessment',
265
- '2. Use @qa *design {story} for test strategy',
266
- '3. Use @dev to implement first story',
267
- '4. Use @qa *review after implementation'
268
- ];
269
- } else if (hasStories && hasQA) {
270
- phase = 'Development Phase - Active';
271
- nextSteps = [
272
- '1. Continue iterative development cycle',
273
- '2. Use @dev to implement stories',
274
- '3. Use @qa *review for quality checks',
275
- '4. Commit and move to next story'
276
- ];
277
- }
278
-
279
- console.log(`Current Phase: ${phase}\n`);
280
- console.log('Recommended Next Steps:');
281
- nextSteps.forEach(step => console.log(` ${step}`));
282
- }
283
-
284
- generateReport() {
285
- console.log('\n═══════════════════════════════════════════════════════');
286
- console.log(' BMAD-METHOD PROJECT ANALYSIS REPORT');
287
- console.log('═══════════════════════════════════════════════════════');
288
- console.log(`\nProject Path: ${this.projectPath}\n`);
289
-
290
- this.analyzeStructure();
291
- this.analyzeDocumentAlignment();
292
- this.analyzeWorkflowProgress();
293
-
294
- if (this.issues.length > 0) {
295
- console.log('\n🚨 ISSUES:\n');
296
- this.issues.forEach(issue => console.log(` ${issue}`));
297
- }
298
-
299
- if (this.warnings.length > 0) {
300
- console.log('\n⚠️ WARNINGS:\n');
301
- this.warnings.forEach(warning => console.log(` ${warning}`));
302
- }
303
-
304
- if (this.info.length > 0) {
305
- console.log('\nℹ️ INFO:\n');
306
- this.info.forEach(info => console.log(` ${info}`));
307
- }
308
-
309
- console.log('\n═══════════════════════════════════════════════════════');
310
- console.log(' ANALYSIS COMPLETE');
311
- console.log('═══════════════════════════════════════════════════════\n');
312
- }
313
- }
314
-
315
- // Main execution
316
- const projectPath = process.argv[2] || process.cwd();
317
- const analyzer = new BMADProjectAnalyzer(projectPath);
318
- analyzer.generateReport();
@@ -1,208 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * BMAD Setup Checker
5
- *
6
- * Verifies BMAD-METHOD installation and configuration
7
- */
8
-
9
- const { execSync } = require('child_process');
10
- const fs = require('fs');
11
- const path = require('path');
12
-
13
- class BMADSetupChecker {
14
- constructor() {
15
- this.checks = [];
16
- this.issues = [];
17
- this.warnings = [];
18
- }
19
-
20
- checkNodeVersion() {
21
- try {
22
- const version = process.version;
23
- const majorVersion = parseInt(version.slice(1).split('.')[0]);
24
-
25
- if (majorVersion >= 20) {
26
- this.checks.push(`✓ Node.js ${version} (required: v20+)`);
27
- } else {
28
- this.issues.push(`✗ Node.js ${version} is too old. Required: v20+`);
29
- }
30
- } catch (error) {
31
- this.issues.push('✗ Could not determine Node.js version');
32
- }
33
- }
34
-
35
- checkNpmAvailable() {
36
- try {
37
- const version = execSync('npm --version', { encoding: 'utf-8' }).trim();
38
- this.checks.push(`✓ npm ${version}`);
39
- } catch (error) {
40
- this.issues.push('✗ npm not found. Install Node.js from https://nodejs.org/');
41
- }
42
- }
43
-
44
- checkBMADInstallation() {
45
- const homeDir = require('os').homedir();
46
- const bmadPaths = [
47
- path.join(process.cwd(), 'bmad-core'),
48
- path.join(process.cwd(), '.bmad-core'),
49
- path.join(homeDir, '.bmad'),
50
- ];
51
-
52
- let found = false;
53
- for (const bmadPath of bmadPaths) {
54
- if (fs.existsSync(bmadPath)) {
55
- this.checks.push(`✓ BMAD installation found at ${bmadPath}`);
56
- found = true;
57
- break;
58
- }
59
- }
60
-
61
- if (!found) {
62
- this.warnings.push('⚠ BMAD installation not found in current directory');
63
- this.warnings.push(' Run: npx bmad-method install');
64
- }
65
- }
66
-
67
- checkGitAvailable() {
68
- try {
69
- const version = execSync('git --version', { encoding: 'utf-8' }).trim();
70
- this.checks.push(`✓ ${version}`);
71
- } catch (error) {
72
- this.warnings.push('⚠ git not found - recommended for version control');
73
- }
74
- }
75
-
76
- checkIDEIntegration() {
77
- const ideMarkers = {
78
- 'VS Code': ['.vscode'],
79
- 'Cursor': ['.cursor', '.cursorrules'],
80
- 'WebStorm': ['.idea']
81
- };
82
-
83
- let foundIDE = false;
84
- for (const [ide, markers] of Object.entries(ideMarkers)) {
85
- for (const marker of markers) {
86
- if (fs.existsSync(path.join(process.cwd(), marker))) {
87
- this.checks.push(`✓ ${ide} integration detected`);
88
- foundIDE = true;
89
- break;
90
- }
91
- }
92
- }
93
-
94
- if (!foundIDE) {
95
- this.warnings.push('⚠ No IDE integration detected - BMAD works best with IDE integration');
96
- }
97
- }
98
-
99
- checkProjectStructure() {
100
- const requiredDirs = ['docs'];
101
- const optionalDirs = ['bmad-core', 'expansion-packs', 'dist', 'tools'];
102
-
103
- for (const dir of requiredDirs) {
104
- if (fs.existsSync(path.join(process.cwd(), dir))) {
105
- this.checks.push(`✓ ${dir}/ directory exists`);
106
- } else {
107
- this.warnings.push(`⚠ ${dir}/ directory not found - create with: mkdir ${dir}`);
108
- }
109
- }
110
-
111
- for (const dir of optionalDirs) {
112
- if (fs.existsSync(path.join(process.cwd(), dir))) {
113
- this.checks.push(`✓ ${dir}/ directory exists`);
114
- }
115
- }
116
- }
117
-
118
- checkConfiguration() {
119
- const configFiles = [
120
- '.bmad-core/core-config.yaml',
121
- '.bmad-core/data/technical-preferences.md',
122
- 'package.json'
123
- ];
124
-
125
- for (const configFile of configFiles) {
126
- const fullPath = path.join(process.cwd(), configFile);
127
- if (fs.existsSync(fullPath)) {
128
- const stats = fs.statSync(fullPath);
129
- this.checks.push(`✓ ${configFile} (${(stats.size / 1024).toFixed(1)}KB)`);
130
- } else {
131
- if (configFile === 'package.json') {
132
- this.warnings.push(`⚠ ${configFile} not found - run: npm init`);
133
- } else {
134
- this.warnings.push(`⚠ ${configFile} not found`);
135
- }
136
- }
137
- }
138
- }
139
-
140
- checkBMADCommand() {
141
- try {
142
- // Try to check if bmad-method is available
143
- execSync('npx bmad-method --version', {
144
- encoding: 'utf-8',
145
- stdio: 'pipe'
146
- });
147
- this.checks.push('✓ bmad-method CLI accessible via npx');
148
- } catch (error) {
149
- // This is not necessarily an error, just means it's not cached
150
- this.warnings.push('⚠ bmad-method not cached - first run will download it');
151
- }
152
- }
153
-
154
- generateReport() {
155
- console.log('\n═══════════════════════════════════════════════════════');
156
- console.log(' BMAD-METHOD SETUP VERIFICATION');
157
- console.log('═══════════════════════════════════════════════════════\n');
158
-
159
- console.log('Running setup checks...\n');
160
-
161
- this.checkNodeVersion();
162
- this.checkNpmAvailable();
163
- this.checkBMADInstallation();
164
- this.checkGitAvailable();
165
- this.checkIDEIntegration();
166
- this.checkProjectStructure();
167
- this.checkConfiguration();
168
- this.checkBMADCommand();
169
-
170
- if (this.checks.length > 0) {
171
- console.log('✅ PASSED CHECKS:\n');
172
- this.checks.forEach(check => console.log(` ${check}`));
173
- }
174
-
175
- if (this.warnings.length > 0) {
176
- console.log('\n⚠️ WARNINGS:\n');
177
- this.warnings.forEach(warning => console.log(` ${warning}`));
178
- }
179
-
180
- if (this.issues.length > 0) {
181
- console.log('\n🚨 ISSUES:\n');
182
- this.issues.forEach(issue => console.log(` ${issue}`));
183
- }
184
-
185
- console.log('\n═══════════════════════════════════════════════════════');
186
-
187
- if (this.issues.length === 0) {
188
- console.log(' ✓ SETUP VERIFICATION PASSED');
189
- } else {
190
- console.log(' ⚠ SETUP ISSUES DETECTED - SEE ABOVE');
191
- }
192
-
193
- console.log('═══════════════════════════════════════════════════════\n');
194
-
195
- if (this.issues.length === 0 && this.warnings.length === 0) {
196
- console.log('🎉 Your BMAD-METHOD setup looks good!\n');
197
- console.log('Next steps:');
198
- console.log(' 1. Create a project brief');
199
- console.log(' 2. Use @pm to create a PRD');
200
- console.log(' 3. Use @architect to design architecture');
201
- console.log(' 4. Start developing!\n');
202
- }
203
- }
204
- }
205
-
206
- // Main execution
207
- const checker = new BMADSetupChecker();
208
- checker.generateReport();