appiq-solution 1.0.0 โ 1.0.1
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.
- package/README.md +162 -0
- package/appiq-installer.js +833 -0
- package/package.json +1 -1
package/README.md
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
# ๐ Appiq Solution - Super Einfache KI-Agent Installation
|
2
|
+
|
3
|
+
*Built with โค๏ธ based on the amazing Bmad-Method*
|
4
|
+
|
5
|
+
## โก One-Command Installation
|
6
|
+
|
7
|
+
```bash
|
8
|
+
npx appiq-solution install
|
9
|
+
```
|
10
|
+
|
11
|
+
**Das war's!** ๐ฏ Kein komplizierter Setup mehr.
|
12
|
+
|
13
|
+
## ๐ฎ Was passiert automatisch?
|
14
|
+
|
15
|
+
### 1. **๐ Intelligente Projekt-Erkennung**
|
16
|
+
- โ
**Automatisch erkennt:** Greenfield vs. Brownfield
|
17
|
+
- โ
**Analysiert:** Bestehenden Code, Dokumentation, Tech-Stack
|
18
|
+
- โ
**Empfiehlt:** Optimalen Workflow fรผr Ihr Projekt
|
19
|
+
|
20
|
+
### 2. **๐ ๏ธ IDE-Integration (One-Click)**
|
21
|
+
- โ
**Cursor** โ `.cursor/rules/` mit `.mdc` Dateien
|
22
|
+
- โ
**Claude Code** โ `.claude/commands/Appiq/` mit `.md` Dateien
|
23
|
+
- โ
**Windsurf** โ `.windsurf/rules/` mit `.md` Dateien
|
24
|
+
- โ
**VS Code + Cline** โ `.clinerules/` mit `.md` Dateien
|
25
|
+
|
26
|
+
### 3. **๐ Automatische Datei-Organisation**
|
27
|
+
|
28
|
+
**Neue Projekte (Greenfield):**
|
29
|
+
```
|
30
|
+
your-project/
|
31
|
+
โโโ docs/
|
32
|
+
โ โโโ prd.md โ PRD wird hier erstellt
|
33
|
+
โ โโโ architecture.md โ Architektur wird hier erstellt
|
34
|
+
โ โโโ stories/ โ User Stories werden hier erstellt
|
35
|
+
โโโ appiq-solution/
|
36
|
+
โ โโโ agents/ โ Optimierte KI-Agents
|
37
|
+
โ โโโ commands/ โ One-Click Kommandos
|
38
|
+
โโโ .cursor/rules/ โ IDE-spezifische Integration
|
39
|
+
```
|
40
|
+
|
41
|
+
**Bestehende Projekte (Brownfield):**
|
42
|
+
```
|
43
|
+
your-existing-project/
|
44
|
+
โโโ docs/ โ Bestehende Docs werden gescannt
|
45
|
+
โ โโโ prd.md โ PRD falls vorhanden, sonst erstellt
|
46
|
+
โ โโโ architecture.md โ Architektur-Review
|
47
|
+
โโโ appiq-solution/ โ Neue Appiq Solution Installation
|
48
|
+
โโโ .cursor/rules/ โ IDE Integration (nicht-invasiv)
|
49
|
+
```
|
50
|
+
|
51
|
+
## ๐ Super Einfache Nutzung
|
52
|
+
|
53
|
+
### Schritt 1: Installation
|
54
|
+
```bash
|
55
|
+
npx appiq-solution install
|
56
|
+
```
|
57
|
+
|
58
|
+
### Schritt 2: Agent laden (Cursor Beispiel)
|
59
|
+
```bash
|
60
|
+
# Appiq Launcher ist bereits in .cursor/rules/smart-launcher.mdc
|
61
|
+
# Einfach in Cursor sagen: "Agiere als Appiq Launcher"
|
62
|
+
```
|
63
|
+
|
64
|
+
### Schritt 3: One-Command Start
|
65
|
+
```bash
|
66
|
+
# Fรผr NEUE Projekte:
|
67
|
+
/start
|
68
|
+
|
69
|
+
# Fรผr BESTEHENDE Projekte:
|
70
|
+
/analyze
|
71
|
+
```
|
72
|
+
|
73
|
+
**Das war's!** ๐ Das System fรผhrt Sie automatisch durch alles.
|
74
|
+
|
75
|
+
## ๐ฏ One-Click Workflows
|
76
|
+
|
77
|
+
### Greenfield (Neue Projekte)
|
78
|
+
```
|
79
|
+
/start โ PRD โ Architektur โ Stories โ Code โ Tests
|
80
|
+
```
|
81
|
+
|
82
|
+
### Brownfield (Bestehende Projekte)
|
83
|
+
```
|
84
|
+
/analyze โ Review โ Neue Features โ Integration โ Tests
|
85
|
+
```
|
86
|
+
|
87
|
+
## ๐ค Optimierte Agents
|
88
|
+
|
89
|
+
| Agent | Kommando | Funktion |
|
90
|
+
|-------|----------|----------|
|
91
|
+
| **Appiq Launcher** | `/start` | Intelligenter Projekt-Start |
|
92
|
+
| **Project Manager** | `/prd` | PRD & Dokumentation |
|
93
|
+
| **System Architect** | `/architecture` | Technische Architektur |
|
94
|
+
| **Story Master** | `/story` | User Stories & Sprints |
|
95
|
+
| **Senior Developer** | `/code` | Code Implementation |
|
96
|
+
| **QA Expert** | `/test` | Testing & Validierung |
|
97
|
+
|
98
|
+
## ๐ก Warum Appiq Solution?
|
99
|
+
|
100
|
+
### โ **Vorher (Kompliziert):**
|
101
|
+
- โ Komplexer Web-Client Setup
|
102
|
+
- โ Unklare Anweisungen
|
103
|
+
- โ Viele manuelle Schritte
|
104
|
+
- โ Verwirrende Datei-Organisation
|
105
|
+
|
106
|
+
### โ
**Jetzt (Super Einfach):**
|
107
|
+
- โ
**Ein Kommando:** `npx appiq-solution install`
|
108
|
+
- โ
**Automatische Erkennung:** Greenfield/Brownfield
|
109
|
+
- โ
**Klare Anweisungen:** Wo gehรถrt was hin
|
110
|
+
- โ
**One-Click Workflows:** Alles automatisiert
|
111
|
+
|
112
|
+
## ๐ Hilfe & Support
|
113
|
+
|
114
|
+
### Quick Commands
|
115
|
+
- **`/help`** - Alle verfรผgbaren Kommandos
|
116
|
+
- **`/status`** - Aktueller Projekt-Status
|
117
|
+
- **`/next`** - Nรคchster Schritt
|
118
|
+
|
119
|
+
### Troubleshooting
|
120
|
+
```bash
|
121
|
+
# Installation prรผfen
|
122
|
+
ls appiq-solution/
|
123
|
+
|
124
|
+
# Agent-Liste anzeigen
|
125
|
+
ls appiq-solution/agents/
|
126
|
+
|
127
|
+
# IDE-Integration prรผfen
|
128
|
+
ls .cursor/rules/ # fรผr Cursor
|
129
|
+
ls .claude/commands/ # fรผr Claude Code
|
130
|
+
```
|
131
|
+
|
132
|
+
## ๐ฎ Beispiel-Session
|
133
|
+
|
134
|
+
```bash
|
135
|
+
# Installation
|
136
|
+
$ npx appiq-solution install
|
137
|
+
๐ Projekt-Analyse... โ Brownfield erkannt
|
138
|
+
๐ ๏ธ IDE: Cursor ausgewรคhlt
|
139
|
+
โ
Installation abgeschlossen!
|
140
|
+
|
141
|
+
# In Cursor IDE
|
142
|
+
> "Agiere als Appiq Launcher"
|
143
|
+
> /analyze
|
144
|
+
|
145
|
+
๐ Analyzing existing project...
|
146
|
+
โ
Found: package.json (Node.js project)
|
147
|
+
โ
Found: src/ directory with React components
|
148
|
+
โ
Missing: PRD documentation
|
149
|
+
๐ Recommendation: Create PRD first, then add new features
|
150
|
+
|
151
|
+
> /prd
|
152
|
+
|
153
|
+
๐ Creating PRD for existing React project...
|
154
|
+
โ
PRD created: docs/prd.md
|
155
|
+
๐ฏ Next: /architecture to review technical setup
|
156
|
+
```
|
157
|
+
|
158
|
+
**So einfach ist das!** ๐
|
159
|
+
|
160
|
+
---
|
161
|
+
*Appiq Solution - Entwicklung war nie einfacher.*
|
162
|
+
*Built with โค๏ธ based on Bmad-Method*
|
@@ -0,0 +1,833 @@
|
|
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
|
+
selectedIDEs: [],
|
27
|
+
projectName: null,
|
28
|
+
projectIdea: null,
|
29
|
+
targetUsers: null,
|
30
|
+
projectPlan: null,
|
31
|
+
planApproved: false,
|
32
|
+
};
|
33
|
+
}
|
34
|
+
|
35
|
+
async install() {
|
36
|
+
console.log(chalk.bold.cyan("๐ Appiq Solution Smart Installer v1.0.0"));
|
37
|
+
console.log(chalk.cyan("============================================"));
|
38
|
+
console.log(chalk.dim("Built with โค๏ธ based on Bmad-Method"));
|
39
|
+
console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
|
40
|
+
|
41
|
+
try {
|
42
|
+
// Phase 1: Projekt-Typ Detection
|
43
|
+
await this.detectProjectType();
|
44
|
+
|
45
|
+
// Phase 2: Projektidee erfassen
|
46
|
+
await this.collectProjectIdea();
|
47
|
+
|
48
|
+
// Phase 3: IDE Selection (MULTISELECT)
|
49
|
+
await this.selectIDE();
|
50
|
+
|
51
|
+
// Phase 4: Projektplan erstellen
|
52
|
+
await this.createProjectPlan();
|
53
|
+
|
54
|
+
// Phase 5: Plan-Freigabe
|
55
|
+
await this.approvePlan();
|
56
|
+
|
57
|
+
// Phase 6: Installation
|
58
|
+
await this.performInstallation();
|
59
|
+
|
60
|
+
// Phase 7: One-Click Setup
|
61
|
+
await this.setupOneClickWorkflows();
|
62
|
+
|
63
|
+
// Phase 8: Agent-Orchestrierung vorbereiten
|
64
|
+
await this.setupAgentOrchestration();
|
65
|
+
|
66
|
+
// Phase 9: Simple Instructions
|
67
|
+
await this.showSimpleInstructions();
|
68
|
+
} catch (error) {
|
69
|
+
console.error(chalk.red("โ Installation failed:"), error.message);
|
70
|
+
process.exit(1);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
async detectProjectType() {
|
75
|
+
console.log(chalk.yellow("๐ Projekt-Analyse..."));
|
76
|
+
|
77
|
+
// Auto-Detection
|
78
|
+
const hasPackageJson = fs.existsSync(
|
79
|
+
path.join(this.projectRoot, "package.json")
|
80
|
+
);
|
81
|
+
const hasPubspec = fs.existsSync(
|
82
|
+
path.join(this.projectRoot, "pubspec.yaml")
|
83
|
+
);
|
84
|
+
const hasExistingCode = this.hasExistingSourceCode();
|
85
|
+
const hasDocumentation = this.hasExistingDocumentation();
|
86
|
+
|
87
|
+
let suggestedType = "greenfield";
|
88
|
+
let reason = "Neues Projekt erkannt";
|
89
|
+
|
90
|
+
if (hasExistingCode || hasDocumentation) {
|
91
|
+
suggestedType = "brownfield";
|
92
|
+
reason = "Existierenden Code/Dokumentation gefunden";
|
93
|
+
}
|
94
|
+
|
95
|
+
console.log(chalk.gray(`๐ก Analyse: ${reason}`));
|
96
|
+
console.log(
|
97
|
+
chalk.gray(
|
98
|
+
`๐ Empfehlung: ${
|
99
|
+
suggestedType === "greenfield"
|
100
|
+
? "Greenfield (Neues Projekt)"
|
101
|
+
: "Brownfield (Bestehendes Projekt)"
|
102
|
+
}`
|
103
|
+
)
|
104
|
+
);
|
105
|
+
|
106
|
+
// User Confirmation
|
107
|
+
const { projectType } = await inquirer.prompt([
|
108
|
+
{
|
109
|
+
type: "list",
|
110
|
+
name: "projectType",
|
111
|
+
message: "๐ฏ Welcher Projekt-Typ ist das?",
|
112
|
+
choices: [
|
113
|
+
{
|
114
|
+
name: `โจ Greenfield - Neues Projekt (Empfohlen: ${
|
115
|
+
suggestedType === "greenfield" ? "โ
" : "โ"
|
116
|
+
})`,
|
117
|
+
value: "greenfield",
|
118
|
+
short: "Greenfield",
|
119
|
+
},
|
120
|
+
{
|
121
|
+
name: `๐ง Brownfield - Bestehendes Projekt (Empfohlen: ${
|
122
|
+
suggestedType === "brownfield" ? "โ
" : "โ"
|
123
|
+
})`,
|
124
|
+
value: "brownfield",
|
125
|
+
short: "Brownfield",
|
126
|
+
},
|
127
|
+
],
|
128
|
+
default: suggestedType,
|
129
|
+
},
|
130
|
+
]);
|
131
|
+
|
132
|
+
this.config.projectType = projectType;
|
133
|
+
console.log(
|
134
|
+
chalk.green(
|
135
|
+
`โ
Projekt-Typ: ${
|
136
|
+
projectType === "greenfield"
|
137
|
+
? "Greenfield (Neu)"
|
138
|
+
: "Brownfield (Bestehend)"
|
139
|
+
}\n`
|
140
|
+
)
|
141
|
+
);
|
142
|
+
}
|
143
|
+
|
144
|
+
async selectIDE() {
|
145
|
+
console.log(chalk.yellow("๐ ๏ธ IDE Auswahl"));
|
146
|
+
console.log(chalk.bold.yellow.bgRed(" โ ๏ธ MULTISELECT: Verwenden Sie SPACEBAR zum Auswรคhlen mehrerer IDEs! "));
|
147
|
+
console.log(chalk.gray("Wรคhlen Sie ALLE IDEs aus, die Sie nutzen:\n"));
|
148
|
+
|
149
|
+
const { ides } = await inquirer.prompt([
|
150
|
+
{
|
151
|
+
type: "checkbox",
|
152
|
+
name: "ides",
|
153
|
+
message: "๐ฏ Welche IDEs nutzen Sie? (SPACEBAR = auswรคhlen, ENTER = bestรคtigen)",
|
154
|
+
choices: [
|
155
|
+
{ name: "๐ต Cursor", value: "cursor" },
|
156
|
+
{ name: "๐ฃ Claude Code CLI", value: "claude-code" },
|
157
|
+
{ name: "๐ข Windsurf", value: "windsurf" },
|
158
|
+
{ name: "๐ถ VS Code + Cline", value: "cline" },
|
159
|
+
{ name: "๐ Trae", value: "trae" },
|
160
|
+
{ name: "๐ด Roo Code", value: "roo" },
|
161
|
+
{ name: "๐ช Gemini CLI", value: "gemini" },
|
162
|
+
{ name: "โซ GitHub Copilot", value: "github-copilot" },
|
163
|
+
],
|
164
|
+
validate: (input) => {
|
165
|
+
if (input.length === 0) {
|
166
|
+
return "Bitte wรคhlen Sie mindestens eine IDE aus!";
|
167
|
+
}
|
168
|
+
return true;
|
169
|
+
},
|
170
|
+
},
|
171
|
+
]);
|
172
|
+
|
173
|
+
this.config.selectedIDEs = ides;
|
174
|
+
const ideNames = ides.map(ide => this.getIDEName(ide)).join(", ");
|
175
|
+
console.log(chalk.green(`โ
IDEs: ${ideNames}\n`));
|
176
|
+
}
|
177
|
+
|
178
|
+
async collectProjectIdea() {
|
179
|
+
console.log(chalk.yellow("๐ก Projektidee erfassen"));
|
180
|
+
console.log(chalk.gray("Beschreiben Sie Ihr Projekt-Vorhaben:\n"));
|
181
|
+
|
182
|
+
const { projectIdea, projectName, targetUsers } = await inquirer.prompt([
|
183
|
+
{
|
184
|
+
type: "input",
|
185
|
+
name: "projectName",
|
186
|
+
message: "๐ท๏ธ Wie soll Ihr Projekt heiรen?",
|
187
|
+
validate: (input) => input.length > 0 ? true : "Bitte geben Sie einen Projektnamen ein!"
|
188
|
+
},
|
189
|
+
{
|
190
|
+
type: "editor",
|
191
|
+
name: "projectIdea",
|
192
|
+
message: "๐ก Beschreiben Sie Ihre Projektidee (detailliert):",
|
193
|
+
validate: (input) => input.length > 10 ? true : "Bitte beschreiben Sie Ihr Projekt ausfรผhrlicher!"
|
194
|
+
},
|
195
|
+
{
|
196
|
+
type: "input",
|
197
|
+
name: "targetUsers",
|
198
|
+
message: "๐ฅ Wer sind Ihre Zielgruppen/User?",
|
199
|
+
validate: (input) => input.length > 0 ? true : "Bitte beschreiben Sie Ihre Zielgruppe!"
|
200
|
+
}
|
201
|
+
]);
|
202
|
+
|
203
|
+
this.config.projectName = projectName;
|
204
|
+
this.config.projectIdea = projectIdea;
|
205
|
+
this.config.targetUsers = targetUsers;
|
206
|
+
|
207
|
+
console.log(chalk.green(`โ
Projektidee erfasst: "${projectName}"\n`));
|
208
|
+
}
|
209
|
+
|
210
|
+
async createProjectPlan() {
|
211
|
+
console.log(chalk.yellow("๐ Projektplan wird erstellt..."));
|
212
|
+
console.log(chalk.gray("Basierend auf Ihrer Idee und dem Projekt-Typ\n"));
|
213
|
+
|
214
|
+
// Hier wรผrde normalerweise die team-fullstack.yaml verwendet
|
215
|
+
const plan = this.generateProjectPlan();
|
216
|
+
this.config.projectPlan = plan;
|
217
|
+
|
218
|
+
console.log(chalk.cyan("๐ Ihr Projektplan:"));
|
219
|
+
console.log(chalk.white("โ".repeat(50)));
|
220
|
+
console.log(plan);
|
221
|
+
console.log(chalk.white("โ".repeat(50) + "\n"));
|
222
|
+
}
|
223
|
+
|
224
|
+
async approvePlan() {
|
225
|
+
const { approved, changes } = await inquirer.prompt([
|
226
|
+
{
|
227
|
+
type: "confirm",
|
228
|
+
name: "approved",
|
229
|
+
message: "โ
Sind Sie mit diesem Plan zufrieden?",
|
230
|
+
default: true
|
231
|
+
},
|
232
|
+
{
|
233
|
+
type: "input",
|
234
|
+
name: "changes",
|
235
|
+
message: "๐ Welche รnderungen mรถchten Sie? (oder ENTER fรผr keine รnderungen)",
|
236
|
+
when: (answers) => !answers.approved
|
237
|
+
}
|
238
|
+
]);
|
239
|
+
|
240
|
+
if (!approved && changes) {
|
241
|
+
console.log(chalk.yellow("๐ Plan wird angepasst..."));
|
242
|
+
this.config.planChanges = changes;
|
243
|
+
// Hier wรผrde Plan angepasst werden
|
244
|
+
console.log(chalk.green("โ
Plan wurde angepasst!\n"));
|
245
|
+
} else {
|
246
|
+
console.log(chalk.green("โ
Plan freigegeben - Entwicklung kann starten!\n"));
|
247
|
+
}
|
248
|
+
|
249
|
+
this.config.planApproved = true;
|
250
|
+
}
|
251
|
+
|
252
|
+
generateProjectPlan() {
|
253
|
+
const { projectType, projectName, projectIdea, targetUsers } = this.config;
|
254
|
+
|
255
|
+
return `๐ฏ PROJEKTPLAN: ${projectName}
|
256
|
+
|
257
|
+
๐ PROJEKT-TYP: ${projectType === 'greenfield' ? 'Greenfield (Neues Projekt)' : 'Brownfield (Bestehendes Projekt)'}
|
258
|
+
๐ฅ ZIELGRUPPE: ${targetUsers}
|
259
|
+
|
260
|
+
๐ก PROJEKTIDEE:
|
261
|
+
${projectIdea}
|
262
|
+
|
263
|
+
๐ ENTWICKLUNGS-PIPELINE:
|
264
|
+
${projectType === 'greenfield' ? `
|
265
|
+
1. ๐ PO (Product Owner) โ PRD erstellen
|
266
|
+
2. ๐๏ธ Architect โ System-Architektur designen
|
267
|
+
3. ๐จ UX Expert โ UI/UX Design
|
268
|
+
4. ๐ Story Master โ User Stories aufbrechen
|
269
|
+
5. ๐ป Developer โ Features implementieren
|
270
|
+
6. โ
QA Expert โ Testing & Validierung
|
271
|
+
7. ๐ SM (Scrum Master) โ Sprint-Koordination
|
272
|
+
` : `
|
273
|
+
1. ๐ PO โ Bestehende Dokumentation analysieren
|
274
|
+
2. ๐๏ธ Architect โ Architektur-Review
|
275
|
+
3. ๐ Story Master โ Neue Features planen
|
276
|
+
4. ๐ป Developer โ Features in bestehende Basis integrieren
|
277
|
+
5. โ
QA Expert โ Regression Testing
|
278
|
+
6. ๐ SM โ Change Management
|
279
|
+
`}
|
280
|
+
|
281
|
+
๐ฎ ONE-CLICK BEFEHLE:
|
282
|
+
- /start โ Gesamten Workflow starten
|
283
|
+
- /plan โ Detailplanung
|
284
|
+
- /develop โ Entwicklung beginnen
|
285
|
+
- /review โ Code Review
|
286
|
+
- /deploy โ Deployment vorbereiten`;
|
287
|
+
}
|
288
|
+
|
289
|
+
async setupAgentOrchestration() {
|
290
|
+
console.log(chalk.yellow("๐ญ Agent-Orchestrierung vorbereiten..."));
|
291
|
+
|
292
|
+
// Team-Fullstack.yaml Integration
|
293
|
+
const orchestrationConfig = {
|
294
|
+
agents: ['po', 'architect', 'ux-expert', 'story-master', 'developer', 'qa-expert', 'sm'],
|
295
|
+
workflows: this.config.projectType === 'greenfield' ?
|
296
|
+
['greenfield-fullstack.yaml', 'greenfield-ui.yaml', 'greenfield-service.yaml'] :
|
297
|
+
['brownfield-fullstack.yaml', 'brownfield-ui.yaml', 'brownfield-service.yaml'],
|
298
|
+
planApproved: this.config.planApproved
|
299
|
+
};
|
300
|
+
|
301
|
+
// Orchestrierung-Datei erstellen
|
302
|
+
const orchestrationPath = path.join(this.appiqPath, 'orchestration.yaml');
|
303
|
+
fs.writeFileSync(orchestrationPath, this.generateOrchestrationConfig(orchestrationConfig));
|
304
|
+
|
305
|
+
console.log(chalk.green("โ
Agent-Orchestrierung vorbereitet!\n"));
|
306
|
+
}
|
307
|
+
|
308
|
+
generateOrchestrationConfig(config) {
|
309
|
+
return `# Appiq Solution Agent Orchestration
|
310
|
+
# Built with โค๏ธ based on Bmad-Method
|
311
|
+
|
312
|
+
project:
|
313
|
+
name: ${this.config.projectName}
|
314
|
+
type: ${this.config.projectType}
|
315
|
+
plan_approved: ${this.config.planApproved}
|
316
|
+
|
317
|
+
agents:
|
318
|
+
${config.agents.map(agent => ` - ${agent}`).join('\n')}
|
319
|
+
|
320
|
+
workflows:
|
321
|
+
${config.workflows.map(workflow => ` - ${workflow}`).join('\n')}
|
322
|
+
|
323
|
+
execution_order:
|
324
|
+
1: "po โ PRD & Requirements"
|
325
|
+
2: "architect โ System Design"
|
326
|
+
3: "ux-expert โ UI/UX Design"
|
327
|
+
4: "story-master โ User Stories"
|
328
|
+
5: "developer โ Implementation"
|
329
|
+
6: "qa-expert โ Testing"
|
330
|
+
7: "sm โ Sprint Management"
|
331
|
+
|
332
|
+
ides:
|
333
|
+
${this.config.selectedIDEs.map(ide => ` - ${ide}`).join('\n')}
|
334
|
+
`;
|
335
|
+
}
|
336
|
+
|
337
|
+
async performInstallation() {
|
338
|
+
console.log(chalk.yellow("๐ฆ Installation lรคuft..."));
|
339
|
+
|
340
|
+
// Create appiq-solution directory
|
341
|
+
if (!fs.existsSync(this.appiqPath)) {
|
342
|
+
fs.mkdirSync(this.appiqPath, { recursive: true });
|
343
|
+
}
|
344
|
+
|
345
|
+
// Install optimized agents
|
346
|
+
await this.installOptimizedAgents();
|
347
|
+
|
348
|
+
// Install project-specific configs
|
349
|
+
await this.installProjectConfig();
|
350
|
+
|
351
|
+
// Setup IDE integration
|
352
|
+
await this.setupIDEIntegration();
|
353
|
+
|
354
|
+
console.log(chalk.green("โ
Installation abgeschlossen!\n"));
|
355
|
+
}
|
356
|
+
|
357
|
+
async installOptimizedAgents() {
|
358
|
+
console.log(chalk.gray(" ๐ Optimierte Agents installieren..."));
|
359
|
+
|
360
|
+
const agentsDir = path.join(this.appiqPath, "agents");
|
361
|
+
if (!fs.existsSync(agentsDir)) {
|
362
|
+
fs.mkdirSync(agentsDir, { recursive: true });
|
363
|
+
}
|
364
|
+
|
365
|
+
// Core optimized agents
|
366
|
+
const agents = [
|
367
|
+
"smart-launcher",
|
368
|
+
"project-manager",
|
369
|
+
"architect",
|
370
|
+
"story-master",
|
371
|
+
"developer",
|
372
|
+
"qa-expert",
|
373
|
+
];
|
374
|
+
|
375
|
+
for (const agent of agents) {
|
376
|
+
await this.createOptimizedAgent(agent);
|
377
|
+
}
|
378
|
+
}
|
379
|
+
|
380
|
+
async createOptimizedAgent(agentName) {
|
381
|
+
const agentContent = this.generateOptimizedAgentContent(agentName);
|
382
|
+
const filePath = path.join(this.appiqPath, "agents", `${agentName}.md`);
|
383
|
+
fs.writeFileSync(filePath, agentContent);
|
384
|
+
}
|
385
|
+
|
386
|
+
generateOptimizedAgentContent(agentName) {
|
387
|
+
const agentConfigs = {
|
388
|
+
"smart-launcher": {
|
389
|
+
name: "Appiq Launcher",
|
390
|
+
role: "Intelligenter Projekt-Starter",
|
391
|
+
commands: ["/start", "/quick-setup", "/help"],
|
392
|
+
description:
|
393
|
+
"Startet automatisch den optimalen Workflow basierend auf Ihrem Projekt-Typ",
|
394
|
+
},
|
395
|
+
"project-manager": {
|
396
|
+
name: "Project Manager",
|
397
|
+
role: "PRD & Projekt-Planung",
|
398
|
+
commands: ["/prd", "/plan", "/epic"],
|
399
|
+
description: "Erstellt PRD und Projekt-Dokumentation",
|
400
|
+
},
|
401
|
+
architect: {
|
402
|
+
name: "System Architect",
|
403
|
+
role: "Technische Architektur",
|
404
|
+
commands: ["/architecture", "/tech-stack", "/design"],
|
405
|
+
description: "Entwickelt System-Architektur und Tech-Stack",
|
406
|
+
},
|
407
|
+
"story-master": {
|
408
|
+
name: "Story Master",
|
409
|
+
role: "User Stories & Sprint Planning",
|
410
|
+
commands: ["/story", "/sprint", "/tasks"],
|
411
|
+
description: "Erstellt User Stories und Sprint-Planung",
|
412
|
+
},
|
413
|
+
developer: {
|
414
|
+
name: "Senior Developer",
|
415
|
+
role: "Code Implementation",
|
416
|
+
commands: ["/code", "/implement", "/fix"],
|
417
|
+
description: "Implementiert Features und behebt Bugs",
|
418
|
+
},
|
419
|
+
"qa-expert": {
|
420
|
+
name: "QA Expert",
|
421
|
+
role: "Testing & Qualitรคt",
|
422
|
+
commands: ["/test", "/review", "/validate"],
|
423
|
+
description: "Fรผhrt Tests durch und validiert Code-Qualitรคt",
|
424
|
+
},
|
425
|
+
};
|
426
|
+
|
427
|
+
const config = agentConfigs[agentName];
|
428
|
+
|
429
|
+
return `# ${config.name}
|
430
|
+
|
431
|
+
## ๐ฏ Rolle
|
432
|
+
${config.role}
|
433
|
+
|
434
|
+
## ๐ Verfรผgbare Kommandos
|
435
|
+
${config.commands
|
436
|
+
.map((cmd) => `- **${cmd}** - ${config.description}`)
|
437
|
+
.join("\n")}
|
438
|
+
|
439
|
+
## ๐ One-Click Workflows
|
440
|
+
|
441
|
+
### Fรผr ${
|
442
|
+
this.config.projectType === "greenfield" ? "NEUE" : "BESTEHENDE"
|
443
|
+
} Projekte:
|
444
|
+
|
445
|
+
${
|
446
|
+
this.config.projectType === "greenfield"
|
447
|
+
? this.generateGreenfieldWorkflow(config)
|
448
|
+
: this.generateBrownfieldWorkflow(config)
|
449
|
+
}
|
450
|
+
|
451
|
+
## ๐ฎ Einfache Nutzung
|
452
|
+
|
453
|
+
1. **Laden Sie diesen Agent in Ihre IDE**
|
454
|
+
2. **Sagen Sie:** "Agiere als ${config.name}"
|
455
|
+
3. **Verwenden Sie:** ${config.commands[0]} fรผr Quick-Start
|
456
|
+
|
457
|
+
---
|
458
|
+
*Automatisch optimiert fรผr ${this.config.selectedIDEs.map(ide => this.getIDEName(ide)).join(', ')}*
|
459
|
+
*Powered by Appiq - Based on Bmad-Method*
|
460
|
+
`;
|
461
|
+
}
|
462
|
+
|
463
|
+
generateGreenfieldWorkflow(config) {
|
464
|
+
const workflows = {
|
465
|
+
"Appiq Launcher": `
|
466
|
+
**๐ Schnell-Start fรผr neues Projekt:**
|
467
|
+
1. \`/start\` - Automatische Projekt-Analyse
|
468
|
+
2. Erstellt automatisch: PRD-Vorlage, Architektur-Basis, erste Stories
|
469
|
+
3. **Wo alles hingehรถrt:** Alle Dateien werden automatisch in \`docs/\` erstellt`,
|
470
|
+
|
471
|
+
"Project Manager": `
|
472
|
+
**๐ PRD Erstellung:**
|
473
|
+
1. \`/prd\` - Startet PRD-Assistent
|
474
|
+
2. **Datei wird erstellt:** \`docs/prd.md\`
|
475
|
+
3. **Nรคchster Schritt:** Architect fรผr Architektur`,
|
476
|
+
|
477
|
+
"System Architect": `
|
478
|
+
**๐๏ธ Architektur erstellen:**
|
479
|
+
1. \`/architecture\` - Basierend auf PRD
|
480
|
+
2. **Datei wird erstellt:** \`docs/architecture.md\`
|
481
|
+
3. **Nรคchster Schritt:** Story Master fรผr erste Stories`,
|
482
|
+
|
483
|
+
"Story Master": `
|
484
|
+
**๐ Erste Stories:**
|
485
|
+
1. \`/story\` - Erstellt erste User Story
|
486
|
+
2. **Datei wird erstellt:** \`docs/stories/story-001.md\`
|
487
|
+
3. **Nรคchster Schritt:** Developer fรผr Implementation`,
|
488
|
+
|
489
|
+
"Senior Developer": `
|
490
|
+
**๐ป Implementation:**
|
491
|
+
1. \`/implement\` - Implementiert aktuelle Story
|
492
|
+
2. **Erstellt/bearbeitet:** Entsprechende Code-Dateien
|
493
|
+
3. **Nรคchster Schritt:** QA Expert fรผr Review`,
|
494
|
+
|
495
|
+
"QA Expert": `
|
496
|
+
**โ
Testing & Review:**
|
497
|
+
1. \`/review\` - Reviewed aktuellen Code
|
498
|
+
2. **Erstellt:** Test-Dateien und Reports
|
499
|
+
3. **Nรคchster Schritt:** Zurรผck zu Story Master fรผr nรคchste Story`,
|
500
|
+
};
|
501
|
+
|
502
|
+
return workflows[config.name] || "Standard Greenfield Workflow";
|
503
|
+
}
|
504
|
+
|
505
|
+
generateBrownfieldWorkflow(config) {
|
506
|
+
const workflows = {
|
507
|
+
"Appiq Launcher": `
|
508
|
+
**๐ง Schnell-Start fรผr bestehendes Projekt:**
|
509
|
+
1. \`/analyze\` - Analysiert bestehendes Projekt
|
510
|
+
2. **Findet:** Existierende Docs, Code-Struktur, Tech-Stack
|
511
|
+
3. **Erstellt:** Angepasste Workflows fรผr Ihr Projekt`,
|
512
|
+
|
513
|
+
"Project Manager": `
|
514
|
+
**๐ Bestehende Dokumentation:**
|
515
|
+
1. \`/analyze-docs\` - Scannt bestehende Dokumentation
|
516
|
+
2. **Legt PRD ab in:** \`docs/prd.md\` (falls nicht vorhanden)
|
517
|
+
3. **Nรคchster Schritt:** Architect fรผr Architektur-Review`,
|
518
|
+
|
519
|
+
"System Architect": `
|
520
|
+
**๐๏ธ Architektur-Review:**
|
521
|
+
1. \`/review-architecture\` - Analysiert bestehende Struktur
|
522
|
+
2. **Erstellt/updated:** \`docs/architecture.md\`
|
523
|
+
3. **Nรคchster Schritt:** Story Master fรผr neue Features`,
|
524
|
+
|
525
|
+
"Story Master": `
|
526
|
+
**๐ Feature Stories:**
|
527
|
+
1. \`/new-feature\` - Neue Story fรผr bestehendes Projekt
|
528
|
+
2. **Datei wird erstellt:** \`docs/stories/feature-XXX.md\`
|
529
|
+
3. **Berรผcksichtigt:** Bestehende Code-Basis`,
|
530
|
+
|
531
|
+
"Senior Developer": `
|
532
|
+
**๐ป Feature Implementation:**
|
533
|
+
1. \`/add-feature\` - Implementiert in bestehendem Code
|
534
|
+
2. **Bearbeitet:** Bestehende Dateien sicher
|
535
|
+
3. **Erstellt:** Neue Dateien wo nรถtig`,
|
536
|
+
|
537
|
+
"QA Expert": `
|
538
|
+
**โ
Regression Testing:**
|
539
|
+
1. \`/regression-test\` - Testet neue Features
|
540
|
+
2. **Validiert:** Keine Breaking Changes
|
541
|
+
3. **Erstellt:** Test-Reports fรผr bestehende + neue Features`,
|
542
|
+
};
|
543
|
+
|
544
|
+
return workflows[config.name] || "Standard Brownfield Workflow";
|
545
|
+
}
|
546
|
+
|
547
|
+
async setupOneClickWorkflows() {
|
548
|
+
console.log(chalk.yellow("โก One-Click Workflows einrichten..."));
|
549
|
+
|
550
|
+
// Create quick commands
|
551
|
+
const commandsDir = path.join(this.appiqPath, "commands");
|
552
|
+
if (!fs.existsSync(commandsDir)) {
|
553
|
+
fs.mkdirSync(commandsDir, { recursive: true });
|
554
|
+
}
|
555
|
+
|
556
|
+
// Project-type specific quick starts
|
557
|
+
const quickStartContent = this.generateQuickStartScript();
|
558
|
+
fs.writeFileSync(
|
559
|
+
path.join(commandsDir, "quick-start.md"),
|
560
|
+
quickStartContent
|
561
|
+
);
|
562
|
+
|
563
|
+
console.log(chalk.green("โ
One-Click Workflows bereit!\n"));
|
564
|
+
}
|
565
|
+
|
566
|
+
generateQuickStartScript() {
|
567
|
+
return `# ๐ Appiq Solution Quick Start
|
568
|
+
|
569
|
+
## Fรผr ${
|
570
|
+
this.config.projectType === "greenfield" ? "NEUE" : "BESTEHENDE"
|
571
|
+
} Projekte
|
572
|
+
|
573
|
+
### โก One-Command Start:
|
574
|
+
|
575
|
+
\`\`\`bash
|
576
|
+
# In Ihrer IDE, kopieren Sie einfach:
|
577
|
+
${
|
578
|
+
this.config.projectType === "greenfield"
|
579
|
+
? "/start new-project"
|
580
|
+
: "/analyze existing-project"
|
581
|
+
}
|
582
|
+
\`\`\`
|
583
|
+
|
584
|
+
### ๐ Wo gehรถrt was hin?
|
585
|
+
|
586
|
+
${
|
587
|
+
this.config.projectType === "greenfield"
|
588
|
+
? `
|
589
|
+
**NEUE PROJEKTE:**
|
590
|
+
- โ
**PRD:** \`docs/prd.md\` (wird automatisch erstellt)
|
591
|
+
- โ
**Architektur:** \`docs/architecture.md\` (wird automatisch erstellt)
|
592
|
+
- โ
**Stories:** \`docs/stories/\` (wird automatisch erstellt)
|
593
|
+
- โ
**Code:** Ihr gewรคhltes Projekt-Layout
|
594
|
+
|
595
|
+
*Erstellt mit Appiq Solution - Basierend auf Bmad-Method*
|
596
|
+
`
|
597
|
+
: `
|
598
|
+
**BESTEHENDE PROJEKTE:**
|
599
|
+
- โ
**PRD:** Legen Sie bestehende PRD in \`docs/prd.md\`
|
600
|
+
- โ
**Architektur:** Bestehende Architektur in \`docs/architecture.md\`
|
601
|
+
- โ
**Stories:** Neue Features in \`docs/stories/\`
|
602
|
+
- โ
**Code:** Arbeitet mit Ihrer bestehenden Struktur
|
603
|
+
`
|
604
|
+
}
|
605
|
+
|
606
|
+
### ๐ฏ 3-Schritt Erfolgsformel:
|
607
|
+
|
608
|
+
1. **Agent laden** โ Agent-Datei in IDE kopieren
|
609
|
+
2. **Kommando ausfรผhren** โ \`${
|
610
|
+
this.config.projectType === "greenfield" ? "/start" : "/analyze"
|
611
|
+
}\`
|
612
|
+
3. **Folgen Sie den automatischen Anweisungen** โ System fรผhrt Sie durch alles
|
613
|
+
|
614
|
+
### ๐ Hilfe:
|
615
|
+
|
616
|
+
- **\`/help\`** - Zeigt alle verfรผgbaren Kommandos
|
617
|
+
- **\`/status\`** - Aktueller Projekt-Status
|
618
|
+
- **\`/next\`** - Was ist der nรคchste Schritt?
|
619
|
+
|
620
|
+
---
|
621
|
+
*Optimiert fรผr ${this.config.selectedIDEs.map(ide => this.getIDEName(ide)).join(', ')} - ${new Date().toLocaleDateString("de-DE")}*
|
622
|
+
*Powered by Appiq Solution - Built with โค๏ธ based on Bmad-Method*
|
623
|
+
`;
|
624
|
+
}
|
625
|
+
|
626
|
+
async setupIDEIntegration() {
|
627
|
+
if (this.config.selectedIDEs.includes("manual") && this.config.selectedIDEs.length === 1) return;
|
628
|
+
|
629
|
+
console.log(chalk.gray(" ๐ง Mehrere IDE-Integrationen..."));
|
630
|
+
|
631
|
+
for (const ide of this.config.selectedIDEs) {
|
632
|
+
if (ide === "manual") continue;
|
633
|
+
|
634
|
+
console.log(chalk.gray(` ๐ ${this.getIDEName(ide)} wird konfiguriert...`));
|
635
|
+
|
636
|
+
const ideConfig = this.getIDEConfig(ide);
|
637
|
+
const ideDir = path.join(this.projectRoot, ideConfig.dir);
|
638
|
+
|
639
|
+
if (!fs.existsSync(ideDir)) {
|
640
|
+
fs.mkdirSync(ideDir, { recursive: true });
|
641
|
+
}
|
642
|
+
|
643
|
+
// Copy agents to IDE-specific format
|
644
|
+
const agentsPath = path.join(this.appiqPath, "agents");
|
645
|
+
const agents = fs.readdirSync(agentsPath);
|
646
|
+
|
647
|
+
for (const agent of agents) {
|
648
|
+
const sourcePath = path.join(agentsPath, agent);
|
649
|
+
const targetPath = path.join(
|
650
|
+
ideDir,
|
651
|
+
agent.replace(".md", ideConfig.suffix)
|
652
|
+
);
|
653
|
+
fs.copyFileSync(sourcePath, targetPath);
|
654
|
+
}
|
655
|
+
|
656
|
+
console.log(chalk.green(` โ
${this.getIDEName(ide)} konfiguriert`));
|
657
|
+
}
|
658
|
+
|
659
|
+
console.log(chalk.green(" โ
Alle IDE-Integrationen abgeschlossen!"));
|
660
|
+
}
|
661
|
+
|
662
|
+
getIDEConfig(ide) {
|
663
|
+
const configs = {
|
664
|
+
cursor: { dir: ".cursor/rules", suffix: ".mdc" },
|
665
|
+
"claude-code": { dir: ".claude/commands/Appiq", suffix: ".md" },
|
666
|
+
windsurf: { dir: ".windsurf/rules", suffix: ".md" },
|
667
|
+
cline: { dir: ".clinerules", suffix: ".md" },
|
668
|
+
trae: { dir: ".trae/rules", suffix: ".md" },
|
669
|
+
roo: { dir: ".roo/agents", suffix: ".md" },
|
670
|
+
gemini: { dir: ".gemini/commands", suffix: ".md" },
|
671
|
+
"github-copilot": { dir: ".github/copilot", suffix: ".md" },
|
672
|
+
};
|
673
|
+
return configs[ide] || { dir: ".appiq-solution", suffix: ".md" };
|
674
|
+
}
|
675
|
+
|
676
|
+
getIDEName(ide) {
|
677
|
+
const names = {
|
678
|
+
cursor: "Cursor",
|
679
|
+
"claude-code": "Claude Code CLI",
|
680
|
+
windsurf: "Windsurf",
|
681
|
+
cline: "VS Code + Cline",
|
682
|
+
trae: "Trae",
|
683
|
+
roo: "Roo Code",
|
684
|
+
gemini: "Gemini CLI",
|
685
|
+
"github-copilot": "GitHub Copilot",
|
686
|
+
manual: "Manuell",
|
687
|
+
};
|
688
|
+
return names[ide] || ide;
|
689
|
+
}
|
690
|
+
|
691
|
+
async showSimpleInstructions() {
|
692
|
+
console.log(chalk.bold.green("๐ Appiq Installation Erfolgreich!\n"));
|
693
|
+
console.log(chalk.dim("Built with โค๏ธ based on the amazing Bmad-Method"));
|
694
|
+
console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
|
695
|
+
|
696
|
+
console.log(chalk.cyan("๐ Nรคchste Schritte (Super einfach):"));
|
697
|
+
console.log(chalk.white("โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n"));
|
698
|
+
|
699
|
+
if (this.config.selectedIDEs.length > 0 && !this.config.selectedIDEs.includes("manual")) {
|
700
|
+
console.log(
|
701
|
+
chalk.yellow(`1. Ihre IDEs รถffnen: ${this.config.selectedIDEs.map(ide => this.getIDEName(ide)).join(', ')}`)
|
702
|
+
);
|
703
|
+
console.log(chalk.gray(` โ Agents sind bereits in allen IDEs installiert!\n`));
|
704
|
+
}
|
705
|
+
|
706
|
+
console.log(chalk.yellow("2. Appiq Launcher laden:"));
|
707
|
+
console.log(
|
708
|
+
chalk.white(
|
709
|
+
` โ Kopieren Sie: ${chalk.bold(
|
710
|
+
"appiq-solution/agents/smart-launcher.md"
|
711
|
+
)}`
|
712
|
+
)
|
713
|
+
);
|
714
|
+
console.log(chalk.gray(` โ In Ihre IDE einfรผgen\n`));
|
715
|
+
|
716
|
+
console.log(chalk.yellow("3. Sagen Sie Ihrer IDE:"));
|
717
|
+
console.log(
|
718
|
+
chalk.white(` โ ${chalk.bold('"Agiere als Appiq Launcher"')}\n`)
|
719
|
+
);
|
720
|
+
|
721
|
+
console.log(chalk.yellow("4. One-Command Start:"));
|
722
|
+
console.log(
|
723
|
+
chalk.white(
|
724
|
+
chalk.bold(
|
725
|
+
` โ ${
|
726
|
+
this.config.projectType === "greenfield" ? "/start" : "/analyze"
|
727
|
+
}`
|
728
|
+
)
|
729
|
+
)
|
730
|
+
);
|
731
|
+
console.log(
|
732
|
+
chalk.gray(` โ Das System fรผhrt Sie automatisch durch alles!\n`)
|
733
|
+
);
|
734
|
+
|
735
|
+
console.log(chalk.cyan("๐ฏ Das war's! Kein komplizierter Setup mehr."));
|
736
|
+
console.log(chalk.green("๐ Viel Erfolg mit Appiq!\n"));
|
737
|
+
|
738
|
+
// Quick reference
|
739
|
+
console.log(chalk.dim("โ".repeat(50)));
|
740
|
+
console.log(chalk.dim("๐ Quick Reference:"));
|
741
|
+
console.log(chalk.dim(` โข Agents: appiq-solution/agents/`));
|
742
|
+
console.log(
|
743
|
+
chalk.dim(` โข Quick Start: appiq-solution/commands/quick-start.md`)
|
744
|
+
);
|
745
|
+
console.log(chalk.dim(` โข Projekt-Typ: ${this.config.projectType}`));
|
746
|
+
console.log(
|
747
|
+
chalk.dim(` โข IDEs: ${this.config.selectedIDEs.map(ide => this.getIDEName(ide)).join(', ')}`)
|
748
|
+
);
|
749
|
+
}
|
750
|
+
|
751
|
+
// Helper methods
|
752
|
+
hasExistingSourceCode() {
|
753
|
+
const sourceDirs = ["src", "lib", "app", "components", "pages"];
|
754
|
+
return sourceDirs.some(
|
755
|
+
(dir) =>
|
756
|
+
fs.existsSync(path.join(this.projectRoot, dir)) &&
|
757
|
+
fs.readdirSync(path.join(this.projectRoot, dir)).length > 0
|
758
|
+
);
|
759
|
+
}
|
760
|
+
|
761
|
+
hasExistingDocumentation() {
|
762
|
+
const docFiles = ["README.md", "docs", "documentation"];
|
763
|
+
return docFiles.some((file) =>
|
764
|
+
fs.existsSync(path.join(this.projectRoot, file))
|
765
|
+
);
|
766
|
+
}
|
767
|
+
|
768
|
+
async installProjectConfig() {
|
769
|
+
const configContent = this.generateProjectConfig();
|
770
|
+
fs.writeFileSync(
|
771
|
+
path.join(this.appiqPath, "project-config.yaml"),
|
772
|
+
configContent
|
773
|
+
);
|
774
|
+
}
|
775
|
+
|
776
|
+
generateProjectConfig() {
|
777
|
+
return `# Appiq Solution Project Configuration
|
778
|
+
# Built with โค๏ธ based on Bmad-Method
|
779
|
+
version: "1.0.0"
|
780
|
+
project:
|
781
|
+
type: ${this.config.projectType}
|
782
|
+
created: ${new Date().toISOString()}
|
783
|
+
name: ${this.config.projectName || 'Unbenanntes Projekt'}
|
784
|
+
plan_approved: ${this.config.planApproved}
|
785
|
+
|
786
|
+
# Wo die wichtigen Dateien liegen
|
787
|
+
paths:
|
788
|
+
prd: "docs/prd.md"
|
789
|
+
architecture: "docs/architecture.md"
|
790
|
+
stories: "docs/stories/"
|
791
|
+
agents: "appiq-solution/agents/"
|
792
|
+
orchestration: "appiq-solution/orchestration.yaml"
|
793
|
+
|
794
|
+
# One-Click Workflows
|
795
|
+
workflows:
|
796
|
+
${this.config.projectType === "greenfield" ? "greenfield" : "brownfield"}:
|
797
|
+
start_command: "${
|
798
|
+
this.config.projectType === "greenfield" ? "/start" : "/analyze"
|
799
|
+
}"
|
800
|
+
agents_sequence:
|
801
|
+
- smart-launcher
|
802
|
+
- project-manager
|
803
|
+
- architect
|
804
|
+
- story-master
|
805
|
+
- developer
|
806
|
+
- qa-expert
|
807
|
+
|
808
|
+
# IDE Integration (Mehrere IDEs)
|
809
|
+
ides:
|
810
|
+
${this.config.selectedIDEs.map(ide => ` - name: ${this.getIDEName(ide)}
|
811
|
+
config_path: ${this.getIDEConfig(ide).dir}
|
812
|
+
file_format: ${this.getIDEConfig(ide).suffix}`).join('\n')}
|
813
|
+
`;
|
814
|
+
}
|
815
|
+
}
|
816
|
+
|
817
|
+
// Run installer if called directly
|
818
|
+
if (require.main === module) {
|
819
|
+
// Check if 'install' command is provided
|
820
|
+
const args = process.argv.slice(2);
|
821
|
+
|
822
|
+
if (args.length === 0 || args[0] === "install") {
|
823
|
+
const installer = new AppiqSolutionInstaller();
|
824
|
+
installer.install().catch(console.error);
|
825
|
+
} else {
|
826
|
+
console.log(
|
827
|
+
chalk.red("โ Unknown command. Use: npx appiq-solution install")
|
828
|
+
);
|
829
|
+
process.exit(1);
|
830
|
+
}
|
831
|
+
}
|
832
|
+
|
833
|
+
module.exports = AppiqSolutionInstaller;
|
package/package.json
CHANGED