appiq-solution 1.0.2 → 1.0.4

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 (2) hide show
  1. package/appiq-installer.js +698 -143
  2. package/package.json +1 -1
@@ -22,13 +22,20 @@ class AppiqSolutionInstaller {
22
22
  this.config = {
23
23
  version: "1.0.0",
24
24
  projectType: null, // 'greenfield' or 'brownfield'
25
- techStack: {},
25
+ techStack: {
26
+ platform: null, // 'flutter', 'web', 'fullstack', 'api'
27
+ isFlutter: false,
28
+ hasUI: false,
29
+ database: null,
30
+ libraries: []
31
+ },
26
32
  selectedIDEs: [],
27
33
  projectName: null,
28
34
  projectIdea: null,
29
35
  targetUsers: null,
30
36
  projectPlan: null,
31
37
  planApproved: false,
38
+ mcpConfigs: {},
32
39
  };
33
40
  }
34
41
 
@@ -39,8 +46,11 @@ class AppiqSolutionInstaller {
39
46
  console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
40
47
 
41
48
  try {
42
- // Phase 1: Projekt-Typ Detection
43
- await this.detectProjectType();
49
+ // Phase 1: Projekt-Typ Detection
50
+ await this.detectProjectType();
51
+
52
+ // Phase 1.5: Tech Stack Detection (Flutter, Web, etc.)
53
+ await this.detectTechStack();
44
54
 
45
55
  // Phase 2: Projektidee erfassen
46
56
  await this.collectProjectIdea();
@@ -54,25 +64,28 @@ class AppiqSolutionInstaller {
54
64
  // Phase 5: Plan-Freigabe
55
65
  await this.approvePlan();
56
66
 
57
- // Phase 6: Installation
58
- await this.performInstallation();
67
+ // Phase 6: Installation
68
+ await this.performInstallation();
59
69
 
60
- // Phase 7: BMAD Core Configuration Setup
70
+ // Phase 7: MCP Configuration Setup
71
+ await this.setupMCPConfigurations();
72
+
73
+ // Phase 8: BMAD Core Configuration Setup
61
74
  await this.setupBMADCoreConfig();
62
75
 
63
- // Phase 8: Document Templates & Dependencies
76
+ // Phase 9: Document Templates & Dependencies
64
77
  await this.setupDocumentTemplates();
65
78
 
66
- // Phase 9: Agent Dependencies System
79
+ // Phase 10: Agent Dependencies System (+ Flutter Agents)
67
80
  await this.setupAgentDependencies();
68
81
 
69
- // Phase 10: BMAD Orchestration (Full Flow)
82
+ // Phase 11: BMAD Orchestration (Full Flow)
70
83
  await this.setupBMADOrchestration();
71
84
 
72
- // Phase 11: One-Click Setup
85
+ // Phase 12: One-Click Setup
73
86
  await this.setupOneClickWorkflows();
74
87
 
75
- // Phase 12: Simple Instructions
88
+ // Phase 13: Simple Instructions
76
89
  await this.showSimpleInstructions();
77
90
  } catch (error) {
78
91
  console.error(chalk.red("❌ Installation failed:"), error.message);
@@ -189,6 +202,77 @@ class AppiqSolutionInstaller {
189
202
  console.log(chalk.green(`✅ IDEs: ${ideNames}\n`));
190
203
  }
191
204
 
205
+ async detectTechStack() {
206
+ console.log(chalk.yellow("🔍 Tech Stack Detection"));
207
+ console.log(chalk.gray("Analysiere Projekt-Umgebung und Tech Stack...\n"));
208
+
209
+ // Check for Flutter
210
+ const isFlutter = fs.existsSync(path.join(this.projectRoot, 'pubspec.yaml'));
211
+
212
+ // Check for existing web frameworks
213
+ const hasPackageJson = fs.existsSync(path.join(this.projectRoot, 'package.json'));
214
+ let webFramework = null;
215
+
216
+ if (hasPackageJson) {
217
+ try {
218
+ const packageJson = JSON.parse(fs.readFileSync(path.join(this.projectRoot, 'package.json'), 'utf8'));
219
+ if (packageJson.dependencies) {
220
+ const deps = Object.keys(packageJson.dependencies);
221
+ if (deps.includes('next')) webFramework = 'next.js';
222
+ else if (deps.includes('react')) webFramework = 'react';
223
+ else if (deps.includes('vue')) webFramework = 'vue';
224
+ else if (deps.includes('@nuxt/core')) webFramework = 'nuxt.js';
225
+ else if (deps.includes('@angular/core')) webFramework = 'angular';
226
+ }
227
+ } catch (e) {
228
+ // ignore package.json parsing errors
229
+ }
230
+ }
231
+
232
+ // Auto-detect or ask user
233
+ if (isFlutter) {
234
+ console.log(chalk.green("✅ Flutter Projekt erkannt!"));
235
+ this.config.techStack.platform = 'flutter';
236
+ this.config.techStack.isFlutter = true;
237
+ this.config.techStack.hasUI = true;
238
+ console.log(chalk.cyan(" → Dart MCP Server wird konfiguriert"));
239
+ console.log(chalk.cyan(" → Flutter Clean Architecture Agents werden geladen\n"));
240
+ } else if (webFramework) {
241
+ console.log(chalk.green(`✅ ${webFramework} Projekt erkannt!`));
242
+ this.config.techStack.platform = 'web';
243
+ this.config.techStack.hasUI = true;
244
+ console.log(chalk.cyan(" → shadcn/ui + v0.dev Integration wird konfiguriert\n"));
245
+ } else {
246
+ // Ask user for platform
247
+ const { platform } = await inquirer.prompt([
248
+ {
249
+ type: "list",
250
+ name: "platform",
251
+ message: "🎯 Welchen Tech Stack verwenden Sie?",
252
+ choices: [
253
+ { name: "📱 Flutter Mobile App", value: "flutter" },
254
+ { name: "🌐 Web App (React/Next.js/Vue)", value: "web" },
255
+ { name: "🚀 Fullstack (Frontend + Backend)", value: "fullstack" },
256
+ { name: "⚡ API/Backend Only", value: "api" },
257
+ { name: "🤷 Noch nicht sicher", value: "unknown" },
258
+ ],
259
+ },
260
+ ]);
261
+
262
+ this.config.techStack.platform = platform;
263
+ this.config.techStack.isFlutter = platform === 'flutter';
264
+ this.config.techStack.hasUI = ['flutter', 'web', 'fullstack'].includes(platform);
265
+
266
+ if (platform === 'flutter') {
267
+ console.log(chalk.cyan(" → Dart MCP Server wird konfiguriert"));
268
+ console.log(chalk.cyan(" → Flutter Clean Architecture Agents werden geladen"));
269
+ } else if (platform === 'web' || platform === 'fullstack') {
270
+ console.log(chalk.cyan(" → shadcn/ui + v0.dev Integration wird konfiguriert"));
271
+ }
272
+ console.log('');
273
+ }
274
+ }
275
+
192
276
  async collectProjectIdea() {
193
277
  console.log(chalk.yellow("💡 Projektidee erfassen"));
194
278
  console.log(chalk.gray("Beschreiben Sie Ihr Projekt-Vorhaben:\n"));
@@ -316,136 +400,183 @@ ${
316
400
  - /deploy → Deployment vorbereiten`;
317
401
  }
318
402
 
319
- async setupBMADCoreConfig() {
320
- console.log(chalk.yellow("⚙️ BMAD Core Configuration einrichten..."));
403
+ async setupBMADCoreConfig() {
404
+ console.log(chalk.yellow("⚙️ BMAD Core Configuration einrichten..."));
321
405
 
322
- // Create .bmad-core directory
323
- const bmadCoreDir = path.join(this.appiqPath, '.bmad-core');
324
- if (!fs.existsSync(bmadCoreDir)) {
325
- fs.mkdirSync(bmadCoreDir, { recursive: true });
326
- }
327
-
328
- // Create core-config.yaml
329
- const coreConfigPath = path.join(bmadCoreDir, 'core-config.yaml');
330
- fs.writeFileSync(coreConfigPath, this.generateCoreConfig());
406
+ // Create .bmad-core directory
407
+ const bmadCoreDir = path.join(this.appiqPath, ".bmad-core");
408
+ if (!fs.existsSync(bmadCoreDir)) {
409
+ fs.mkdirSync(bmadCoreDir, { recursive: true });
410
+ }
331
411
 
332
- // Create technical-preferences.md
333
- const techPrefsPath = path.join(bmadCoreDir, 'data');
334
- if (!fs.existsSync(techPrefsPath)) {
335
- fs.mkdirSync(techPrefsPath, { recursive: true });
336
- }
337
- fs.writeFileSync(path.join(techPrefsPath, 'technical-preferences.md'), this.generateTechnicalPreferences());
412
+ // Create core-config.yaml
413
+ const coreConfigPath = path.join(bmadCoreDir, "core-config.yaml");
414
+ fs.writeFileSync(coreConfigPath, this.generateCoreConfig());
338
415
 
339
- console.log(chalk.green("✅ BMAD Core Configuration bereit!\n"));
416
+ // Create technical-preferences.md
417
+ const techPrefsPath = path.join(bmadCoreDir, "data");
418
+ if (!fs.existsSync(techPrefsPath)) {
419
+ fs.mkdirSync(techPrefsPath, { recursive: true });
340
420
  }
421
+ fs.writeFileSync(
422
+ path.join(techPrefsPath, "technical-preferences.md"),
423
+ this.generateTechnicalPreferences()
424
+ );
341
425
 
342
- async setupDocumentTemplates() {
343
- console.log(chalk.yellow("📄 Document Templates & Struktur einrichten..."));
426
+ console.log(chalk.green("✅ BMAD Core Configuration bereit!\n"));
427
+ }
344
428
 
345
- // Create docs directory structure
346
- const docsDir = path.join(this.projectRoot, 'docs');
347
- const archDir = path.join(docsDir, 'architecture');
348
- const storiesDir = path.join(docsDir, 'stories');
429
+ async setupDocumentTemplates() {
430
+ console.log(chalk.yellow("📄 Document Templates & Struktur einrichten..."));
349
431
 
350
- [docsDir, archDir, storiesDir].forEach(dir => {
351
- if (!fs.existsSync(dir)) {
352
- fs.mkdirSync(dir, { recursive: true });
353
- }
354
- });
432
+ // Create docs directory structure
433
+ const docsDir = path.join(this.projectRoot, "docs");
434
+ const archDir = path.join(docsDir, "architecture");
435
+ const storiesDir = path.join(docsDir, "stories");
355
436
 
356
- // Create templates
357
- const templatesDir = path.join(this.appiqPath, 'templates');
358
- if (!fs.existsSync(templatesDir)) {
359
- fs.mkdirSync(templatesDir, { recursive: true });
437
+ [docsDir, archDir, storiesDir].forEach((dir) => {
438
+ if (!fs.existsSync(dir)) {
439
+ fs.mkdirSync(dir, { recursive: true });
360
440
  }
441
+ });
361
442
 
362
- // PRD Template
363
- fs.writeFileSync(path.join(templatesDir, 'prd-template.md'), this.generatePRDTemplate());
364
-
365
- // Architecture Template
366
- fs.writeFileSync(path.join(templatesDir, 'architecture-template.md'), this.generateArchitectureTemplate());
367
-
368
- // Story Template
369
- fs.writeFileSync(path.join(templatesDir, 'story-template.md'), this.generateStoryTemplate());
443
+ // Create templates
444
+ const templatesDir = path.join(this.appiqPath, "templates");
445
+ if (!fs.existsSync(templatesDir)) {
446
+ fs.mkdirSync(templatesDir, { recursive: true });
447
+ }
370
448
 
371
- // Create initial PRD if planning is complete
372
- if (this.config.planApproved) {
373
- fs.writeFileSync(path.join(docsDir, 'prd.md'), this.generateInitialPRD());
374
- }
449
+ // PRD Template
450
+ fs.writeFileSync(
451
+ path.join(templatesDir, "prd-template.md"),
452
+ this.generatePRDTemplate()
453
+ );
454
+
455
+ // Architecture Template
456
+ fs.writeFileSync(
457
+ path.join(templatesDir, "architecture-template.md"),
458
+ this.generateArchitectureTemplate()
459
+ );
375
460
 
376
- console.log(chalk.green("✅ Document Templates erstellt!\n"));
461
+ // Story Template
462
+ fs.writeFileSync(
463
+ path.join(templatesDir, "story-template.md"),
464
+ this.generateStoryTemplate()
465
+ );
466
+
467
+ // Create initial PRD if planning is complete
468
+ if (this.config.planApproved) {
469
+ fs.writeFileSync(path.join(docsDir, "prd.md"), this.generateInitialPRD());
377
470
  }
378
471
 
379
- async setupAgentDependencies() {
380
- console.log(chalk.yellow("🔗 Agent Dependencies System einrichten..."));
472
+ console.log(chalk.green("✅ Document Templates erstellt!\n"));
473
+ }
381
474
 
382
- const agentsDir = path.join(this.appiqPath, "agents");
383
- const tasksDir = path.join(this.appiqPath, 'tasks');
384
- const dataDir = path.join(this.appiqPath, 'data');
475
+ async setupAgentDependencies() {
476
+ console.log(chalk.yellow("🔗 Agent Dependencies System einrichten..."));
385
477
 
386
- // Create directories
387
- [tasksDir, dataDir].forEach(dir => {
388
- if (!fs.existsSync(dir)) {
389
- fs.mkdirSync(dir, { recursive: true });
390
- }
391
- });
478
+ const agentsDir = path.join(this.appiqPath, "agents");
479
+ const tasksDir = path.join(this.appiqPath, "tasks");
480
+ const dataDir = path.join(this.appiqPath, "data");
392
481
 
393
- // Create BMAD Knowledge Base
394
- fs.writeFileSync(path.join(dataDir, 'bmad-kb.md'), this.generateBMADKnowledgeBase());
482
+ // Create directories
483
+ [tasksDir, dataDir].forEach((dir) => {
484
+ if (!fs.existsSync(dir)) {
485
+ fs.mkdirSync(dir, { recursive: true });
486
+ }
487
+ });
395
488
 
396
- // Create essential tasks
397
- fs.writeFileSync(path.join(tasksDir, 'create-doc.md'), this.generateCreateDocTask());
398
- fs.writeFileSync(path.join(tasksDir, 'shard-doc.md'), this.generateShardDocTask());
399
- fs.writeFileSync(path.join(tasksDir, 'validate-story.md'), this.generateValidateStoryTask());
489
+ // Create BMAD Knowledge Base
490
+ fs.writeFileSync(
491
+ path.join(dataDir, "bmad-kb.md"),
492
+ this.generateBMADKnowledgeBase()
493
+ );
400
494
 
401
- // Update agents with proper dependencies
402
- await this.updateAgentsWithDependencies();
495
+ // Create essential tasks
496
+ fs.writeFileSync(
497
+ path.join(tasksDir, "create-doc.md"),
498
+ this.generateCreateDocTask()
499
+ );
500
+ fs.writeFileSync(
501
+ path.join(tasksDir, "shard-doc.md"),
502
+ this.generateShardDocTask()
503
+ );
504
+ fs.writeFileSync(
505
+ path.join(tasksDir, "validate-story.md"),
506
+ this.generateValidateStoryTask()
507
+ );
403
508
 
404
- console.log(chalk.green("✅ Agent Dependencies System bereit!\n"));
509
+ // Add Flutter-specific agents if Flutter project
510
+ if (this.config.techStack.isFlutter) {
511
+ await this.addFlutterAgents();
405
512
  }
406
513
 
407
- async setupBMADOrchestration() {
408
- console.log(chalk.yellow("🎭 BMAD Full Orchestration einrichten..."));
409
-
410
- // Create orchestration config based on BMAD Flow
411
- const orchestrationConfig = {
412
- planningPhase: {
413
- agents: ["analyst", "pm", "ux-expert", "architect", "po"],
414
- workflow: this.config.projectType === "greenfield" ? "greenfield-planning" : "brownfield-planning"
415
- },
416
- developmentPhase: {
417
- agents: ["sm", "po", "dev", "qa"],
418
- workflow: "core-development-cycle"
419
- },
420
- transitions: {
421
- planningToIDE: "document-sharding",
422
- criticalCommitPoints: ["before-next-story", "after-qa-approval"]
423
- }
424
- };
514
+ // Update agents with proper dependencies
515
+ await this.updateAgentsWithDependencies();
425
516
 
426
- // Generate BMAD Orchestration
427
- const orchestrationPath = path.join(this.appiqPath, "bmad-orchestration.yaml");
428
- fs.writeFileSync(orchestrationPath, this.generateBMADOrchestration(orchestrationConfig));
517
+ console.log(chalk.green("✅ Agent Dependencies System bereit!\n"));
518
+ }
429
519
 
430
- // Create workflow guides
431
- const workflowsDir = path.join(this.appiqPath, 'workflows');
432
- if (!fs.existsSync(workflowsDir)) {
433
- fs.mkdirSync(workflowsDir, { recursive: true });
434
- }
520
+ async setupBMADOrchestration() {
521
+ console.log(chalk.yellow("🎭 BMAD Full Orchestration einrichten..."));
522
+
523
+ // Create orchestration config based on BMAD Flow
524
+ const orchestrationConfig = {
525
+ planningPhase: {
526
+ agents: ["analyst", "pm", "ux-expert", "architect", "po"],
527
+ workflow:
528
+ this.config.projectType === "greenfield"
529
+ ? "greenfield-planning"
530
+ : "brownfield-planning",
531
+ },
532
+ developmentPhase: {
533
+ agents: ["sm", "po", "dev", "qa"],
534
+ workflow: "core-development-cycle",
535
+ },
536
+ transitions: {
537
+ planningToIDE: "document-sharding",
538
+ criticalCommitPoints: ["before-next-story", "after-qa-approval"],
539
+ },
540
+ };
435
541
 
436
- fs.writeFileSync(path.join(workflowsDir, 'planning-workflow.md'), this.generatePlanningWorkflow());
437
- fs.writeFileSync(path.join(workflowsDir, 'development-cycle.md'), this.generateDevelopmentCycle());
438
- fs.writeFileSync(path.join(workflowsDir, 'document-sharding.md'), this.generateDocumentSharding());
542
+ // Generate BMAD Orchestration
543
+ const orchestrationPath = path.join(
544
+ this.appiqPath,
545
+ "bmad-orchestration.yaml"
546
+ );
547
+ fs.writeFileSync(
548
+ orchestrationPath,
549
+ this.generateBMADOrchestration(orchestrationConfig)
550
+ );
439
551
 
440
- console.log(chalk.green("✅ BMAD Full Orchestration bereit!\n"));
552
+ // Create workflow guides
553
+ const workflowsDir = path.join(this.appiqPath, "workflows");
554
+ if (!fs.existsSync(workflowsDir)) {
555
+ fs.mkdirSync(workflowsDir, { recursive: true });
441
556
  }
442
557
 
558
+ fs.writeFileSync(
559
+ path.join(workflowsDir, "planning-workflow.md"),
560
+ this.generatePlanningWorkflow()
561
+ );
562
+ fs.writeFileSync(
563
+ path.join(workflowsDir, "development-cycle.md"),
564
+ this.generateDevelopmentCycle()
565
+ );
566
+ fs.writeFileSync(
567
+ path.join(workflowsDir, "document-sharding.md"),
568
+ this.generateDocumentSharding()
569
+ );
570
+
571
+ console.log(chalk.green("✅ BMAD Full Orchestration bereit!\n"));
572
+ }
573
+
443
574
  generateCoreConfig() {
444
575
  return `# BMAD Core Configuration
445
576
  # Built with ❤️ based on Bmad-Method
446
577
 
447
578
  project:
448
- name: ${this.config.projectName || 'Unbenanntes Projekt'}
579
+ name: ${this.config.projectName || "Unbenanntes Projekt"}
449
580
  type: ${this.config.projectType}
450
581
  created: ${new Date().toISOString()}
451
582
 
@@ -483,15 +614,50 @@ dependencies:
483
614
 
484
615
  *Diese Datei hilft PM und Architect dabei, Ihre bevorzugten Design-Patterns und Technologien zu berücksichtigen.*
485
616
 
486
- ## Projekt: ${this.config.projectName || 'Unbenanntes Projekt'}
617
+ ## Projekt: ${this.config.projectName || "Unbenanntes Projekt"}
618
+ **Platform:** ${this.config.techStack.platform || 'nicht definiert'}
487
619
 
488
620
  ### Bevorzugte Technologien
489
- ${this.config.projectType === 'greenfield' ? `
490
- **Frontend:**
491
- - Framework: React/Next.js, Vue/Nuxt, Angular
492
- - State Management: Zustand, Redux Toolkit, Pinia
493
- - Styling: Tailwind CSS, Material-UI, Ant Design
494
621
 
622
+ ${this.config.techStack.isFlutter ? `
623
+ **📱 Flutter Mobile Development:**
624
+ - **Framework:** Flutter 3.35+ (beta), Dart 3.9+
625
+ - **Architecture:** Clean Architecture with Feature-based structure
626
+ - **State Management:** Cubit/BLoC pattern (preferred), Riverpod (alternative)
627
+ - **Dependency Injection:** GetIt + Injectable
628
+ - **Code Generation:** Freezed, Build Runner
629
+ - **Backend Integration:** Firebase, Supabase, REST APIs, GraphQL
630
+ - **Testing:** Unit Testing, Widget Testing, Integration Testing, Golden Tests
631
+
632
+ **🔌 Flutter MCP Integration:**
633
+ - **Dart MCP Server:** Automatisch konfiguriert für AI-Assistenten
634
+ - **Hot Reload:** Via MCP für Live-Development
635
+ - **Package Management:** pub.dev Integration via MCP
636
+ - **Error Analysis:** Automatische Fehlererkennung via MCP
637
+
638
+ **📦 Recommended Packages:**
639
+ - **UI:** Material 3, Cupertino (iOS-style)
640
+ - **Navigation:** go_router
641
+ - **HTTP:** dio
642
+ - **Local Storage:** shared_preferences, hive
643
+ - **Image:** cached_network_image
644
+ ` : ''}
645
+
646
+ ${this.config.techStack.platform === 'web' || this.config.techStack.platform === 'fullstack' ? `
647
+ **🌐 Web Development:**
648
+ - **Framework:** React/Next.js, Vue/Nuxt, Angular
649
+ - **UI Library:** shadcn/ui (preferred), v0.dev components, Material-UI, Chakra UI
650
+ - **Styling:** Tailwind CSS, CSS-in-JS, SCSS
651
+ - **AI Design:** v0.dev für Rapid Prototyping
652
+
653
+ **🎨 shadcn/ui + v0.dev Integration:**
654
+ - **Design System:** shadcn/ui als Basis-Komponenten
655
+ - **AI-Generated Components:** v0.dev für schnelle UI-Erstellung
656
+ - **Customization:** Tailwind CSS für individuelle Anpassungen
657
+ - **Accessibility:** Radix-UI Primitives als Basis
658
+ ` : ''}
659
+
660
+ ${this.config.projectType === "greenfield" && !this.config.techStack.isFlutter ? `
495
661
  **Backend:**
496
662
  - Runtime: Node.js, Python, Go
497
663
  - Framework: Express, FastAPI, Gin
@@ -501,33 +667,71 @@ ${this.config.projectType === 'greenfield' ? `
501
667
  - Deployment: Vercel, Railway, AWS
502
668
  - CI/CD: GitHub Actions, GitLab CI
503
669
  - Monitoring: Sentry, LogRocket
504
- ` : `
670
+ ` : ''}
671
+
672
+ ${this.config.projectType === "brownfield" ? `
505
673
  **Bestehende Technologien erweitern:**
506
674
  - Kompatibilität mit bestehender Code-Basis beachten
507
675
  - Minimale neue Dependencies
508
676
  - Schrittweise Migration wenn nötig
509
- `}
677
+ ` : ''}
510
678
 
511
679
  ### Design Patterns
680
+ ${this.config.techStack.isFlutter ? `
681
+ - **Clean Architecture** (Presentation → Domain → Data)
682
+ - **Feature-based Structure** (/features/auth, /features/dashboard)
683
+ - **Repository Pattern** für Datenaccess
684
+ - **Cubit Pattern** für State Management
685
+ - **SOLID Principles** anwenden
686
+ ` : `
512
687
  - **Architektur:** Clean Architecture, Hexagonal, MVC
513
688
  - **Code Style:** DRY, SOLID Principles, KISS
689
+ ${this.config.techStack.hasUI ? '- **Design System:** shadcn/ui für konsistente UI' : ''}
690
+ `}
691
+
692
+ ### Testing & Quality
693
+ ${this.config.techStack.isFlutter ? `
694
+ - **Dart Analysis:** Very strict linting rules
695
+ - **Flutter Lints:** Official Flutter linting package
696
+ - **Testing:** Minimum 80% code coverage
697
+ - **Golden Tests:** UI consistency tests
698
+ - **Integration Tests:** End-to-end testing
699
+ ` : `
514
700
  - **Testing:** TDD/BDD, Unit + Integration Tests
515
701
  - **Documentation:** README-driven, Inline Comments
702
+ - **Code Quality:** ESLint + Prettier (wenn applicable)
703
+ ${this.config.techStack.hasUI ? '- **Component Testing:** Storybook für Component Documentation' : ''}
704
+ `}
705
+
706
+ ### AI-Integration & MCP
707
+ ${this.config.techStack.isFlutter ? `
708
+ - **Dart MCP Server:** Für direkten AI-Zugriff auf Flutter Tools
709
+ - **Flutter DevTools:** MCP-basierte AI-Assistenz
710
+ - **Package Discovery:** AI-gestützte pub.dev Suche
711
+ - **Code Analysis:** Automatische Fehlererkennung und -behebung
712
+ ` : ''}
713
+ ${this.config.techStack.hasUI && !this.config.techStack.isFlutter ? `
714
+ - **v0.dev Integration:** AI-generierte UI-Komponenten
715
+ - **shadcn/ui Library:** KI-optimierte Component Library
716
+ - **Design Tokens:** Konsistente AI-generierte Designs
717
+ ` : ''}
516
718
 
517
719
  ### Coding Standards
518
- - **Naming:** camelCase für Variablen, PascalCase für Components
519
- - **Files:** kebab-case für Dateien, PascalCase für Components
720
+ - **Naming:** ${this.config.techStack.isFlutter ? 'lowerCamelCase für Variablen, PascalCase für Classes' : 'camelCase für Variablen, PascalCase für Components'}
721
+ - **Files:** ${this.config.techStack.isFlutter ? 'snake_case für Dart Dateien' : 'kebab-case für Dateien, PascalCase für Components'}
520
722
  - **Functions:** Kleine, fokussierte Funktionen (<50 Zeilen)
521
723
  - **Comments:** Erkläre WARUM, nicht WAS
522
724
 
523
725
  ### Präferenzen
524
726
  - **Performance:** Optimierung vor Abstraktion
525
727
  - **Security:** Security-by-Design
526
- - **Accessibility:** WCAG 2.1 AA Standard
728
+ - **Accessibility:** ${this.config.techStack.isFlutter ? 'Flutter Accessibility Widget support' : 'WCAG 2.1 AA Standard'}
527
729
  - **Mobile:** Mobile-First Approach
528
730
 
529
731
  ---
530
- *Aktualisiert: ${new Date().toLocaleDateString('de-DE')}*
732
+ *Platform: ${this.config.techStack.platform}*
733
+ *MCP Configured: ${this.config.techStack.isFlutter ? 'Dart MCP ✅' : 'Standard'}*
734
+ *Aktualisiert: ${new Date().toLocaleDateString("de-DE")}*
531
735
  `;
532
736
  }
533
737
 
@@ -727,7 +931,7 @@ ${this.config.projectType === 'greenfield' ? `
727
931
 
728
932
  generateInitialPRD() {
729
933
  const { projectName, projectIdea, targetUsers, projectType } = this.config;
730
-
934
+
731
935
  return `# Product Requirements Document (PRD)
732
936
 
733
937
  ## Projekt: ${projectName}
@@ -739,7 +943,11 @@ ${projectIdea}
739
943
  ${targetUsers}
740
944
 
741
945
  ### 3. Project Type
742
- ${projectType === 'greenfield' ? '✨ Greenfield (Neues Projekt)' : '🔧 Brownfield (Bestehendes Projekt)'}
946
+ ${
947
+ projectType === "greenfield"
948
+ ? "✨ Greenfield (Neues Projekt)"
949
+ : "🔧 Brownfield (Bestehendes Projekt)"
950
+ }
743
951
 
744
952
  ### 4. Functional Requirements (FRs)
745
953
  *Diese Sektion wird durch den PM Agent vervollständigt*
@@ -756,7 +964,7 @@ ${projectType === 'greenfield' ? '✨ Greenfield (Neues Projekt)' : '🔧 Brownf
756
964
  ---
757
965
  **Status:** 📋 Planning Phase Complete - Ready for PM Agent
758
966
  **Nächster Schritt:** PM Agent für detaillierte Requirements
759
- **Created:** ${new Date().toLocaleDateString('de-DE')}
967
+ **Created:** ${new Date().toLocaleDateString("de-DE")}
760
968
 
761
969
  ---
762
970
  *Erstellt mit Appiq Solution - Built with ❤️ based on Bmad-Method*
@@ -965,6 +1173,162 @@ Ensure user stories align with PRD, architecture, and project goals.
965
1173
  `;
966
1174
  }
967
1175
 
1176
+ async addFlutterAgents() {
1177
+ console.log(chalk.cyan(" 📱 Adding Flutter-specific agents..."));
1178
+
1179
+ const agentsDir = path.join(this.appiqPath, "agents");
1180
+ const flutterExpansionPath = path.join(__dirname, '..', 'expansion-packs', 'bmad-flutter-mobile-dev', 'agents');
1181
+
1182
+ // Check if Flutter expansion pack exists
1183
+ if (!fs.existsSync(flutterExpansionPath)) {
1184
+ console.log(chalk.yellow(" ⚠️ Flutter expansion pack not found - creating basic Flutter agents"));
1185
+ await this.createBasicFlutterAgents();
1186
+ return;
1187
+ }
1188
+
1189
+ // Copy Flutter agents from expansion pack
1190
+ const flutterAgents = [
1191
+ 'flutter-ui-agent.md',
1192
+ 'flutter-cubit-agent.md',
1193
+ 'flutter-data-agent.md',
1194
+ 'flutter-domain-agent.md',
1195
+ 'shared-components-agent.md'
1196
+ ];
1197
+
1198
+ for (const agentFile of flutterAgents) {
1199
+ const sourcePath = path.join(flutterExpansionPath, agentFile);
1200
+ const targetPath = path.join(agentsDir, agentFile);
1201
+
1202
+ if (fs.existsSync(sourcePath)) {
1203
+ fs.copyFileSync(sourcePath, targetPath);
1204
+ console.log(chalk.green(` ✅ ${agentFile} hinzugefügt`));
1205
+ }
1206
+ }
1207
+
1208
+ // Create Flutter-specific data files
1209
+ const dataDir = path.join(this.appiqPath, "data");
1210
+ const flutterDataPath = path.join(__dirname, '..', 'expansion-packs', 'bmad-flutter-mobile-dev', 'data');
1211
+
1212
+ if (fs.existsSync(path.join(flutterDataPath, 'flutter-development-guidelines.md'))) {
1213
+ fs.copyFileSync(
1214
+ path.join(flutterDataPath, 'flutter-development-guidelines.md'),
1215
+ path.join(dataDir, 'flutter-development-guidelines.md')
1216
+ );
1217
+ console.log(chalk.green(" ✅ Flutter development guidelines hinzugefügt"));
1218
+ }
1219
+ }
1220
+
1221
+ async createBasicFlutterAgents() {
1222
+ console.log(chalk.gray(" 🔨 Creating basic Flutter agents..."));
1223
+
1224
+ const agentsDir = path.join(this.appiqPath, "agents");
1225
+
1226
+ // Basic Flutter UI Agent
1227
+ const flutterUIAgent = this.generateBasicFlutterUIAgent();
1228
+ fs.writeFileSync(path.join(agentsDir, 'flutter-ui-agent.md'), flutterUIAgent);
1229
+
1230
+ // Basic Flutter State Management Agent
1231
+ const flutterStateAgent = this.generateBasicFlutterStateAgent();
1232
+ fs.writeFileSync(path.join(agentsDir, 'flutter-cubit-agent.md'), flutterStateAgent);
1233
+
1234
+ console.log(chalk.green(" ✅ Basic Flutter agents created"));
1235
+ }
1236
+
1237
+ generateBasicFlutterUIAgent() {
1238
+ return `# Flutter UI Agent
1239
+
1240
+ Du bist ein spezialisierter Flutter UI Agent, der sich auf die Erstellung von benutzerfreundlichen und responsive Mobile UI-Komponenten fokussiert.
1241
+
1242
+ ## Rolle & Verantwortung
1243
+
1244
+ - **UI Design & Implementation:** Erstelle schöne, Material 3 konforme Flutter UIs
1245
+ - **Widget Composition:** Verwende effiziente Widget-Hierarchien
1246
+ - **Responsive Design:** Sichere Kompatibilität für verschiedene Bildschirmgrößen
1247
+ - **Accessibility:** Implementiere barrierefreie UI-Komponenten
1248
+
1249
+ ## Expertise
1250
+
1251
+ ### Flutter UI Frameworks
1252
+ - **Material 3:** Modernes Material Design
1253
+ - **Cupertino:** iOS-native Looks
1254
+ - **Custom Widgets:** Individuelle UI-Komponenten
1255
+
1256
+ ### Best Practices
1257
+ - **Widget Keys:** Für Testability und Performance
1258
+ - **Const Constructors:** Memory-Optimierung
1259
+ - **Build Method Optimization:** Verhindere unnecessary rebuilds
1260
+ - **Theme Integration:** Konsistente Design Systems
1261
+
1262
+ ## Tech Stack Integration
1263
+
1264
+ **Platform:** ${this.config.techStack.platform}
1265
+ **MCP:** ${this.config.techStack.isFlutter ? 'Dart MCP Server ✅' : 'Standard'}
1266
+
1267
+ ### Dart MCP Tools
1268
+ - Hot Reload via MCP
1269
+ - Widget Inspection via AI
1270
+ - pub.dev Package Discovery
1271
+ - Runtime Error Analysis
1272
+
1273
+ ## Workflow Integration
1274
+
1275
+ **Planning Phase:** Arbeite mit UX Expert an UI Specs
1276
+ **Development Phase:** Implementiere UI basierend auf Cubit State
1277
+ **Testing Phase:** Golden Tests für UI Consistency
1278
+
1279
+ ---
1280
+ *Built with ❤️ based on Bmad-Method*
1281
+ *Flutter Clean Architecture + Dart MCP Integration*
1282
+ `;
1283
+ }
1284
+
1285
+ generateBasicFlutterStateAgent() {
1286
+ return `# Flutter Cubit State Management Agent
1287
+
1288
+ Du bist ein spezialisierter Flutter State Management Agent mit Fokus auf Cubit/BLoC Pattern und Clean Architecture.
1289
+
1290
+ ## Rolle & Verantwortung
1291
+
1292
+ - **State Management:** Implementiere Cubit/BLoC Pattern
1293
+ - **Clean Architecture:** Separation of Concerns (Presentation → Domain → Data)
1294
+ - **Dependency Injection:** GetIt + Injectable Setup
1295
+ - **Event Handling:** User Interactions und API Calls
1296
+
1297
+ ## Expertise
1298
+
1299
+ ### State Management
1300
+ - **Cubit:** Simple State Management für UI
1301
+ - **BLoC:** Complex Business Logic mit Events
1302
+ - **Riverpod:** Alternative State Management (if needed)
1303
+
1304
+ ### Architecture Patterns
1305
+ - **Clean Architecture:** Feature-based Structure
1306
+ - **Repository Pattern:** Data Access Layer
1307
+ - **Use Cases:** Business Logic Layer
1308
+ - **Dependency Injection:** Loose Coupling
1309
+
1310
+ ## Tech Stack Integration
1311
+
1312
+ **Platform:** ${this.config.techStack.platform}
1313
+ **MCP:** ${this.config.techStack.isFlutter ? 'Dart MCP Server ✅' : 'Standard'}
1314
+
1315
+ ### Code Generation
1316
+ - **Freezed:** Immutable Data Classes
1317
+ - **Injectable:** Dependency Injection Setup
1318
+ - **Build Runner:** Code Generation Pipeline
1319
+
1320
+ ## Workflow Integration
1321
+
1322
+ **Planning Phase:** Definiere State Structure mit Domain Agent
1323
+ **Development Phase:** Implementiere Business Logic
1324
+ **Testing Phase:** Unit Tests für Cubits und Use Cases
1325
+
1326
+ ---
1327
+ *Built with ❤️ based on Bmad-Method*
1328
+ *Flutter Clean Architecture + Dart MCP Integration*
1329
+ `;
1330
+ }
1331
+
968
1332
  async updateAgentsWithDependencies() {
969
1333
  console.log(chalk.gray(" 🔗 Updating agents with BMAD dependencies..."));
970
1334
 
@@ -973,7 +1337,7 @@ Ensure user stories align with PRD, architecture, and project goals.
973
1337
 
974
1338
  for (const agentFile of agents) {
975
1339
  const agentPath = path.join(agentsDir, agentFile);
976
- let content = fs.readFileSync(agentPath, 'utf8');
1340
+ let content = fs.readFileSync(agentPath, "utf8");
977
1341
 
978
1342
  // Add BMAD dependencies section to each agent
979
1343
  const dependenciesSection = `
@@ -1006,12 +1370,12 @@ Ensure user stories align with PRD, architecture, and project goals.
1006
1370
  `;
1007
1371
 
1008
1372
  // Add dependencies section before the final line
1009
- const lines = content.split('\n');
1373
+ const lines = content.split("\n");
1010
1374
  const lastLine = lines.pop(); // Remove last line
1011
1375
  lines.push(dependenciesSection);
1012
1376
  lines.push(lastLine); // Add last line back
1013
1377
 
1014
- fs.writeFileSync(agentPath, lines.join('\n'));
1378
+ fs.writeFileSync(agentPath, lines.join("\n"));
1015
1379
  }
1016
1380
  }
1017
1381
 
@@ -1029,7 +1393,7 @@ project:
1029
1393
  planning_phase:
1030
1394
  workflow: ${config.planningPhase.workflow}
1031
1395
  agents:
1032
- ${config.planningPhase.agents.map(agent => ` - ${agent}`).join('\n')}
1396
+ ${config.planningPhase.agents.map((agent) => ` - ${agent}`).join("\n")}
1033
1397
 
1034
1398
  flow:
1035
1399
  1: "analyst → research & project brief (optional)"
@@ -1051,7 +1415,7 @@ transition:
1051
1415
  development_phase:
1052
1416
  workflow: ${config.developmentPhase.workflow}
1053
1417
  agents:
1054
- ${config.developmentPhase.agents.map(agent => ` - ${agent}`).join('\n')}
1418
+ ${config.developmentPhase.agents.map((agent) => ` - ${agent}`).join("\n")}
1055
1419
 
1056
1420
  cycle:
1057
1421
  1: "sm → review previous story dev/QA notes"
@@ -1068,13 +1432,19 @@ ${config.developmentPhase.agents.map(agent => ` - ${agent}`).join('\n')}
1068
1432
 
1069
1433
  # Critical Commit Points
1070
1434
  commit_points:
1071
- ${config.transitions.criticalCommitPoints.map(point => ` - ${point}`).join('\n')}
1435
+ ${config.transitions.criticalCommitPoints
1436
+ .map((point) => ` - ${point}`)
1437
+ .join("\n")}
1072
1438
 
1073
1439
  # IDE Integration
1074
1440
  ides:
1075
- ${this.config.selectedIDEs.map(ide => ` - name: ${this.getIDEName(ide)}
1441
+ ${this.config.selectedIDEs
1442
+ .map(
1443
+ (ide) => ` - name: ${this.getIDEName(ide)}
1076
1444
  config_path: ${this.getIDEConfig(ide).dir}
1077
- file_format: ${this.getIDEConfig(ide).suffix}`).join('\n')}
1445
+ file_format: ${this.getIDEConfig(ide).suffix}`
1446
+ )
1447
+ .join("\n")}
1078
1448
 
1079
1449
  # Context Management
1080
1450
  context:
@@ -1381,6 +1751,171 @@ devLoadAlwaysFiles:
1381
1751
  `;
1382
1752
  }
1383
1753
 
1754
+ async setupMCPConfigurations() {
1755
+ console.log(chalk.yellow("🔌 MCP (Model Context Protocol) Setup"));
1756
+ console.log(chalk.gray("Konfiguriere MCP Server für AI-Assistenten...\n"));
1757
+
1758
+ // Flutter/Dart MCP specific setup
1759
+ if (this.config.techStack.isFlutter) {
1760
+ console.log(chalk.cyan("🎯 Dart MCP Server für Flutter wird konfiguriert..."));
1761
+ await this.setupDartMCPServer();
1762
+ }
1763
+
1764
+ // Web/Fullstack MCP setup
1765
+ if (this.config.techStack.platform === 'web' || this.config.techStack.platform === 'fullstack') {
1766
+ console.log(chalk.cyan("🌐 Web MCP Konfiguration..."));
1767
+ await this.setupWebMCPServer();
1768
+ }
1769
+
1770
+ // Configure MCP for each selected IDE
1771
+ for (const ide of this.config.selectedIDEs) {
1772
+ await this.configureMCPForIDE(ide);
1773
+ }
1774
+
1775
+ console.log(chalk.green("✅ MCP Configuration abgeschlossen!\n"));
1776
+ }
1777
+
1778
+ async setupDartMCPServer() {
1779
+ // Create Dart MCP configuration for Flutter projects
1780
+ const dartMCPConfig = {
1781
+ dart: {
1782
+ command: "dart",
1783
+ args: [
1784
+ "mcp-server",
1785
+ "--experimental-mcp-server"
1786
+ ]
1787
+ }
1788
+ };
1789
+
1790
+ this.config.mcpConfigs.dart = dartMCPConfig;
1791
+
1792
+ // Generate setup instructions
1793
+ const mcpInstructionsPath = path.join(this.appiqPath, 'mcp-setup-instructions.md');
1794
+ fs.writeFileSync(mcpInstructionsPath, this.generateDartMCPInstructions());
1795
+
1796
+ console.log(chalk.green(" ✅ Dart MCP Server Konfiguration erstellt"));
1797
+ console.log(chalk.gray(" → mcp-setup-instructions.md mit Anweisungen erstellt"));
1798
+ }
1799
+
1800
+ async setupWebMCPServer() {
1801
+ // Web/shadcn/v0.dev specific MCP setup if needed
1802
+ console.log(chalk.green(" ✅ Web MCP Konfiguration vorbereitet"));
1803
+ }
1804
+
1805
+ async configureMCPForIDE(ide) {
1806
+ const ideConfig = this.getIDEConfig(ide);
1807
+ const mcpPath = this.getMCPConfigPath(ide);
1808
+
1809
+ if (mcpPath && this.config.mcpConfigs.dart) {
1810
+ // Create IDE-specific MCP config
1811
+ const ideMCPDir = path.dirname(path.join(this.projectRoot, mcpPath));
1812
+ if (!fs.existsSync(ideMCPDir)) {
1813
+ fs.mkdirSync(ideMCPDir, { recursive: true });
1814
+ }
1815
+
1816
+ const mcpConfigContent = this.generateMCPConfigForIDE(ide);
1817
+ fs.writeFileSync(path.join(this.projectRoot, mcpPath), mcpConfigContent);
1818
+
1819
+ console.log(chalk.green(` ✅ ${this.getIDEName(ide)} MCP konfiguriert`));
1820
+ }
1821
+ }
1822
+
1823
+ getMCPConfigPath(ide) {
1824
+ const mcpPaths = {
1825
+ cursor: '.cursor/mcp.json',
1826
+ 'claude-code': null, // Uses Gemini CLI config
1827
+ windsurf: '.windsurf/mcp.json',
1828
+ cline: null, // Uses VS Code config
1829
+ trae: '.trae/mcp.json',
1830
+ roo: '.roo/mcp.json',
1831
+ gemini: '.gemini/settings.json',
1832
+ 'github-copilot': null, // Uses VS Code settings
1833
+ };
1834
+ return mcpPaths[ide];
1835
+ }
1836
+
1837
+ generateMCPConfigForIDE(ide) {
1838
+ if (ide === 'gemini') {
1839
+ return JSON.stringify({
1840
+ mcpServers: this.config.mcpConfigs
1841
+ }, null, 2);
1842
+ } else {
1843
+ return JSON.stringify({
1844
+ mcpServers: this.config.mcpConfigs
1845
+ }, null, 2);
1846
+ }
1847
+ }
1848
+
1849
+ generateDartMCPInstructions() {
1850
+ return `# 🚀 Dart MCP Server Setup für Flutter Projekte
1851
+
1852
+ *Built with ❤️ based on Bmad-Method*
1853
+
1854
+ ## ⚡ Was ist der Dart MCP Server?
1855
+
1856
+ Der Dart MCP Server ermöglicht AI-Assistenten direkten Zugriff auf:
1857
+ - **Analyse und Fehlerbehebung** in Ihrem Code
1858
+ - **Interaktion mit laufender App** (Hot Reload, Widget-Inspektion)
1859
+ - **pub.dev Suche** nach passenden Packages
1860
+ - **Dependency Management** in pubspec.yaml
1861
+ - **Test-Ausführung** und Analyse
1862
+
1863
+ ## 🔧 Setup für Ihre IDEs
1864
+
1865
+ ### ${this.config.selectedIDEs.includes('cursor') ? '✅ Cursor' : '❌ Cursor (nicht ausgewählt)'}
1866
+ ${this.config.selectedIDEs.includes('cursor') ? `
1867
+ **Automatisch konfiguriert!** ✅
1868
+ - Datei: \`.cursor/mcp.json\`
1869
+ - Bereit für Verwendung
1870
+ ` : ''}
1871
+
1872
+ ### ${this.config.selectedIDEs.includes('claude-code') ? '✅ Claude Code CLI' : '❌ Claude Code CLI (nicht ausgewählt)'}
1873
+ ${this.config.selectedIDEs.includes('claude-code') ? `
1874
+ **Setup-Schritte:**
1875
+ 1. \`gemini\` CLI installieren falls noch nicht vorhanden
1876
+ 2. Konfiguration in \`~/.gemini/settings.json\` bereits erstellt
1877
+ 3. Verwenden Sie: \`/mcp\` um verfügbare Tools anzuzeigen
1878
+ ` : ''}
1879
+
1880
+ ### ${this.config.selectedIDEs.includes('github-copilot') ? '✅ GitHub Copilot in VS Code' : '❌ GitHub Copilot (nicht ausgewählt)'}
1881
+ ${this.config.selectedIDEs.includes('github-copilot') ? `
1882
+ **Setup-Schritte:**
1883
+ 1. VS Code Settings öffnen
1884
+ 2. Hinzufügen: \`"dart.mcpServer": true\`
1885
+ 3. Optional: \`"chat.mcp.discovery.enabled": true\`
1886
+ ` : ''}
1887
+
1888
+ ## 📋 Voraussetzungen
1889
+
1890
+ ⚠️ **Wichtig:** Dart SDK 3.9+ / Flutter 3.35+ beta erforderlich!
1891
+
1892
+ \`\`\`bash
1893
+ # Flutter auf beta channel wechseln
1894
+ flutter channel beta
1895
+ flutter upgrade
1896
+ \`\`\`
1897
+
1898
+ ## 🎯 Verwendung
1899
+
1900
+ Nach dem Setup können Sie Ihren AI-Assistenten fragen:
1901
+
1902
+ - **"Analysiere Fehler in meiner Flutter App"**
1903
+ - **"Finde ein Package für Karten-Integration"**
1904
+ - **"Führe Tests aus und zeige Ergebnisse"**
1905
+ - **"Triggere Hot Reload"**
1906
+ - **"Was ist das aktuell ausgewählte Widget?"**
1907
+
1908
+ ## 🔗 Weitere Infos
1909
+
1910
+ 📖 **Vollständige Dokumentation:**
1911
+ https://medium.com/flutter/supercharge-your-dart-flutter-development-experience-with-the-dart-mcp-server-2edcc8107b49
1912
+
1913
+ ---
1914
+ *Erstellt am: ${new Date().toLocaleDateString('de-DE')}*
1915
+ *IDEs: ${this.config.selectedIDEs.map(ide => this.getIDEName(ide)).join(', ')}*
1916
+ `;
1917
+ }
1918
+
1384
1919
  async performInstallation() {
1385
1920
  console.log(chalk.yellow("📦 Installation läuft..."));
1386
1921
 
@@ -1617,7 +2152,9 @@ ${
1617
2152
 
1618
2153
  ## Projekt: ${this.config.projectName || "Unbenanntes Projekt"}
1619
2154
  **Typ:** ${
1620
- this.config.projectType === "greenfield" ? "✨ Greenfield (Neues Projekt)" : "🔧 Brownfield (Bestehendes Projekt)"
2155
+ this.config.projectType === "greenfield"
2156
+ ? "✨ Greenfield (Neues Projekt)"
2157
+ : "🔧 Brownfield (Bestehendes Projekt)"
1621
2158
  }
1622
2159
 
1623
2160
  ## 📋 BMAD Planning Workflow (Phase 1)
@@ -1682,16 +2219,22 @@ ${
1682
2219
  - \`/qa\` → Request review
1683
2220
  - \`/commit\` → Commit changes
1684
2221
 
1685
- ### ${this.config.projectType === "greenfield" ? "Greenfield" : "Brownfield"} Specific:
1686
- ${this.config.projectType === "greenfield" ? `
2222
+ ### ${
2223
+ this.config.projectType === "greenfield" ? "Greenfield" : "Brownfield"
2224
+ } Specific:
2225
+ ${
2226
+ this.config.projectType === "greenfield"
2227
+ ? `
1687
2228
  - \`/start\` → Fresh project setup
1688
2229
  - \`/design\` → Create from scratch
1689
2230
  - \`/build\` → Build step by step
1690
- ` : `
2231
+ `
2232
+ : `
1691
2233
  - \`/analyze\` → Analyze existing code
1692
2234
  - \`/document\` → Document current state
1693
2235
  - \`/improve\` → Plan improvements
1694
- `}
2236
+ `
2237
+ }
1695
2238
 
1696
2239
  ## 📊 File Structure
1697
2240
 
@@ -1748,7 +2291,9 @@ your-project/
1748
2291
  - appiq-solution/workflows/document-sharding.md
1749
2292
 
1750
2293
  ---
1751
- **IDEs:** ${this.config.selectedIDEs.map((ide) => this.getIDEName(ide)).join(", ")}
2294
+ **IDEs:** ${this.config.selectedIDEs
2295
+ .map((ide) => this.getIDEName(ide))
2296
+ .join(", ")}
1752
2297
  **Created:** ${new Date().toLocaleDateString("de-DE")}
1753
2298
  **Powered by Appiq Solution - Built with ❤️ based on Bmad-Method**
1754
2299
  `;
@@ -1851,7 +2396,9 @@ your-project/
1851
2396
 
1852
2397
  console.log(chalk.yellow("2. 📋 BMAD Planning Workflow:"));
1853
2398
  if (this.config.planApproved) {
1854
- console.log(chalk.green(` ✅ Planning Complete - Ready for Development!`));
2399
+ console.log(
2400
+ chalk.green(` ✅ Planning Complete - Ready for Development!`)
2401
+ );
1855
2402
  console.log(chalk.cyan(` → Ihre initial PRD: docs/prd.md`));
1856
2403
  } else {
1857
2404
  console.log(chalk.cyan(` Option A: Web UI (kosteneffizient)`));
@@ -1859,11 +2406,19 @@ your-project/
1859
2406
  console.log(chalk.cyan(` Option B: Direkt in IDE`));
1860
2407
  console.log(chalk.gray(` → @pm für PRD, @architect für Architecture`));
1861
2408
  }
1862
- console.log('');
2409
+ console.log("");
1863
2410
 
1864
2411
  console.log(chalk.yellow("3. ⚠️ KRITISCHER ÜBERGANG: Document Sharding"));
1865
- console.log(chalk.red(` → Sagen Sie Ihrer IDE: ${chalk.bold('"@po bitte shard die PRD und Architecture Dokumente"')}`));
1866
- console.log(chalk.gray(` → Dokumente werden in fokussierte Teile aufgeteilt\n`));
2412
+ console.log(
2413
+ chalk.red(
2414
+ ` → Sagen Sie Ihrer IDE: ${chalk.bold(
2415
+ '"@po bitte shard die PRD und Architecture Dokumente"'
2416
+ )}`
2417
+ )
2418
+ );
2419
+ console.log(
2420
+ chalk.gray(` → Dokumente werden in fokussierte Teile aufgeteilt\n`)
2421
+ );
1867
2422
 
1868
2423
  console.log(chalk.yellow("4. 🚀 BMAD Development Cycle:"));
1869
2424
  console.log(chalk.cyan(` 1. @sm → Story Draft von Sharded Epic`));
@@ -1876,7 +2431,7 @@ your-project/
1876
2431
 
1877
2432
  console.log(chalk.yellow("5. 🎯 Quick Commands (in quick-start.md):"));
1878
2433
  console.log(chalk.cyan(` /plan → Planning starten`));
1879
- console.log(chalk.cyan(` /shard → Document Sharding`));
2434
+ console.log(chalk.cyan(` /shard → Document Sharding`));
1880
2435
  console.log(chalk.cyan(` /story → Nächste Story`));
1881
2436
  console.log(chalk.cyan(` /dev → Development`));
1882
2437
  console.log(chalk.cyan(` /qa → Quality Review`));
@@ -1979,7 +2534,7 @@ if (require.main === module) {
1979
2534
 
1980
2535
  if (args.length === 0 || args[0] === "install") {
1981
2536
  const installer = new AppiqSolutionInstaller();
1982
- installer.install().catch(console.error);
2537
+ installer.install().catch(console.error);
1983
2538
  } else {
1984
2539
  console.log(
1985
2540
  chalk.red("❌ Unknown command. Use: npx appiq-solution install")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appiq-solution",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "🚀 Super einfache KI-Agent Installation mit One-Click Workflows - Built with ❤️ based on Bmad-Method",
5
5
  "main": "tools/appiq-installer.js",
6
6
  "bin": {