appiq-solution 1.0.3 → 1.0.6

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.
@@ -1,2546 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Appiq Solution Smart Installer
5
- *
6
- * Super einfache Installation mit One-Click Workflows
7
- * Usage: npx appiq-solution install
8
- *
9
- * Built with ❤️ based on the amazing Bmad-Method
10
- * Credits: https://github.com/Viktor-Hermann/APPIQ-METHOD
11
- */
12
-
13
- const fs = require('fs');
14
- const path = require('path');
15
- const inquirer = require('inquirer');
16
- const chalk = require('chalk');
17
-
18
- class AppiqSolutionInstaller {
19
- constructor() {
20
- this.projectRoot = process.cwd();
21
- this.appiqPath = path.join(this.projectRoot, "appiq-solution");
22
- this.config = {
23
- version: "1.0.0",
24
- projectType: null, // 'greenfield' or 'brownfield'
25
- techStack: {
26
- platform: null, // 'flutter', 'web', 'fullstack', 'api'
27
- isFlutter: false,
28
- hasUI: false,
29
- database: null,
30
- libraries: []
31
- },
32
- selectedIDEs: [],
33
- projectName: null,
34
- projectIdea: null,
35
- targetUsers: null,
36
- projectPlan: null,
37
- planApproved: false,
38
- mcpConfigs: {},
39
- };
40
- }
41
-
42
- async install() {
43
- console.log(chalk.bold.cyan("🚀 Appiq Solution Smart Installer v1.0.0"));
44
- console.log(chalk.cyan("============================================"));
45
- console.log(chalk.dim("Built with ❤️ based on Bmad-Method"));
46
- console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
47
-
48
- try {
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();
54
-
55
- // Phase 2: Projektidee erfassen
56
- await this.collectProjectIdea();
57
-
58
- // Phase 3: IDE Selection (MULTISELECT)
59
- await this.selectIDE();
60
-
61
- // Phase 4: Projektplan erstellen
62
- await this.createProjectPlan();
63
-
64
- // Phase 5: Plan-Freigabe
65
- await this.approvePlan();
66
-
67
- // Phase 6: Installation
68
- await this.performInstallation();
69
-
70
- // Phase 7: MCP Configuration Setup
71
- await this.setupMCPConfigurations();
72
-
73
- // Phase 8: BMAD Core Configuration Setup
74
- await this.setupBMADCoreConfig();
75
-
76
- // Phase 9: Document Templates & Dependencies
77
- await this.setupDocumentTemplates();
78
-
79
- // Phase 10: Agent Dependencies System (+ Flutter Agents)
80
- await this.setupAgentDependencies();
81
-
82
- // Phase 11: BMAD Orchestration (Full Flow)
83
- await this.setupBMADOrchestration();
84
-
85
- // Phase 12: One-Click Setup
86
- await this.setupOneClickWorkflows();
87
-
88
- // Phase 13: Simple Instructions
89
- await this.showSimpleInstructions();
90
- } catch (error) {
91
- console.error(chalk.red("❌ Installation failed:"), error.message);
92
- process.exit(1);
93
- }
94
- }
95
-
96
- async detectProjectType() {
97
- console.log(chalk.yellow("🔍 Projekt-Analyse..."));
98
-
99
- // Auto-Detection
100
- const hasPackageJson = fs.existsSync(
101
- path.join(this.projectRoot, "package.json")
102
- );
103
- const hasPubspec = fs.existsSync(
104
- path.join(this.projectRoot, "pubspec.yaml")
105
- );
106
- const hasExistingCode = this.hasExistingSourceCode();
107
- const hasDocumentation = this.hasExistingDocumentation();
108
-
109
- let suggestedType = "greenfield";
110
- let reason = "Neues Projekt erkannt";
111
-
112
- if (hasExistingCode || hasDocumentation) {
113
- suggestedType = "brownfield";
114
- reason = "Existierenden Code/Dokumentation gefunden";
115
- }
116
-
117
- console.log(chalk.gray(`💡 Analyse: ${reason}`));
118
- console.log(
119
- chalk.gray(
120
- `📊 Empfehlung: ${
121
- suggestedType === "greenfield"
122
- ? "Greenfield (Neues Projekt)"
123
- : "Brownfield (Bestehendes Projekt)"
124
- }`
125
- )
126
- );
127
-
128
- // User Confirmation
129
- const { projectType } = await inquirer.prompt([
130
- {
131
- type: "list",
132
- name: "projectType",
133
- message: "🎯 Welcher Projekt-Typ ist das?",
134
- choices: [
135
- {
136
- name: `✨ Greenfield - Neues Projekt (Empfohlen: ${
137
- suggestedType === "greenfield" ? "✅" : "❌"
138
- })`,
139
- value: "greenfield",
140
- short: "Greenfield",
141
- },
142
- {
143
- name: `🔧 Brownfield - Bestehendes Projekt (Empfohlen: ${
144
- suggestedType === "brownfield" ? "✅" : "❌"
145
- })`,
146
- value: "brownfield",
147
- short: "Brownfield",
148
- },
149
- ],
150
- default: suggestedType,
151
- },
152
- ]);
153
-
154
- this.config.projectType = projectType;
155
- console.log(
156
- chalk.green(
157
- `✅ Projekt-Typ: ${
158
- projectType === "greenfield"
159
- ? "Greenfield (Neu)"
160
- : "Brownfield (Bestehend)"
161
- }\n`
162
- )
163
- );
164
- }
165
-
166
- async selectIDE() {
167
- console.log(chalk.yellow("🛠️ IDE Auswahl"));
168
- console.log(
169
- chalk.bold.yellow.bgRed(
170
- " ⚠️ MULTISELECT: Verwenden Sie SPACEBAR zum Auswählen mehrerer IDEs! "
171
- )
172
- );
173
- console.log(chalk.gray("Wählen Sie ALLE IDEs aus, die Sie nutzen:\n"));
174
-
175
- const { ides } = await inquirer.prompt([
176
- {
177
- type: "checkbox",
178
- name: "ides",
179
- message:
180
- "🎯 Welche IDEs nutzen Sie? (SPACEBAR = auswählen, ENTER = bestätigen)",
181
- choices: [
182
- { name: "🔵 Cursor", value: "cursor" },
183
- { name: "🟣 Claude Code CLI", value: "claude-code" },
184
- { name: "🟢 Windsurf", value: "windsurf" },
185
- { name: "🔶 VS Code + Cline", value: "cline" },
186
- { name: "🟠 Trae", value: "trae" },
187
- { name: "🔴 Roo Code", value: "roo" },
188
- { name: "🟪 Gemini CLI", value: "gemini" },
189
- { name: "⚫ GitHub Copilot", value: "github-copilot" },
190
- ],
191
- validate: (input) => {
192
- if (input.length === 0) {
193
- return "Bitte wählen Sie mindestens eine IDE aus!";
194
- }
195
- return true;
196
- },
197
- },
198
- ]);
199
-
200
- this.config.selectedIDEs = ides;
201
- const ideNames = ides.map((ide) => this.getIDEName(ide)).join(", ");
202
- console.log(chalk.green(`✅ IDEs: ${ideNames}\n`));
203
- }
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
-
276
- async collectProjectIdea() {
277
- console.log(chalk.yellow("💡 Projektidee erfassen"));
278
- console.log(chalk.gray("Beschreiben Sie Ihr Projekt-Vorhaben:\n"));
279
-
280
- const { projectIdea, projectName, targetUsers } = await inquirer.prompt([
281
- {
282
- type: "input",
283
- name: "projectName",
284
- message: "🏷️ Wie soll Ihr Projekt heißen?",
285
- validate: (input) =>
286
- input.length > 0 ? true : "Bitte geben Sie einen Projektnamen ein!",
287
- },
288
- {
289
- type: "editor",
290
- name: "projectIdea",
291
- message: "💡 Beschreiben Sie Ihre Projektidee (detailliert):",
292
- validate: (input) =>
293
- input.length > 10
294
- ? true
295
- : "Bitte beschreiben Sie Ihr Projekt ausführlicher!",
296
- },
297
- {
298
- type: "input",
299
- name: "targetUsers",
300
- message: "👥 Wer sind Ihre Zielgruppen/User?",
301
- validate: (input) =>
302
- input.length > 0 ? true : "Bitte beschreiben Sie Ihre Zielgruppe!",
303
- },
304
- ]);
305
-
306
- this.config.projectName = projectName;
307
- this.config.projectIdea = projectIdea;
308
- this.config.targetUsers = targetUsers;
309
-
310
- console.log(chalk.green(`✅ Projektidee erfasst: "${projectName}"\n`));
311
- }
312
-
313
- async createProjectPlan() {
314
- console.log(chalk.yellow("📋 Projektplan wird erstellt..."));
315
- console.log(chalk.gray("Basierend auf Ihrer Idee und dem Projekt-Typ\n"));
316
-
317
- // Hier würde normalerweise die team-fullstack.yaml verwendet
318
- const plan = this.generateProjectPlan();
319
- this.config.projectPlan = plan;
320
-
321
- console.log(chalk.cyan("📋 Ihr Projektplan:"));
322
- console.log(chalk.white("─".repeat(50)));
323
- console.log(plan);
324
- console.log(chalk.white("─".repeat(50) + "\n"));
325
- }
326
-
327
- async approvePlan() {
328
- const { approved, changes } = await inquirer.prompt([
329
- {
330
- type: "confirm",
331
- name: "approved",
332
- message: "✅ Sind Sie mit diesem Plan zufrieden?",
333
- default: true,
334
- },
335
- {
336
- type: "input",
337
- name: "changes",
338
- message:
339
- "📝 Welche Änderungen möchten Sie? (oder ENTER für keine Änderungen)",
340
- when: (answers) => !answers.approved,
341
- },
342
- ]);
343
-
344
- if (!approved && changes) {
345
- console.log(chalk.yellow("📝 Plan wird angepasst..."));
346
- this.config.planChanges = changes;
347
- // Hier würde Plan angepasst werden
348
- console.log(chalk.green("✅ Plan wurde angepasst!\n"));
349
- } else {
350
- console.log(
351
- chalk.green("✅ Plan freigegeben - Entwicklung kann starten!\n")
352
- );
353
- }
354
-
355
- this.config.planApproved = true;
356
- }
357
-
358
- generateProjectPlan() {
359
- const { projectType, projectName, projectIdea, targetUsers } = this.config;
360
-
361
- return `🎯 PROJEKTPLAN: ${projectName}
362
-
363
- 📊 PROJEKT-TYP: ${
364
- projectType === "greenfield"
365
- ? "Greenfield (Neues Projekt)"
366
- : "Brownfield (Bestehendes Projekt)"
367
- }
368
- 👥 ZIELGRUPPE: ${targetUsers}
369
-
370
- 💡 PROJEKTIDEE:
371
- ${projectIdea}
372
-
373
- 🚀 ENTWICKLUNGS-PIPELINE:
374
- ${
375
- projectType === "greenfield"
376
- ? `
377
- 1. 📋 PO (Product Owner) → PRD erstellen
378
- 2. 🏗️ Architect → System-Architektur designen
379
- 3. 🎨 UX Expert → UI/UX Design
380
- 4. 📝 Story Master → User Stories aufbrechen
381
- 5. 💻 Developer → Features implementieren
382
- 6. ✅ QA Expert → Testing & Validierung
383
- 7. 📊 SM (Scrum Master) → Sprint-Koordination
384
- `
385
- : `
386
- 1. 📋 PO → Bestehende Dokumentation analysieren
387
- 2. 🏗️ Architect → Architektur-Review
388
- 3. 📝 Story Master → Neue Features planen
389
- 4. 💻 Developer → Features in bestehende Basis integrieren
390
- 5. ✅ QA Expert → Regression Testing
391
- 6. 📊 SM → Change Management
392
- `
393
- }
394
-
395
- 🎮 ONE-CLICK BEFEHLE:
396
- - /start → Gesamten Workflow starten
397
- - /plan → Detailplanung
398
- - /develop → Entwicklung beginnen
399
- - /review → Code Review
400
- - /deploy → Deployment vorbereiten`;
401
- }
402
-
403
- async setupBMADCoreConfig() {
404
- console.log(chalk.yellow("⚙️ BMAD Core Configuration einrichten..."));
405
-
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
- }
411
-
412
- // Create core-config.yaml
413
- const coreConfigPath = path.join(bmadCoreDir, "core-config.yaml");
414
- fs.writeFileSync(coreConfigPath, this.generateCoreConfig());
415
-
416
- // Create technical-preferences.md
417
- const techPrefsPath = path.join(bmadCoreDir, "data");
418
- if (!fs.existsSync(techPrefsPath)) {
419
- fs.mkdirSync(techPrefsPath, { recursive: true });
420
- }
421
- fs.writeFileSync(
422
- path.join(techPrefsPath, "technical-preferences.md"),
423
- this.generateTechnicalPreferences()
424
- );
425
-
426
- console.log(chalk.green("✅ BMAD Core Configuration bereit!\n"));
427
- }
428
-
429
- async setupDocumentTemplates() {
430
- console.log(chalk.yellow("📄 Document Templates & Struktur einrichten..."));
431
-
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");
436
-
437
- [docsDir, archDir, storiesDir].forEach((dir) => {
438
- if (!fs.existsSync(dir)) {
439
- fs.mkdirSync(dir, { recursive: true });
440
- }
441
- });
442
-
443
- // Create templates
444
- const templatesDir = path.join(this.appiqPath, "templates");
445
- if (!fs.existsSync(templatesDir)) {
446
- fs.mkdirSync(templatesDir, { recursive: true });
447
- }
448
-
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
- );
460
-
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());
470
- }
471
-
472
- console.log(chalk.green("✅ Document Templates erstellt!\n"));
473
- }
474
-
475
- async setupAgentDependencies() {
476
- console.log(chalk.yellow("🔗 Agent Dependencies System einrichten..."));
477
-
478
- const agentsDir = path.join(this.appiqPath, "agents");
479
- const tasksDir = path.join(this.appiqPath, "tasks");
480
- const dataDir = path.join(this.appiqPath, "data");
481
-
482
- // Create directories
483
- [tasksDir, dataDir].forEach((dir) => {
484
- if (!fs.existsSync(dir)) {
485
- fs.mkdirSync(dir, { recursive: true });
486
- }
487
- });
488
-
489
- // Create BMAD Knowledge Base
490
- fs.writeFileSync(
491
- path.join(dataDir, "bmad-kb.md"),
492
- this.generateBMADKnowledgeBase()
493
- );
494
-
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
- );
508
-
509
- // Add Flutter-specific agents if Flutter project
510
- if (this.config.techStack.isFlutter) {
511
- await this.addFlutterAgents();
512
- }
513
-
514
- // Update agents with proper dependencies
515
- await this.updateAgentsWithDependencies();
516
-
517
- console.log(chalk.green("✅ Agent Dependencies System bereit!\n"));
518
- }
519
-
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
- };
541
-
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
- );
551
-
552
- // Create workflow guides
553
- const workflowsDir = path.join(this.appiqPath, "workflows");
554
- if (!fs.existsSync(workflowsDir)) {
555
- fs.mkdirSync(workflowsDir, { recursive: true });
556
- }
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
-
574
- generateCoreConfig() {
575
- return `# BMAD Core Configuration
576
- # Built with ❤️ based on Bmad-Method
577
-
578
- project:
579
- name: ${this.config.projectName || "Unbenanntes Projekt"}
580
- type: ${this.config.projectType}
581
- created: ${new Date().toISOString()}
582
-
583
- # Files that dev agent should ALWAYS load into context
584
- devLoadAlwaysFiles:
585
- - docs/architecture/coding-standards.md
586
- - docs/architecture/tech-stack.md
587
- - docs/architecture/project-structure.md
588
-
589
- # Document paths configuration
590
- documentPaths:
591
- prd: "docs/prd.md"
592
- architecture: "docs/architecture.md"
593
- stories: "docs/stories/"
594
- templates: "appiq-solution/templates/"
595
-
596
- # Agent dependencies configuration
597
- dependencies:
598
- templates:
599
- - prd-template.md
600
- - architecture-template.md
601
- - story-template.md
602
- tasks:
603
- - create-doc.md
604
- - shard-doc.md
605
- - validate-story.md
606
- data:
607
- - bmad-kb.md
608
- - technical-preferences.md
609
- `;
610
- }
611
-
612
- generateTechnicalPreferences() {
613
- return `# Technical Preferences
614
-
615
- *Diese Datei hilft PM und Architect dabei, Ihre bevorzugten Design-Patterns und Technologien zu berücksichtigen.*
616
-
617
- ## Projekt: ${this.config.projectName || "Unbenanntes Projekt"}
618
- **Platform:** ${this.config.techStack.platform || 'nicht definiert'}
619
-
620
- ### Bevorzugte Technologien
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 ? `
661
- **Backend:**
662
- - Runtime: Node.js, Python, Go
663
- - Framework: Express, FastAPI, Gin
664
- - Database: PostgreSQL, MongoDB, Redis
665
-
666
- **DevOps:**
667
- - Deployment: Vercel, Railway, AWS
668
- - CI/CD: GitHub Actions, GitLab CI
669
- - Monitoring: Sentry, LogRocket
670
- ` : ''}
671
-
672
- ${this.config.projectType === "brownfield" ? `
673
- **Bestehende Technologien erweitern:**
674
- - Kompatibilität mit bestehender Code-Basis beachten
675
- - Minimale neue Dependencies
676
- - Schrittweise Migration wenn nötig
677
- ` : ''}
678
-
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
- ` : `
687
- - **Architektur:** Clean Architecture, Hexagonal, MVC
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
- ` : `
700
- - **Testing:** TDD/BDD, Unit + Integration Tests
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
- ` : ''}
718
-
719
- ### Coding Standards
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'}
722
- - **Functions:** Kleine, fokussierte Funktionen (<50 Zeilen)
723
- - **Comments:** Erkläre WARUM, nicht WAS
724
-
725
- ### Präferenzen
726
- - **Performance:** Optimierung vor Abstraktion
727
- - **Security:** Security-by-Design
728
- - **Accessibility:** ${this.config.techStack.isFlutter ? 'Flutter Accessibility Widget support' : 'WCAG 2.1 AA Standard'}
729
- - **Mobile:** Mobile-First Approach
730
-
731
- ---
732
- *Platform: ${this.config.techStack.platform}*
733
- *MCP Configured: ${this.config.techStack.isFlutter ? 'Dart MCP ✅' : 'Standard'}*
734
- *Aktualisiert: ${new Date().toLocaleDateString("de-DE")}*
735
- `;
736
- }
737
-
738
- generatePRDTemplate() {
739
- return `# Product Requirements Document (PRD)
740
-
741
- ## Projekt: [PROJECT_NAME]
742
-
743
- ### 1. Problem Statement
744
- *Welches Problem lösen wir?*
745
-
746
- ### 2. Solution Overview
747
- *Wie lösen wir das Problem?*
748
-
749
- ### 3. Target Users
750
- *Wer sind unsere Zielgruppen?*
751
-
752
- ### 4. Functional Requirements (FRs)
753
- *Was muss das System können?*
754
-
755
- #### 4.1 Core Features
756
- - [ ] Feature 1
757
- - [ ] Feature 2
758
-
759
- #### 4.2 Advanced Features
760
- - [ ] Advanced Feature 1
761
- - [ ] Advanced Feature 2
762
-
763
- ### 5. Non-Functional Requirements (NFRs)
764
- *Wie gut muss das System funktionieren?*
765
-
766
- #### 5.1 Performance
767
- - Response Time: < 200ms
768
- - Throughput: [SPECIFY]
769
-
770
- #### 5.2 Security
771
- - Authentication: [METHOD]
772
- - Authorization: [RBAC/ABAC]
773
-
774
- #### 5.3 Scalability
775
- - Users: [NUMBER]
776
- - Data: [VOLUME]
777
-
778
- ### 6. User Stories & Epics
779
-
780
- #### Epic 1: [EPIC_NAME]
781
- - **Story 1.1:** Als [USER] möchte ich [ACTION] um [BENEFIT]
782
- - **Story 1.2:** Als [USER] möchte ich [ACTION] um [BENEFIT]
783
-
784
- #### Epic 2: [EPIC_NAME]
785
- - **Story 2.1:** Als [USER] möchte ich [ACTION] um [BENEFIT]
786
- - **Story 2.2:** Als [USER] möchte ich [ACTION] um [BENEFIT]
787
-
788
- ### 7. Success Metrics
789
- *Wie messen wir Erfolg?*
790
-
791
- - Metric 1: [DEFINITION]
792
- - Metric 2: [DEFINITION]
793
-
794
- ---
795
- *Erstellt mit Appiq Solution - Built with ❤️ based on Bmad-Method*
796
- `;
797
- }
798
-
799
- generateArchitectureTemplate() {
800
- return `# System Architecture
801
-
802
- ## Projekt: [PROJECT_NAME]
803
-
804
- ### 1. Architecture Overview
805
- *High-level Systemübersicht*
806
-
807
- ### 2. Technology Stack
808
-
809
- #### Frontend
810
- - Framework: [FRAMEWORK]
811
- - State Management: [STATE_MANAGEMENT]
812
- - Styling: [STYLING_SOLUTION]
813
-
814
- #### Backend
815
- - Runtime: [RUNTIME]
816
- - Framework: [FRAMEWORK]
817
- - Database: [DATABASE]
818
-
819
- #### Infrastructure
820
- - Hosting: [HOSTING_PLATFORM]
821
- - CI/CD: [CI_CD_SOLUTION]
822
-
823
- ### 3. System Components
824
-
825
- #### 3.1 Frontend Components
826
- - Component Library
827
- - State Management
828
- - Routing
829
- - API Layer
830
-
831
- #### 3.2 Backend Services
832
- - API Layer
833
- - Business Logic
834
- - Data Access Layer
835
- - External Integrations
836
-
837
- ### 4. Data Models
838
-
839
- #### User Model
840
- \`\`\`
841
- {
842
- id: string
843
- email: string
844
- name: string
845
- createdAt: Date
846
- }
847
- \`\`\`
848
-
849
- ### 5. API Design
850
-
851
- #### Authentication
852
- - POST /api/auth/login
853
- - POST /api/auth/register
854
- - POST /api/auth/logout
855
-
856
- #### Core Resources
857
- - GET /api/[resource]
858
- - POST /api/[resource]
859
- - PUT /api/[resource]/:id
860
- - DELETE /api/[resource]/:id
861
-
862
- ### 6. Security Considerations
863
- - Authentication Strategy
864
- - Authorization Model
865
- - Data Validation
866
- - Rate Limiting
867
-
868
- ### 7. Performance Considerations
869
- - Caching Strategy
870
- - Database Optimization
871
- - CDN Usage
872
- - Lazy Loading
873
-
874
- ### 8. Deployment Architecture
875
- - Development Environment
876
- - Staging Environment
877
- - Production Environment
878
-
879
- ---
880
- *Erstellt mit Appiq Solution - Built with ❤️ based on Bmad-Method*
881
- `;
882
- }
883
-
884
- generateStoryTemplate() {
885
- return `# User Story: [STORY_TITLE]
886
-
887
- ## Story Details
888
- **Als** [USER_TYPE]
889
- **möchte ich** [ACTION]
890
- **um** [BENEFIT]
891
-
892
- ## Acceptance Criteria
893
- - [ ] Criterion 1
894
- - [ ] Criterion 2
895
- - [ ] Criterion 3
896
-
897
- ## Technical Tasks
898
- - [ ] Task 1: [DESCRIPTION]
899
- - [ ] Task 2: [DESCRIPTION]
900
- - [ ] Task 3: [DESCRIPTION]
901
-
902
- ## Definition of Done
903
- - [ ] Code implemented and tested
904
- - [ ] Unit tests written and passing
905
- - [ ] Integration tests passing
906
- - [ ] Code reviewed and approved
907
- - [ ] Documentation updated
908
- - [ ] Deployed to staging
909
- - [ ] User acceptance testing completed
910
-
911
- ## Dependencies
912
- - [ ] Dependency 1
913
- - [ ] Dependency 2
914
-
915
- ## Estimation
916
- **Story Points:** [POINTS]
917
- **Estimated Hours:** [HOURS]
918
-
919
- ## Notes
920
- *Zusätzliche Notizen und Überlegungen*
921
-
922
- ---
923
- **Sprint:** [SPRINT_NUMBER]
924
- **Assigned to:** [DEVELOPER]
925
- **Status:** [TODO/IN_PROGRESS/REVIEW/DONE]
926
-
927
- ---
928
- *Erstellt mit Appiq Solution - Built with ❤️ based on Bmad-Method*
929
- `;
930
- }
931
-
932
- generateInitialPRD() {
933
- const { projectName, projectIdea, targetUsers, projectType } = this.config;
934
-
935
- return `# Product Requirements Document (PRD)
936
-
937
- ## Projekt: ${projectName}
938
-
939
- ### 1. Problem Statement
940
- ${projectIdea}
941
-
942
- ### 2. Target Users
943
- ${targetUsers}
944
-
945
- ### 3. Project Type
946
- ${
947
- projectType === "greenfield"
948
- ? "✨ Greenfield (Neues Projekt)"
949
- : "🔧 Brownfield (Bestehendes Projekt)"
950
- }
951
-
952
- ### 4. Functional Requirements (FRs)
953
- *Diese Sektion wird durch den PM Agent vervollständigt*
954
-
955
- #### 4.1 Core Features
956
- - [ ] Feature wird durch PM definiert
957
-
958
- ### 5. Non-Functional Requirements (NFRs)
959
- *Diese Sektion wird durch den Architect Agent vervollständigt*
960
-
961
- ### 6. User Stories & Epics
962
- *Diese Sektion wird durch den Story Master Agent vervollständigt*
963
-
964
- ---
965
- **Status:** 📋 Planning Phase Complete - Ready for PM Agent
966
- **Nächster Schritt:** PM Agent für detaillierte Requirements
967
- **Created:** ${new Date().toLocaleDateString("de-DE")}
968
-
969
- ---
970
- *Erstellt mit Appiq Solution - Built with ❤️ based on Bmad-Method*
971
- `;
972
- }
973
-
974
- generateBMADKnowledgeBase() {
975
- return `# BMAD Knowledge Base
976
-
977
- ## The BMad Planning + Execution Workflow
978
-
979
- ### Planning Workflow (Web UI or Powerful IDE Agents)
980
- 1. **Analyst** (Optional): Market Research, Competitor Analysis, Project Brief
981
- 2. **PM**: Create PRD from Brief with FRs, NFRs, Epics & Stories
982
- 3. **UX Expert** (Optional): Create Front End Spec, Generate UI Prompts
983
- 4. **Architect**: Create Architecture from PRD + UX Spec
984
- 5. **PO**: Run Master Checklist, validate document alignment
985
-
986
- ### Critical Transition: Web UI → IDE
987
- - Copy documents to project (docs/prd.md, docs/architecture.md)
988
- - Switch to IDE
989
- - **PO**: Shard Documents (CRITICAL STEP)
990
- - Begin Development Cycle
991
-
992
- ### Core Development Cycle (IDE)
993
- 1. **SM**: Review previous story dev/QA notes
994
- 2. **SM**: Draft next story from sharded epic + architecture
995
- 3. **PO**: Validate story draft (optional)
996
- 4. **User Approval** of story
997
- 5. **Dev**: Sequential task execution, implement tasks + tests
998
- 6. **Dev**: Run all validations, mark ready for review
999
- 7. **User Verification**: Request QA or approve
1000
- 8. **QA**: Senior dev review + active refactoring (if requested)
1001
- 9. **IMPORTANT**: Verify all regression tests and linting pass
1002
- 10. **IMPORTANT**: COMMIT CHANGES BEFORE PROCEEDING
1003
- 11. Mark story as done, loop back to SM
1004
-
1005
- ### Key Principles
1006
- - **Document Sharding**: Critical step after planning phase
1007
- - **Context Management**: Keep files lean and focused
1008
- - **Commit Regularly**: Save work frequently, especially after QA
1009
- - **Agent Selection**: Use appropriate agent for each task
1010
- - **Dependencies**: Each agent loads only what it needs
1011
-
1012
- ### Special Agents
1013
- - **BMad-Master**: Can do any task except story implementation
1014
- - **BMad-Orchestrator**: Heavy-weight agent for web bundles only
1015
-
1016
- ### Technical Configuration
1017
- - **core-config.yaml**: devLoadAlwaysFiles configuration
1018
- - **technical-preferences.md**: Bias PM/Architect recommendations
1019
- - **Dependencies**: templates, tasks, data for each agent
1020
-
1021
- ---
1022
- *Built with ❤️ based on Bmad-Method*
1023
- `;
1024
- }
1025
-
1026
- generateCreateDocTask() {
1027
- return `# Create Document Task
1028
-
1029
- ## Purpose
1030
- Create structured documents following BMAD templates and standards.
1031
-
1032
- ## Usage
1033
- This task helps agents create consistent, well-structured documents.
1034
-
1035
- ## Process
1036
- 1. **Identify Document Type**: PRD, Architecture, Story, etc.
1037
- 2. **Load Template**: Use appropriate template from templates/
1038
- 3. **Gather Requirements**: Collect all necessary information
1039
- 4. **Fill Template**: Replace placeholders with actual content
1040
- 5. **Validate Structure**: Ensure all sections are complete
1041
- 6. **Save Document**: Store in correct location (docs/)
1042
-
1043
- ## Templates Available
1044
- - prd-template.md
1045
- - architecture-template.md
1046
- - story-template.md
1047
-
1048
- ## Best Practices
1049
- - Follow template structure exactly
1050
- - Replace ALL placeholders
1051
- - Include creation date and status
1052
- - Link to related documents
1053
- - Use consistent formatting
1054
-
1055
- ## Output Location
1056
- - PRD: docs/prd.md
1057
- - Architecture: docs/architecture.md
1058
- - Stories: docs/stories/[story-name].md
1059
-
1060
- ---
1061
- *Built with ❤️ based on Bmad-Method*
1062
- `;
1063
- }
1064
-
1065
- generateShardDocTask() {
1066
- return `# Document Sharding Task
1067
-
1068
- ## Purpose
1069
- **CRITICAL STEP**: Break down large documents into focused, manageable pieces for agents.
1070
-
1071
- ## When to Use
1072
- - After planning phase completion
1073
- - Before beginning development cycle
1074
- - When switching from Web UI to IDE
1075
-
1076
- ## Process
1077
- 1. **Identify Source Document**: Usually PRD or Architecture
1078
- 2. **Analyze Structure**: Find natural breaking points
1079
- 3. **Create Focused Files**: Each file serves one purpose
1080
- 4. **Maintain References**: Link shards together
1081
- 5. **Update devLoadAlwaysFiles**: Configure core-config.yaml
1082
-
1083
- ## Sharding Strategy
1084
-
1085
- ### PRD Sharding
1086
- - **Core Requirements**: docs/requirements/core.md
1087
- - **User Stories**: docs/stories/ (individual files)
1088
- - **Success Metrics**: docs/metrics.md
1089
-
1090
- ### Architecture Sharding
1091
- - **Tech Stack**: docs/architecture/tech-stack.md
1092
- - **Coding Standards**: docs/architecture/coding-standards.md
1093
- - **Project Structure**: docs/architecture/project-structure.md
1094
- - **API Design**: docs/architecture/api-design.md
1095
- - **Data Models**: docs/architecture/data-models.md
1096
-
1097
- ## Critical Points
1098
- - **Lean Files**: Each shard should be focused and minimal
1099
- - **Dev Context**: Sharded files go into devLoadAlwaysFiles
1100
- - **Agent Performance**: Smaller context = better performance
1101
- - **Maintainability**: Easier to update specific aspects
1102
-
1103
- ## Post-Sharding
1104
- 1. Update core-config.yaml devLoadAlwaysFiles
1105
- 2. Verify all shards are accessible
1106
- 3. Test agent context loading
1107
- 4. Begin development cycle
1108
-
1109
- ---
1110
- *Built with ❤️ based on Bmad-Method*
1111
- `;
1112
- }
1113
-
1114
- generateValidateStoryTask() {
1115
- return `# Validate Story Task
1116
-
1117
- ## Purpose
1118
- Ensure user stories align with PRD, architecture, and project goals.
1119
-
1120
- ## When to Use
1121
- - Before story implementation begins
1122
- - When SM drafts new stories
1123
- - When stories are modified
1124
-
1125
- ## Validation Checklist
1126
-
1127
- ### Story Structure
1128
- - [ ] Clear user role defined
1129
- - [ ] Specific action described
1130
- - [ ] Business value stated
1131
- - [ ] Acceptance criteria present
1132
-
1133
- ### Technical Alignment
1134
- - [ ] Aligns with architecture decisions
1135
- - [ ] Fits within tech stack constraints
1136
- - [ ] Dependencies identified
1137
- - [ ] Implementation feasible
1138
-
1139
- ### Business Alignment
1140
- - [ ] Supports PRD objectives
1141
- - [ ] Addresses user needs
1142
- - [ ] Measurable outcomes
1143
- - [ ] Priority justified
1144
-
1145
- ### Quality Gates
1146
- - [ ] Testable acceptance criteria
1147
- - [ ] Definition of done complete
1148
- - [ ] Effort estimation reasonable
1149
- - [ ] Risk assessment done
1150
-
1151
- ## Process
1152
- 1. **Load References**: PRD, Architecture, related stories
1153
- 2. **Check Structure**: Verify story template compliance
1154
- 3. **Validate Alignment**: Against PRD and architecture
1155
- 4. **Assess Dependencies**: Identify blockers or prerequisites
1156
- 5. **Review Quality**: Ensure story is ready for development
1157
- 6. **Provide Feedback**: Clear recommendations for improvements
1158
-
1159
- ## Common Issues
1160
- - Vague acceptance criteria
1161
- - Missing technical dependencies
1162
- - Misalignment with architecture
1163
- - Unrealistic scope or effort
1164
-
1165
- ## Output
1166
- - **Validation Status**: Pass/Fail with reasons
1167
- - **Recommendations**: Specific improvements needed
1168
- - **Dependencies**: List of prerequisites
1169
- - **Risk Assessment**: Potential implementation challenges
1170
-
1171
- ---
1172
- *Built with ❤️ based on Bmad-Method*
1173
- `;
1174
- }
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
-
1332
- async updateAgentsWithDependencies() {
1333
- console.log(chalk.gray(" 🔗 Updating agents with BMAD dependencies..."));
1334
-
1335
- const agentsDir = path.join(this.appiqPath, "agents");
1336
- const agents = fs.readdirSync(agentsDir);
1337
-
1338
- for (const agentFile of agents) {
1339
- const agentPath = path.join(agentsDir, agentFile);
1340
- let content = fs.readFileSync(agentPath, "utf8");
1341
-
1342
- // Add BMAD dependencies section to each agent
1343
- const dependenciesSection = `
1344
-
1345
- ## 🔗 BMAD Dependencies
1346
-
1347
- ### Templates
1348
- - prd-template.md
1349
- - architecture-template.md
1350
- - story-template.md
1351
-
1352
- ### Tasks
1353
- - create-doc.md
1354
- - shard-doc.md
1355
- - validate-story.md
1356
-
1357
- ### Data
1358
- - bmad-kb.md
1359
- - technical-preferences.md
1360
-
1361
- ### Configuration
1362
- - core-config.yaml (devLoadAlwaysFiles)
1363
-
1364
- ## 🎯 BMAD Workflow Integration
1365
-
1366
- **Planning Phase:** Web UI → IDE Transition → Document Sharding
1367
- **Development Phase:** SM → PO → Dev → QA → Loop
1368
- **Critical Points:** Commit before proceeding, verify tests passing
1369
-
1370
- `;
1371
-
1372
- // Add dependencies section before the final line
1373
- const lines = content.split("\n");
1374
- const lastLine = lines.pop(); // Remove last line
1375
- lines.push(dependenciesSection);
1376
- lines.push(lastLine); // Add last line back
1377
-
1378
- fs.writeFileSync(agentPath, lines.join("\n"));
1379
- }
1380
- }
1381
-
1382
- generateBMADOrchestration(config) {
1383
- return `# BMAD Full Orchestration
1384
- # Built with ❤️ based on Bmad-Method
1385
-
1386
- project:
1387
- name: ${this.config.projectName}
1388
- type: ${this.config.projectType}
1389
- plan_approved: ${this.config.planApproved}
1390
- created: ${new Date().toISOString()}
1391
-
1392
- # BMAD Planning Phase (Web UI/Powerful IDE)
1393
- planning_phase:
1394
- workflow: ${config.planningPhase.workflow}
1395
- agents:
1396
- ${config.planningPhase.agents.map((agent) => ` - ${agent}`).join("\n")}
1397
-
1398
- flow:
1399
- 1: "analyst → research & project brief (optional)"
1400
- 2: "pm → create PRD from brief"
1401
- 3: "ux-expert → create frontend spec (optional)"
1402
- 4: "architect → create architecture from PRD + UX"
1403
- 5: "po → run master checklist & validate alignment"
1404
-
1405
- # Critical Transition: Web UI → IDE
1406
- transition:
1407
- type: ${config.transitions.planningToIDE}
1408
- requirements:
1409
- - "Copy docs/prd.md and docs/architecture.md to project"
1410
- - "Switch to IDE"
1411
- - "PO: Shard documents (CRITICAL)"
1412
- - "Update core-config.yaml devLoadAlwaysFiles"
1413
-
1414
- # BMAD Development Phase (IDE Only)
1415
- development_phase:
1416
- workflow: ${config.developmentPhase.workflow}
1417
- agents:
1418
- ${config.developmentPhase.agents.map((agent) => ` - ${agent}`).join("\n")}
1419
-
1420
- cycle:
1421
- 1: "sm → review previous story dev/QA notes"
1422
- 2: "sm → draft next story from sharded epic + architecture"
1423
- 3: "po → validate story draft (optional)"
1424
- 4: "user → approve story"
1425
- 5: "dev → sequential task execution + implementation"
1426
- 6: "dev → run all validations, mark ready for review"
1427
- 7: "user → verify (request QA or approve)"
1428
- 8: "qa → senior dev review + active refactoring (if requested)"
1429
- 9: "CRITICAL → verify regression tests + linting pass"
1430
- 10: "CRITICAL → COMMIT CHANGES BEFORE PROCEEDING"
1431
- 11: "mark story done → loop back to sm"
1432
-
1433
- # Critical Commit Points
1434
- commit_points:
1435
- ${config.transitions.criticalCommitPoints
1436
- .map((point) => ` - ${point}`)
1437
- .join("\n")}
1438
-
1439
- # IDE Integration
1440
- ides:
1441
- ${this.config.selectedIDEs
1442
- .map(
1443
- (ide) => ` - name: ${this.getIDEName(ide)}
1444
- config_path: ${this.getIDEConfig(ide).dir}
1445
- file_format: ${this.getIDEConfig(ide).suffix}`
1446
- )
1447
- .join("\n")}
1448
-
1449
- # Context Management
1450
- context:
1451
- dev_always_files:
1452
- - docs/architecture/coding-standards.md
1453
- - docs/architecture/tech-stack.md
1454
- - docs/architecture/project-structure.md
1455
-
1456
- agent_dependencies:
1457
- templates: ["prd-template.md", "architecture-template.md", "story-template.md"]
1458
- tasks: ["create-doc.md", "shard-doc.md", "validate-story.md"]
1459
- data: ["bmad-kb.md", "technical-preferences.md"]
1460
-
1461
- ---
1462
- *Powered by Appiq Solution - Built with ❤️ based on Bmad-Method*
1463
- `;
1464
- }
1465
-
1466
- generatePlanningWorkflow() {
1467
- return `# BMAD Planning Workflow
1468
-
1469
- ## Übersicht
1470
- Die Planungsphase folgt einem strukturierten Workflow, idealerweise in Web UI für Kosteneffizienz.
1471
-
1472
- ## Planning Flow
1473
-
1474
- ### 1. Start: Projektidee
1475
- - Grundlegendes Konzept definiert
1476
- - Problem identifiziert
1477
-
1478
- ### 2. Analyst (Optional)
1479
- **Brainstorming:**
1480
- - Marktforschung
1481
- - Konkurrenzanalyse
1482
- - Projekt Brief erstellen
1483
-
1484
- ### 3. Project Manager (PM)
1485
- **PRD Erstellung:**
1486
- - PRD aus Brief erstellen (Fast Track)
1487
- - ODER interaktive PRD Erstellung (mehr Fragen)
1488
- - Functional Requirements (FRs)
1489
- - Non-Functional Requirements (NFRs)
1490
- - Epics & Stories definieren
1491
-
1492
- ### 4. UX Expert (Optional)
1493
- **Frontend Specification:**
1494
- - Frontend Spec erstellen
1495
- - UI Prompts für Lovable/V0 generieren (optional)
1496
-
1497
- ### 5. System Architect
1498
- **Architektur Design:**
1499
- - Architektur aus PRD erstellen
1500
- - ODER aus PRD + UX Spec erstellen
1501
- - Tech Stack definieren
1502
- - System Components planen
1503
-
1504
- ### 6. Product Owner (PO)
1505
- **Master Checklist:**
1506
- - Dokumenten-Alignment prüfen
1507
- - Epics & Stories aktualisieren (falls nötig)
1508
- - PRD/Architektur anpassen (falls nötig)
1509
-
1510
- ## Kritischer Übergang: Web UI → IDE
1511
-
1512
- ### ⚠️ WICHTIG: Transition Point
1513
- Sobald PO Dokumenten-Alignment bestätigt:
1514
-
1515
- 1. **Dokumente kopieren**: docs/prd.md und docs/architecture.md
1516
- 2. **IDE wechseln**: Projekt in bevorzugter Agentic IDE öffnen
1517
- 3. **Document Sharding**: PO Agent zum Shard der Dokumente verwenden
1518
- 4. **Development beginnen**: Core Development Cycle starten
1519
-
1520
- ## Qualitäts-Gates
1521
-
1522
- ### Planning Complete Criteria
1523
- - [ ] PRD vollständig und genehmigt
1524
- - [ ] Architektur vollständig und genehmigt
1525
- - [ ] UX Spec (falls erforderlich) genehmigt
1526
- - [ ] Alle Dokumente sind aligned
1527
- - [ ] Epics und Stories definiert
1528
- - [ ] Übergang zu IDE vorbereitet
1529
-
1530
- ## Nächste Schritte
1531
- Nach Planning Complete → **Document Sharding** → **Development Cycle**
1532
-
1533
- ---
1534
- *Built with ❤️ based on Bmad-Method*
1535
- `;
1536
- }
1537
-
1538
- generateDevelopmentCycle() {
1539
- return `# BMAD Core Development Cycle
1540
-
1541
- ## Übersicht
1542
- Strukturierter Entwicklungsworkflow in der IDE nach abgeschlossener Planungsphase.
1543
-
1544
- ## Voraussetzungen
1545
- - ✅ Planning Phase abgeschlossen
1546
- - ✅ Dokumente in Projekt kopiert (docs/prd.md, docs/architecture.md)
1547
- - ✅ **Document Sharding** durch PO Agent durchgeführt
1548
- - ✅ IDE-Setup komplett
1549
-
1550
- ## Development Cycle Flow
1551
-
1552
- ### 1. Scrum Master (SM)
1553
- **Story Vorbereitung:**
1554
- - Review previous story dev/QA notes
1555
- - Draft next story from sharded epic + architecture
1556
- - Berücksichtigt technical dependencies
1557
- - Erstellt realistische task breakdown
1558
-
1559
- ### 2. Product Owner (PO) - Optional
1560
- **Story Validation:**
1561
- - Validate story draft against artifacts
1562
- - Überprüft alignment mit PRD
1563
- - Bestätigt business value
1564
- - Kann übersprungen werden bei erfahrenen Teams
1565
-
1566
- ### 3. User Approval
1567
- **Story Freigabe:**
1568
- - ✅ **Approved**: Weiter zu Development
1569
- - ❌ **Needs Changes**: Zurück zu SM für Anpassungen
1570
-
1571
- ### 4. Developer (Dev)
1572
- **Implementation:**
1573
- - Sequential task execution
1574
- - Implement tasks + tests
1575
- - Run all validations
1576
- - Mark ready for review + add notes
1577
- - Dokumentiert implementation decisions
1578
-
1579
- ### 5. User Verification
1580
- **Review Decision:**
1581
- - 🔍 **Request QA Review**: Weiter zu QA Agent
1582
- - ✅ **Approve Without QA**: Direkt zu Final Checks
1583
- - ❌ **Needs Fixes**: Zurück zu Dev
1584
-
1585
- ### 6. QA Agent (Optional)
1586
- **Quality Assurance:**
1587
- - Senior dev review + active refactoring
1588
- - Review code, refactor, add tests
1589
- - Document notes and improvements
1590
- - **Decision**: Needs Dev Work OR Approved
1591
-
1592
- ### 7. Final Checks - ⚠️ CRITICAL
1593
- **Vor dem Abschluss:**
1594
- - ✅ Verify ALL regression tests passing
1595
- - ✅ Verify ALL linting passing
1596
- - ✅ Code review completed (if QA was used)
1597
- - ✅ Documentation updated
1598
-
1599
- ### 8. Commit - ⚠️ SUPER CRITICAL
1600
- **WICHTIG: COMMIT YOUR CHANGES BEFORE PROCEEDING!**
1601
- - Git add & commit all changes
1602
- - Include meaningful commit message
1603
- - Push to repository
1604
-
1605
- ### 9. Story Complete
1606
- **Mark als Done:**
1607
- - Story status → DONE
1608
- - Loop back to SM for next story
1609
-
1610
- ## Critical Points
1611
-
1612
- ### ⚠️ Commit Points
1613
- - **After QA Approval**: Always commit before marking done
1614
- - **Before Next Story**: Clean state for next iteration
1615
-
1616
- ### 🎯 Quality Gates
1617
- - All tests passing
1618
- - Linting clean
1619
- - Code reviewed (if QA used)
1620
- - Documentation current
1621
-
1622
- ### 📊 Context Management
1623
- - Keep relevant files only in context
1624
- - Use sharded documents
1625
- - Maintain lean, focused files
1626
-
1627
- ## Best Practices
1628
- - **Small Stories**: Keep stories manageable (< 1 week)
1629
- - **Regular Commits**: Commit frequently during development
1630
- - **Test First**: Write tests before or with implementation
1631
- - **Document Decisions**: Record architectural decisions
1632
-
1633
- ---
1634
- *Built with ❤️ based on Bmad-Method*
1635
- `;
1636
- }
1637
-
1638
- generateDocumentSharding() {
1639
- return `# Document Sharding Guide
1640
-
1641
- ## ⚠️ CRITICAL STEP
1642
- Document Sharding ist ein **essentieller Schritt** im BMAD Flow nach der Planungsphase.
1643
-
1644
- ## Wann Document Sharding durchführen?
1645
- - ✅ Nach Planning Phase Completion
1646
- - ✅ Beim Übergang von Web UI zu IDE
1647
- - ✅ Vor Beginn des Development Cycles
1648
- - ✅ Wenn Dokumente zu groß für Agent-Context werden
1649
-
1650
- ## Warum Document Sharding?
1651
- - **Performance**: Kleinere Context = bessere Agent-Performance
1652
- - **Focus**: Jede Datei dient einem spezifischen Zweck
1653
- - **Maintainability**: Einfacher zu aktualisieren und zu verwalten
1654
- - **Agent Efficiency**: Agents laden nur was sie brauchen
1655
-
1656
- ## Sharding Process
1657
-
1658
- ### 1. PRD Sharding
1659
- **Source**: docs/prd.md
1660
- **Target Structure**:
1661
- \`\`\`
1662
- docs/
1663
- ├── requirements/
1664
- │ ├── core.md # Core functional requirements
1665
- │ ├── non-functional.md # NFRs (performance, security)
1666
- │ └── success-metrics.md # KPIs and success criteria
1667
- ├── stories/
1668
- │ ├── epic-1-auth/
1669
- │ │ ├── story-1-1-login.md
1670
- │ │ └── story-1-2-register.md
1671
- │ └── epic-2-dashboard/
1672
- │ └── story-2-1-overview.md
1673
- \`\`\`
1674
-
1675
- ### 2. Architecture Sharding
1676
- **Source**: docs/architecture.md
1677
- **Target Structure**:
1678
- \`\`\`
1679
- docs/architecture/
1680
- ├── tech-stack.md # Technology decisions
1681
- ├── coding-standards.md # Code style and patterns
1682
- ├── project-structure.md # File/folder organization
1683
- ├── api-design.md # REST/GraphQL API specs
1684
- ├── data-models.md # Database schema
1685
- ├── security.md # Security considerations
1686
- └── deployment.md # Deployment architecture
1687
- \`\`\`
1688
-
1689
- ## Sharding Guidelines
1690
-
1691
- ### File Size
1692
- - **Target**: < 50 lines per sharded file
1693
- - **Maximum**: < 100 lines per sharded file
1694
- - **Focus**: One concern per file
1695
-
1696
- ### Naming Convention
1697
- - **kebab-case**: tech-stack.md, coding-standards.md
1698
- - **Descriptive**: Clear purpose from filename
1699
- - **Consistent**: Follow project conventions
1700
-
1701
- ### Content Rules
1702
- - **Atomic**: Each file covers one topic completely
1703
- - **Self-contained**: Can be understood independently
1704
- - **Linked**: Reference related files when needed
1705
- - **Lean**: Remove fluff, keep essentials
1706
-
1707
- ## Post-Sharding Configuration
1708
-
1709
- ### 1. Update core-config.yaml
1710
- \`\`\`yaml
1711
- devLoadAlwaysFiles:
1712
- - docs/architecture/coding-standards.md
1713
- - docs/architecture/tech-stack.md
1714
- - docs/architecture/project-structure.md
1715
- \`\`\`
1716
-
1717
- ### 2. Verify Agent Access
1718
- - Test that agents can load sharded files
1719
- - Ensure all references are correct
1720
- - Validate file paths in configuration
1721
-
1722
- ### 3. Update Templates
1723
- - Modify templates to reference sharded structure
1724
- - Update agent prompts to use sharded files
1725
- - Test template generation
1726
-
1727
- ## Quality Checks
1728
-
1729
- ### ✅ Sharding Complete Criteria
1730
- - [ ] All large documents sharded
1731
- - [ ] Each shard < 100 lines
1732
- - [ ] devLoadAlwaysFiles updated
1733
- - [ ] Agent dependencies resolved
1734
- - [ ] File references working
1735
- - [ ] Templates updated
1736
-
1737
- ### 🚨 Common Mistakes
1738
- - **Too Large**: Shards still too big (>100 lines)
1739
- - **Too Small**: Over-sharding (many 5-line files)
1740
- - **Broken Links**: References to old unified files
1741
- - **Missing Config**: devLoadAlwaysFiles not updated
1742
-
1743
- ## After Sharding
1744
- 1. **Test Agent Loading**: Verify agents can access all needed files
1745
- 2. **Begin Development**: Start Core Development Cycle
1746
- 3. **Monitor Performance**: Watch for context issues
1747
- 4. **Refine as Needed**: Adjust sharding based on usage
1748
-
1749
- ---
1750
- *Built with ❤️ based on Bmad-Method*
1751
- `;
1752
- }
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
-
1919
- async performInstallation() {
1920
- console.log(chalk.yellow("📦 Installation läuft..."));
1921
-
1922
- // Create appiq-solution directory
1923
- if (!fs.existsSync(this.appiqPath)) {
1924
- fs.mkdirSync(this.appiqPath, { recursive: true });
1925
- }
1926
-
1927
- // Install optimized agents
1928
- await this.installOptimizedAgents();
1929
-
1930
- // Install project-specific configs
1931
- await this.installProjectConfig();
1932
-
1933
- // Setup IDE integration
1934
- await this.setupIDEIntegration();
1935
-
1936
- console.log(chalk.green("✅ Installation abgeschlossen!\n"));
1937
- }
1938
-
1939
- async installOptimizedAgents() {
1940
- console.log(chalk.gray(" 📄 Optimierte Agents installieren..."));
1941
-
1942
- const agentsDir = path.join(this.appiqPath, "agents");
1943
- if (!fs.existsSync(agentsDir)) {
1944
- fs.mkdirSync(agentsDir, { recursive: true });
1945
- }
1946
-
1947
- // Core optimized agents
1948
- const agents = [
1949
- "smart-launcher",
1950
- "project-manager",
1951
- "architect",
1952
- "story-master",
1953
- "developer",
1954
- "qa-expert",
1955
- ];
1956
-
1957
- for (const agent of agents) {
1958
- await this.createOptimizedAgent(agent);
1959
- }
1960
- }
1961
-
1962
- async createOptimizedAgent(agentName) {
1963
- const agentContent = this.generateOptimizedAgentContent(agentName);
1964
- const filePath = path.join(this.appiqPath, "agents", `${agentName}.md`);
1965
- fs.writeFileSync(filePath, agentContent);
1966
- }
1967
-
1968
- generateOptimizedAgentContent(agentName) {
1969
- const agentConfigs = {
1970
- "smart-launcher": {
1971
- name: "Appiq Launcher",
1972
- role: "Intelligenter Projekt-Starter",
1973
- commands: ["/start", "/quick-setup", "/help"],
1974
- description:
1975
- "Startet automatisch den optimalen Workflow basierend auf Ihrem Projekt-Typ",
1976
- },
1977
- "project-manager": {
1978
- name: "Project Manager",
1979
- role: "PRD & Projekt-Planung",
1980
- commands: ["/prd", "/plan", "/epic"],
1981
- description: "Erstellt PRD und Projekt-Dokumentation",
1982
- },
1983
- architect: {
1984
- name: "System Architect",
1985
- role: "Technische Architektur",
1986
- commands: ["/architecture", "/tech-stack", "/design"],
1987
- description: "Entwickelt System-Architektur und Tech-Stack",
1988
- },
1989
- "story-master": {
1990
- name: "Story Master",
1991
- role: "User Stories & Sprint Planning",
1992
- commands: ["/story", "/sprint", "/tasks"],
1993
- description: "Erstellt User Stories und Sprint-Planung",
1994
- },
1995
- developer: {
1996
- name: "Senior Developer",
1997
- role: "Code Implementation",
1998
- commands: ["/code", "/implement", "/fix"],
1999
- description: "Implementiert Features und behebt Bugs",
2000
- },
2001
- "qa-expert": {
2002
- name: "QA Expert",
2003
- role: "Testing & Qualität",
2004
- commands: ["/test", "/review", "/validate"],
2005
- description: "Führt Tests durch und validiert Code-Qualität",
2006
- },
2007
- };
2008
-
2009
- const config = agentConfigs[agentName];
2010
-
2011
- return `# ${config.name}
2012
-
2013
- ## 🎯 Rolle
2014
- ${config.role}
2015
-
2016
- ## 📋 Verfügbare Kommandos
2017
- ${config.commands
2018
- .map((cmd) => `- **${cmd}** - ${config.description}`)
2019
- .join("\n")}
2020
-
2021
- ## 🚀 One-Click Workflows
2022
-
2023
- ### Für ${
2024
- this.config.projectType === "greenfield" ? "NEUE" : "BESTEHENDE"
2025
- } Projekte:
2026
-
2027
- ${
2028
- this.config.projectType === "greenfield"
2029
- ? this.generateGreenfieldWorkflow(config)
2030
- : this.generateBrownfieldWorkflow(config)
2031
- }
2032
-
2033
- ## 🎮 Einfache Nutzung
2034
-
2035
- 1. **Laden Sie diesen Agent in Ihre IDE**
2036
- 2. **Sagen Sie:** "Agiere als ${config.name}"
2037
- 3. **Verwenden Sie:** ${config.commands[0]} für Quick-Start
2038
-
2039
- ---
2040
- *Automatisch optimiert für ${this.config.selectedIDEs
2041
- .map((ide) => this.getIDEName(ide))
2042
- .join(", ")}*
2043
- *Powered by Appiq - Based on Bmad-Method*
2044
- `;
2045
- }
2046
-
2047
- generateGreenfieldWorkflow(config) {
2048
- const workflows = {
2049
- "Appiq Launcher": `
2050
- **🚀 Schnell-Start für neues Projekt:**
2051
- 1. \`/start\` - Automatische Projekt-Analyse
2052
- 2. Erstellt automatisch: PRD-Vorlage, Architektur-Basis, erste Stories
2053
- 3. **Wo alles hingehört:** Alle Dateien werden automatisch in \`docs/\` erstellt`,
2054
-
2055
- "Project Manager": `
2056
- **📋 PRD Erstellung:**
2057
- 1. \`/prd\` - Startet PRD-Assistent
2058
- 2. **Datei wird erstellt:** \`docs/prd.md\`
2059
- 3. **Nächster Schritt:** Architect für Architektur`,
2060
-
2061
- "System Architect": `
2062
- **🏗️ Architektur erstellen:**
2063
- 1. \`/architecture\` - Basierend auf PRD
2064
- 2. **Datei wird erstellt:** \`docs/architecture.md\`
2065
- 3. **Nächster Schritt:** Story Master für erste Stories`,
2066
-
2067
- "Story Master": `
2068
- **📝 Erste Stories:**
2069
- 1. \`/story\` - Erstellt erste User Story
2070
- 2. **Datei wird erstellt:** \`docs/stories/story-001.md\`
2071
- 3. **Nächster Schritt:** Developer für Implementation`,
2072
-
2073
- "Senior Developer": `
2074
- **💻 Implementation:**
2075
- 1. \`/implement\` - Implementiert aktuelle Story
2076
- 2. **Erstellt/bearbeitet:** Entsprechende Code-Dateien
2077
- 3. **Nächster Schritt:** QA Expert für Review`,
2078
-
2079
- "QA Expert": `
2080
- **✅ Testing & Review:**
2081
- 1. \`/review\` - Reviewed aktuellen Code
2082
- 2. **Erstellt:** Test-Dateien und Reports
2083
- 3. **Nächster Schritt:** Zurück zu Story Master für nächste Story`,
2084
- };
2085
-
2086
- return workflows[config.name] || "Standard Greenfield Workflow";
2087
- }
2088
-
2089
- generateBrownfieldWorkflow(config) {
2090
- const workflows = {
2091
- "Appiq Launcher": `
2092
- **🔧 Schnell-Start für bestehendes Projekt:**
2093
- 1. \`/analyze\` - Analysiert bestehendes Projekt
2094
- 2. **Findet:** Existierende Docs, Code-Struktur, Tech-Stack
2095
- 3. **Erstellt:** Angepasste Workflows für Ihr Projekt`,
2096
-
2097
- "Project Manager": `
2098
- **📋 Bestehende Dokumentation:**
2099
- 1. \`/analyze-docs\` - Scannt bestehende Dokumentation
2100
- 2. **Legt PRD ab in:** \`docs/prd.md\` (falls nicht vorhanden)
2101
- 3. **Nächster Schritt:** Architect für Architektur-Review`,
2102
-
2103
- "System Architect": `
2104
- **🏗️ Architektur-Review:**
2105
- 1. \`/review-architecture\` - Analysiert bestehende Struktur
2106
- 2. **Erstellt/updated:** \`docs/architecture.md\`
2107
- 3. **Nächster Schritt:** Story Master für neue Features`,
2108
-
2109
- "Story Master": `
2110
- **📝 Feature Stories:**
2111
- 1. \`/new-feature\` - Neue Story für bestehendes Projekt
2112
- 2. **Datei wird erstellt:** \`docs/stories/feature-XXX.md\`
2113
- 3. **Berücksichtigt:** Bestehende Code-Basis`,
2114
-
2115
- "Senior Developer": `
2116
- **💻 Feature Implementation:**
2117
- 1. \`/add-feature\` - Implementiert in bestehendem Code
2118
- 2. **Bearbeitet:** Bestehende Dateien sicher
2119
- 3. **Erstellt:** Neue Dateien wo nötig`,
2120
-
2121
- "QA Expert": `
2122
- **✅ Regression Testing:**
2123
- 1. \`/regression-test\` - Testet neue Features
2124
- 2. **Validiert:** Keine Breaking Changes
2125
- 3. **Erstellt:** Test-Reports für bestehende + neue Features`,
2126
- };
2127
-
2128
- return workflows[config.name] || "Standard Brownfield Workflow";
2129
- }
2130
-
2131
- async setupOneClickWorkflows() {
2132
- console.log(chalk.yellow("⚡ One-Click Workflows einrichten..."));
2133
-
2134
- // Create quick commands
2135
- const commandsDir = path.join(this.appiqPath, "commands");
2136
- if (!fs.existsSync(commandsDir)) {
2137
- fs.mkdirSync(commandsDir, { recursive: true });
2138
- }
2139
-
2140
- // Project-type specific quick starts
2141
- const quickStartContent = this.generateQuickStartScript();
2142
- fs.writeFileSync(
2143
- path.join(commandsDir, "quick-start.md"),
2144
- quickStartContent
2145
- );
2146
-
2147
- console.log(chalk.green("✅ One-Click Workflows bereit!\n"));
2148
- }
2149
-
2150
- generateQuickStartScript() {
2151
- return `# 🚀 Appiq Solution - BMAD Workflow Guide
2152
-
2153
- ## Projekt: ${this.config.projectName || "Unbenanntes Projekt"}
2154
- **Typ:** ${
2155
- this.config.projectType === "greenfield"
2156
- ? "✨ Greenfield (Neues Projekt)"
2157
- : "🔧 Brownfield (Bestehendes Projekt)"
2158
- }
2159
-
2160
- ## 📋 BMAD Planning Workflow (Phase 1)
2161
-
2162
- ### Option A: Web UI Planning (Kosteneffizient)
2163
- 1. Claude/Gemini/GPT mit team-fullstack Bundle verwenden
2164
- 2. **Flow:** Analyst → PM → UX Expert → Architect → PO
2165
- 3. **Output:** docs/prd.md, docs/architecture.md
2166
-
2167
- ### Option B: IDE Planning (Leistungsstark)
2168
- \`\`\`
2169
- @analyst → Market Research & Project Brief
2170
- @pm → PRD mit FRs, NFRs, Epics & Stories erstellen
2171
- @ux-expert → Frontend Spec (optional)
2172
- @architect → System Architecture design
2173
- @po → Master Checklist & Document Alignment
2174
- \`\`\`
2175
-
2176
- ## ⚠️ KRITISCHER ÜBERGANG: Document Sharding
2177
-
2178
- **ESSENTIAL STEP:**
2179
- \`\`\`
2180
- @po bitte shard die PRD und Architecture Dokumente in fokussierte Dateien
2181
- \`\`\`
2182
-
2183
- **Das erstellt:**
2184
- - docs/architecture/tech-stack.md ← Dev lädt immer
2185
- - docs/architecture/coding-standards.md ← Dev lädt immer
2186
- - docs/architecture/project-structure.md ← Dev lädt immer
2187
- - docs/requirements/core.md
2188
- - docs/stories/ (individual story files)
2189
-
2190
- ## 🚀 BMAD Development Cycle (Phase 2)
2191
-
2192
- ### Core Development Loop:
2193
- \`\`\`
2194
- 1. @sm → Review previous notes, draft next story from sharded epic
2195
- 2. @po → Validate story draft (optional)
2196
- 3. User → Approve story
2197
- 4. @dev → Sequential tasks, implement + tests, mark ready
2198
- 5. User → Verify (request QA or approve)
2199
- 6. @qa → Senior dev review + refactoring (optional)
2200
- 7. ⚠️ CRITICAL: Verify tests + linting pass
2201
- 8. ⚠️ SUPER CRITICAL: COMMIT CHANGES BEFORE PROCEEDING!
2202
- 9. Mark story done → Loop back to @sm
2203
- \`\`\`
2204
-
2205
- ## 🎯 One-Click Commands
2206
-
2207
- ### Planning:
2208
- - \`/plan\` → Start planning workflow
2209
- - \`/prd\` → Generate PRD
2210
- - \`/arch\` → Design architecture
2211
-
2212
- ### Critical Transition:
2213
- - \`/shard\` → Document sharding (ESSENTIAL!)
2214
-
2215
- ### Development:
2216
- - \`/story\` → Draft next story
2217
- - \`/dev\` → Start development
2218
- - \`/test\` → Run tests
2219
- - \`/qa\` → Request review
2220
- - \`/commit\` → Commit changes
2221
-
2222
- ### ${
2223
- this.config.projectType === "greenfield" ? "Greenfield" : "Brownfield"
2224
- } Specific:
2225
- ${
2226
- this.config.projectType === "greenfield"
2227
- ? `
2228
- - \`/start\` → Fresh project setup
2229
- - \`/design\` → Create from scratch
2230
- - \`/build\` → Build step by step
2231
- `
2232
- : `
2233
- - \`/analyze\` → Analyze existing code
2234
- - \`/document\` → Document current state
2235
- - \`/improve\` → Plan improvements
2236
- `
2237
- }
2238
-
2239
- ## 📊 File Structure
2240
-
2241
- \`\`\`
2242
- your-project/
2243
- ├── docs/
2244
- │ ├── prd.md ← Initial PRD
2245
- │ ├── architecture.md ← Initial Architecture
2246
- │ ├── architecture/ ← Sharded files
2247
- │ │ ├── tech-stack.md
2248
- │ │ ├── coding-standards.md
2249
- │ │ └── project-structure.md
2250
- │ ├── requirements/
2251
- │ │ └── core.md
2252
- │ └── stories/
2253
- │ ├── epic-1-auth/
2254
- │ └── epic-2-features/
2255
- ├── appiq-solution/
2256
- │ ├── agents/ ← AI-Agents
2257
- │ ├── templates/ ← Document templates
2258
- │ ├── workflows/ ← Workflow guides
2259
- │ └── .bmad-core/ ← BMAD configuration
2260
- └── .cursor/rules/ ← IDE integration
2261
- \`\`\`
2262
-
2263
- ## ⚠️ Critical Success Factors
2264
-
2265
- ### Document Sharding (ESSENTIAL):
2266
- - **MUST DO** after planning phase
2267
- - Creates focused, lean files for agents
2268
- - Improves agent performance dramatically
2269
-
2270
- ### Commit Points:
2271
- - After QA approval (always!)
2272
- - Before next story (clean state)
2273
- - Regular commits during development
2274
-
2275
- ### Quality Gates:
2276
- - All tests passing ✅
2277
- - Linting clean ✅
2278
- - Code reviewed (if QA used) ✅
2279
- - Documentation updated ✅
2280
-
2281
- ## 🆘 Help & Support
2282
-
2283
- - \`/help\` → Show all commands
2284
- - \`/workflow\` → Current workflow step
2285
- - \`/agents\` → Available agents
2286
- - \`/docs\` → Documentation
2287
-
2288
- ### Workflow Files:
2289
- - appiq-solution/workflows/planning-workflow.md
2290
- - appiq-solution/workflows/development-cycle.md
2291
- - appiq-solution/workflows/document-sharding.md
2292
-
2293
- ---
2294
- **IDEs:** ${this.config.selectedIDEs
2295
- .map((ide) => this.getIDEName(ide))
2296
- .join(", ")}
2297
- **Created:** ${new Date().toLocaleDateString("de-DE")}
2298
- **Powered by Appiq Solution - Built with ❤️ based on Bmad-Method**
2299
- `;
2300
- }
2301
-
2302
- async setupIDEIntegration() {
2303
- if (
2304
- this.config.selectedIDEs.includes("manual") &&
2305
- this.config.selectedIDEs.length === 1
2306
- )
2307
- return;
2308
-
2309
- console.log(chalk.gray(" 🔧 Mehrere IDE-Integrationen..."));
2310
-
2311
- for (const ide of this.config.selectedIDEs) {
2312
- if (ide === "manual") continue;
2313
-
2314
- console.log(
2315
- chalk.gray(` 📝 ${this.getIDEName(ide)} wird konfiguriert...`)
2316
- );
2317
-
2318
- const ideConfig = this.getIDEConfig(ide);
2319
- const ideDir = path.join(this.projectRoot, ideConfig.dir);
2320
-
2321
- if (!fs.existsSync(ideDir)) {
2322
- fs.mkdirSync(ideDir, { recursive: true });
2323
- }
2324
-
2325
- // Copy agents to IDE-specific format
2326
- const agentsPath = path.join(this.appiqPath, "agents");
2327
- const agents = fs.readdirSync(agentsPath);
2328
-
2329
- for (const agent of agents) {
2330
- const sourcePath = path.join(agentsPath, agent);
2331
- const targetPath = path.join(
2332
- ideDir,
2333
- agent.replace(".md", ideConfig.suffix)
2334
- );
2335
- fs.copyFileSync(sourcePath, targetPath);
2336
- }
2337
-
2338
- console.log(chalk.green(` ✅ ${this.getIDEName(ide)} konfiguriert`));
2339
- }
2340
-
2341
- console.log(chalk.green(" ✅ Alle IDE-Integrationen abgeschlossen!"));
2342
- }
2343
-
2344
- getIDEConfig(ide) {
2345
- const configs = {
2346
- cursor: { dir: ".cursor/rules", suffix: ".mdc" },
2347
- "claude-code": { dir: ".claude/commands/Appiq", suffix: ".md" },
2348
- windsurf: { dir: ".windsurf/rules", suffix: ".md" },
2349
- cline: { dir: ".clinerules", suffix: ".md" },
2350
- trae: { dir: ".trae/rules", suffix: ".md" },
2351
- roo: { dir: ".roo/agents", suffix: ".md" },
2352
- gemini: { dir: ".gemini/commands", suffix: ".md" },
2353
- "github-copilot": { dir: ".github/copilot", suffix: ".md" },
2354
- };
2355
- return configs[ide] || { dir: ".appiq-solution", suffix: ".md" };
2356
- }
2357
-
2358
- getIDEName(ide) {
2359
- const names = {
2360
- cursor: "Cursor",
2361
- "claude-code": "Claude Code CLI",
2362
- windsurf: "Windsurf",
2363
- cline: "VS Code + Cline",
2364
- trae: "Trae",
2365
- roo: "Roo Code",
2366
- gemini: "Gemini CLI",
2367
- "github-copilot": "GitHub Copilot",
2368
- manual: "Manuell",
2369
- };
2370
- return names[ide] || ide;
2371
- }
2372
-
2373
- async showSimpleInstructions() {
2374
- console.log(chalk.bold.green("🎉 Appiq Installation Erfolgreich!\n"));
2375
- console.log(chalk.dim("Built with ❤️ based on the amazing Bmad-Method"));
2376
- console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
2377
-
2378
- console.log(chalk.cyan("📋 Nächste Schritte (Super einfach):"));
2379
- console.log(chalk.white("════════════════════════════════════\n"));
2380
-
2381
- if (
2382
- this.config.selectedIDEs.length > 0 &&
2383
- !this.config.selectedIDEs.includes("manual")
2384
- ) {
2385
- console.log(
2386
- chalk.yellow(
2387
- `1. Ihre IDEs öffnen: ${this.config.selectedIDEs
2388
- .map((ide) => this.getIDEName(ide))
2389
- .join(", ")}`
2390
- )
2391
- );
2392
- console.log(
2393
- chalk.gray(` → Agents sind bereits in allen IDEs installiert!\n`)
2394
- );
2395
- }
2396
-
2397
- console.log(chalk.yellow("2. 📋 BMAD Planning Workflow:"));
2398
- if (this.config.planApproved) {
2399
- console.log(
2400
- chalk.green(` ✅ Planning Complete - Ready for Development!`)
2401
- );
2402
- console.log(chalk.cyan(` → Ihre initial PRD: docs/prd.md`));
2403
- } else {
2404
- console.log(chalk.cyan(` Option A: Web UI (kosteneffizient)`));
2405
- console.log(chalk.gray(` → Claude/Gemini/GPT mit Agents verwenden`));
2406
- console.log(chalk.cyan(` Option B: Direkt in IDE`));
2407
- console.log(chalk.gray(` → @pm für PRD, @architect für Architecture`));
2408
- }
2409
- console.log("");
2410
-
2411
- console.log(chalk.yellow("3. ⚠️ KRITISCHER ÜBERGANG: Document Sharding"));
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
- );
2422
-
2423
- console.log(chalk.yellow("4. 🚀 BMAD Development Cycle:"));
2424
- console.log(chalk.cyan(` 1. @sm → Story Draft von Sharded Epic`));
2425
- console.log(chalk.cyan(` 2. @po → Story Validation (optional)`));
2426
- console.log(chalk.cyan(` 3. User → Story Approval`));
2427
- console.log(chalk.cyan(` 4. @dev → Implementation + Tests`));
2428
- console.log(chalk.cyan(` 5. @qa → Code Review (optional)`));
2429
- console.log(chalk.red(` 6. ⚠️ COMMIT CHANGES BEFORE PROCEEDING!`));
2430
- console.log(chalk.gray(` → Loop zurück zu @sm für nächste Story\n`));
2431
-
2432
- console.log(chalk.yellow("5. 🎯 Quick Commands (in quick-start.md):"));
2433
- console.log(chalk.cyan(` /plan → Planning starten`));
2434
- console.log(chalk.cyan(` /shard → Document Sharding`));
2435
- console.log(chalk.cyan(` /story → Nächste Story`));
2436
- console.log(chalk.cyan(` /dev → Development`));
2437
- console.log(chalk.cyan(` /qa → Quality Review`));
2438
- console.log(chalk.gray(` → Alle Details in appiq-solution/workflows/\n`));
2439
-
2440
- console.log(chalk.cyan("🎯 Das war's! Kein komplizierter Setup mehr."));
2441
- console.log(chalk.green("🚀 Viel Erfolg mit Appiq!\n"));
2442
-
2443
- // Quick reference
2444
- console.log(chalk.dim("━".repeat(50)));
2445
- console.log(chalk.dim("📁 Quick Reference:"));
2446
- console.log(chalk.dim(` • Agents: appiq-solution/agents/`));
2447
- console.log(
2448
- chalk.dim(` • Quick Start: appiq-solution/commands/quick-start.md`)
2449
- );
2450
- console.log(chalk.dim(` • Projekt-Typ: ${this.config.projectType}`));
2451
- console.log(
2452
- chalk.dim(
2453
- ` • IDEs: ${this.config.selectedIDEs
2454
- .map((ide) => this.getIDEName(ide))
2455
- .join(", ")}`
2456
- )
2457
- );
2458
- }
2459
-
2460
- // Helper methods
2461
- hasExistingSourceCode() {
2462
- const sourceDirs = ["src", "lib", "app", "components", "pages"];
2463
- return sourceDirs.some(
2464
- (dir) =>
2465
- fs.existsSync(path.join(this.projectRoot, dir)) &&
2466
- fs.readdirSync(path.join(this.projectRoot, dir)).length > 0
2467
- );
2468
- }
2469
-
2470
- hasExistingDocumentation() {
2471
- const docFiles = ["README.md", "docs", "documentation"];
2472
- return docFiles.some((file) =>
2473
- fs.existsSync(path.join(this.projectRoot, file))
2474
- );
2475
- }
2476
-
2477
- async installProjectConfig() {
2478
- const configContent = this.generateProjectConfig();
2479
- fs.writeFileSync(
2480
- path.join(this.appiqPath, "project-config.yaml"),
2481
- configContent
2482
- );
2483
- }
2484
-
2485
- generateProjectConfig() {
2486
- return `# Appiq Solution Project Configuration
2487
- # Built with ❤️ based on Bmad-Method
2488
- version: "1.0.0"
2489
- project:
2490
- type: ${this.config.projectType}
2491
- created: ${new Date().toISOString()}
2492
- name: ${this.config.projectName || "Unbenanntes Projekt"}
2493
- plan_approved: ${this.config.planApproved}
2494
-
2495
- # Wo die wichtigen Dateien liegen
2496
- paths:
2497
- prd: "docs/prd.md"
2498
- architecture: "docs/architecture.md"
2499
- stories: "docs/stories/"
2500
- agents: "appiq-solution/agents/"
2501
- orchestration: "appiq-solution/orchestration.yaml"
2502
-
2503
- # One-Click Workflows
2504
- workflows:
2505
- ${this.config.projectType === "greenfield" ? "greenfield" : "brownfield"}:
2506
- start_command: "${
2507
- this.config.projectType === "greenfield" ? "/start" : "/analyze"
2508
- }"
2509
- agents_sequence:
2510
- - smart-launcher
2511
- - project-manager
2512
- - architect
2513
- - story-master
2514
- - developer
2515
- - qa-expert
2516
-
2517
- # IDE Integration (Mehrere IDEs)
2518
- ides:
2519
- ${this.config.selectedIDEs
2520
- .map(
2521
- (ide) => ` - name: ${this.getIDEName(ide)}
2522
- config_path: ${this.getIDEConfig(ide).dir}
2523
- file_format: ${this.getIDEConfig(ide).suffix}`
2524
- )
2525
- .join("\n")}
2526
- `;
2527
- }
2528
- }
2529
-
2530
- // Run installer if called directly
2531
- if (require.main === module) {
2532
- // Check if 'install' command is provided
2533
- const args = process.argv.slice(2);
2534
-
2535
- if (args.length === 0 || args[0] === "install") {
2536
- const installer = new AppiqSolutionInstaller();
2537
- installer.install().catch(console.error);
2538
- } else {
2539
- console.log(
2540
- chalk.red("❌ Unknown command. Use: npx appiq-solution install")
2541
- );
2542
- process.exit(1);
2543
- }
2544
- }
2545
-
2546
- module.exports = AppiqSolutionInstaller;