@dennisrepa/elevate 1.2.0 → 1.3.0

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/docs/de.md CHANGED
@@ -1,305 +1,409 @@
1
- # 🪶 Elevate — Deutsche Dokumentation
2
-
3
- > **Interaktives Terminal-Dashboard (TUI) zur sicheren, selektiven und transparenten Aktualisierung von Abhängigkeiten in Polyglot-Monorepos.**
4
- > *Entwickelt und gepflegt von **Dennis Répa**.*
5
-
6
- ---
7
-
8
- ## 🌟 Übersicht
9
-
10
- **Elevate** ist ein interaktives Terminal-Dashboard (TUI) zur sicheren, selektiven und transparenten Aktualisierung von Abhängigkeiten in **Polyglot-Monorepos** (Node/npm & Java/Maven) sowie Einzelprojekten.
11
-
12
- * **Feder-Symbolik (`🪶`) & Orange-Brand (`#FF8800`):** Leicht, modern und übersichtlich im Terminal.
13
- * **Polyglot-Fähig:** Unterstützt gleichzeitig Frontend-Projekte (`package.json` mit npm Workspaces) und Backend-Projekte (`pom.xml` mit Maven).
14
- * **Release Channels:** Filtert Vorabversionen (Beta, RC, Alpha, Milestone, Snapshot) standardmäßig heraus und schlägt ausschließlich produktionsreife Releases vor.
15
- * **Animiertes Begleiter-Hühnchen („Pip“ 🐣):** Begleitet den Entwickler dezent im Terminal und reagiert auf Aktionen.
16
- * **Bilinguales i18n:** Jederzeit umschaltbar zwischen Deutsch und Englisch via Taste **`[L]`**.
17
-
18
- ---
19
-
20
- ## ✨ Features & Highlights
21
-
22
- 1. **🌐 Polyglot Monorepo Support (npm & Maven):**
23
- * **Node / npm:** Erkennt Root- und Workspace-Pakete, berechnet SemVer-Diffs, aktualisiert `package.json` und führt `npm install` aus.
24
- * **Java / Maven:** Durchsucht das Projekt nach allen `pom.xml`-Dateien (Spring-Boot-Services, Libraries etc.), fragt Maven Central ab und prüft Quellcode mit `mvn test-compile`.
25
- * **Live-Wechsel:** Ein Tastendruck auf **`[E]`** schaltet im laufenden Betrieb zwischen Frontend- und Backend-Modulen um.
26
-
27
- 2. **🔍 Version gezielt heraussuchen (`[V]`):**
28
- * Man muss nicht zwingend auf die `latest` Version aktualisieren: Taste **`[V]`** öffnet ein interaktives Such-Modal für das aktuell ausgewählte Paket.
29
- * Lädt alle jemals veröffentlichten Versionen aus der npm- oder Maven-Registry.
30
- * Ermöglicht Echtzeit-Filterung während des Tippens (z. B. `3.2` oder `25`), Pfeiltasten-Navigation und Übernahme mit `Enter`.
31
- * Manuell ausgewählte Versionen werden im Dashboard mit einem `[MANUELL]`-Badge hervorgehoben.
32
-
33
- 3. **🚦 Release Channels (`stable` vs. `all`):**
34
- * **`channel: "stable"` (Standard):** Verhindert das unabsichtliche Installieren instabiler Vorabversionen (`-alpha`, `-beta`, `-rc`, `-m1`, `-snapshot`).
35
- * **`channel: "all"`:** Zeigt alle Versionen an und hebt Vorabversionen mit farbigen Warn-Badges (`[BETA]`, `[RC]`, `[ALPHA]`) in Magenta hervor.
36
-
37
- 4. **🛡️ Monorepo-Schutz für interne Pakete:**
38
- * Schützt interne Pakete (z. B. `@my-org/*`, `com.mycompany.*`) davor, versehentlich durch fremde Bibliotheken aus öffentlichen Registries überschrieben zu werden.
39
-
40
- 5. **🐣 Das animierte Hühnchen („Pip“):**
41
- * Sitzt unten rechts im Dashboard.
42
- * Reagiert auf den Status:
43
- * *Idle:* Blinzelt sanft oder schlürft im Java-Modus Kaffee (`*kaffee schlürf* ☕`).
44
- * *Scan:* Sucht neugierig mit Lupe (`( ˘ө˘ )🔍`).
45
- * *Build:* Arbeitet emsig (`(ง •ө• )ง`).
46
- * *Erfolg:* Feiert das Update mit Konfetti (`\( ᵔөᵔ )/ 🎉`).
47
-
48
- 6. **🚀 Englischer Initial-Splash-Screen:**
49
- * Ein stylischer Startbildschirm mit animiertem Ladebalken (~3,2 Sekunden).
50
- * Kann jederzeit mit der `[Leertaste]` oder `[Enter]` sofort übersprungen werden.
51
-
52
- ---
53
-
54
- ## 🏗️ Domain-Driven Clean Architecture
55
-
56
- Elevate ist strikt nach den Prinzipien des **Domain-Driven Design (DDD)** und der **Hexagonalen Architektur (Ports & Adapters)** aufgebaut. UI und Hooks hängen niemals direkt von Paketmanagern ab:
57
-
58
- ```text
59
- src/
60
- ├── domain/ # 🧠 DOMAIN CORE (Reine Fachlogik, zero I/O)
61
- │ ├── models.ts # Entities & Value Objects (ProjectModule, UpdateCandidate, etc.)
62
- │ ├── ports.ts # Domain Ports (ModuleDiscoveryPort, RegistryPort, etc.)
63
- │ ├── ecosystem-strategy.ts # Strategy Pattern: Plattform-agnostisches Interface
64
- │ └── ecosystem-factory.ts # Factory Pattern: Liefert npm- oder Maven-Strategie
65
- │
66
- ├── adapters/ # 🔌 ADAPTERS (Konkrete Implementierungen)
67
- │ ├── npm/ # 📦 Node / npm Adapter
68
- │ │ ├── npm-discovery.ts # Liest workspaces aus Root-package.json
69
- │ │ ├── npm-registry.ts # npm-Registry-Abfragen & Dist-Tags
70
- │ │ ├── npm-scanner.ts # Parst dependencies & SemVer-Diffs
71
- │ │ ├── npm-updater.ts # Aktualisiert package.json & npm install
72
- │ │ ├── npm-verifier.ts # Konsistenzchecks & Build-Tests
73
- │ │ └── npm-strategy.ts # NpmEcosystemStrategy
74
- │ │
75
- │ └── maven/ # ☕ Java / Maven Adapter
76
- │ ├── maven-discovery.ts # Findet alle pom.xml im Projektbaum
77
- │ ├── maven-registry.ts # Maven Central Metadata & Release-Filter
78
- │ ├── maven-scanner.ts # Parst dependencies, Deduplizierung & Properties
79
- │ ├── maven-updater.ts # Aktualisiert pom.xml & mvn dependency:resolve
80
- │ ├── maven-verifier.ts # mvn test-compile Quellcode-Verifikation
81
- │ └── maven-strategy.ts # MavenEcosystemStrategy
82
- │
83
- ├── hooks/ # 🎣 APPLICATION HOOKS (Verwenden ausschließlich Ports)
84
- │ ├── use-workspaces.ts # Modulverwaltung über ModuleDiscoveryPort
85
- │ ├── use-packages.ts # Scan & Filterung über DependencyReaderPort
86
- │ └── use-updater.ts # Update & Verifikation über Updater-/Verifier-Ports
87
- │
88
- ├── components/ # 🎨 PRESENTATIONAL UI (Reine Darstellung mit Ink)
89
- │ ├── header.tsx # Ökosystem [E], Channel [stable], Sprache [L], Autor
90
- │ ├── workspace-bar.tsx # Aktives Modul mit statischem Schutzhinweis
91
- │ ├── mascot.tsx # 🐣 Animiertes Begleiter-Hühnchen ("Pip")
92
- │ ├── status-bar.tsx # Wackelfreie Statusleiste mit Zählern & Pip
93
- │ ├── tab-bar.tsx # Ökosystem-spezifische Tabs
94
- │ ├── package-list.tsx # Scrollbare Liste im Orange-Design
95
- │ ├── package-row.tsx # Zeile mit Badges ([Patch], [Minor], [MAJOR], [BETA])
96
- │ ├── controls-bar.tsx # Tastaturkürzel
97
- │ ├── workspace-modal.tsx # Modalauswahl für Module
98
- │ ├── version-modal.tsx # 🔍 Modale Version-Suche & Picker
99
- │ ├── splash-screen.tsx # Initialer Start-Screen
100
- │ ├── updating-view.tsx # Fortschrittsanzeige während des Updates
101
- │ └── summary-view.tsx # Ergebnisbericht nach Abschluss
102
- │
103
- ├── cli/ # 💻 HEADLESS CLI SUBCOMMANDS (für CI/CD & Shell-Agents)
104
- │ ├── parser.ts # Befehlszeilen-Parser (node:util.parseArgs)
105
- │ ├── command-modules.ts # `elevate modules`
106
- │ ├── command-scan.ts # `elevate scan`
107
- │ ├── command-versions.ts # `elevate versions`
108
- │ └── command-update.ts # `elevate update`
109
- │
110
- ├── mcp/ # 🤖 MODEL CONTEXT PROTOCOL (MCP Server)
111
- │ └── mcp-server.ts # Standardisierter stdio MCP-Server mit 5 Tools
112
- │
113
- ├── i18n/ # 🌍 Sprachverwaltung (de.ts / en.ts)
114
- ├── config.ts # ⚙️ Konfigurations-Loader
115
- ├── theme.ts # 🎨 Farb-Tokens & Icons
116
- ├── app.tsx # 📱 App-Shell (Container)
117
- └── index.tsx # 🏁 Universeller Einstiegspunkt (TUI / CLI / MCP)
118
- ```
119
-
120
- ---
121
-
122
- ## 🤖 Agentic & CI/CD Nutzung (Headless CLI & MCP)
123
-
124
- Elevate kann von KI-Agenten (Claude Code, Antigravity, Cursor, Copilot) sowie automatisierten CI/CD-Pipelines nahtlos angesteuert werden.
125
-
126
- ### 1. Headless CLI-Befehle (`--json`)
127
-
128
- ```bash
129
- # Module im Monorepo auflisten
130
- node tools/updater/elevate/index.mjs modules --json
131
-
132
- # Abhängigkeiten aller Module scannen (Exit-Code 1 wenn Updates verfügbar)
133
- node tools/updater/elevate/index.mjs scan --channel=stable --all-modules --json
134
-
135
- # Vollständige Versionshistorie eines Pakets abfragen
136
- node tools/updater/elevate/index.mjs versions chalk --json
137
-
138
- # Updates mit Guardrails simulieren (--dry-run)
139
- node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=chalk@5.6.2 --dry-run --json
140
-
141
- # Major-Updates gezielt anwenden (--allow-major erforderlich)
142
- node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=pinia@4.0.3 --allow-major --json
143
- ```
144
-
145
- ### 2. Model Context Protocol (MCP) Server
146
-
147
- Elevate bietet einen vollwertigen, stdio-basierten MCP-Server:
148
- ```bash
149
- node tools/updater/elevate/index.mjs mcp
150
- ```
151
-
152
- In der MCP-Konfiguration hinterlegen (z. B. `claude_desktop_config.json` oder Antigravity MCP):
153
- ```json
154
- {
155
- "mcpServers": {
156
- "elevate": {
157
- "command": "npx",
158
- "args": ["-y", "@dennisrepa/elevate", "mcp"]
159
- }
160
- }
161
- }
162
- ```
163
-
164
- #### Verfügbare MCP-Tools für LLMs:
165
- | Tool | Funktion |
166
- | :--- | :--- |
167
- | `elevate_discover_modules` | Erkennt alle Monorepo-Module und Workspaces für npm oder Maven |
168
- | `elevate_scan` | Scannt ein Modul (oder alle Module) nach verfügbaren Updates |
169
- | `elevate_get_versions` | Ruft die Versionshistorie direkt aus der Registry ab |
170
- | `elevate_apply_updates` | Wendet Updates mit Guardrails und Verifikations-Builds an |
171
- | `elevate_verify` | Führt modulspezifische Build- und Test-Checks aus |
172
-
173
- ---
174
-
175
- ## ⌨️ Tastatur-Steuerung (Interaktive TUI)
176
-
177
- | Taste | Aktion |
178
- | :--- | :--- |
179
- | **`E`** | **Ökosystem umschalten (📦 Node/npm ⇄ ☕ Java/Maven)** |
180
- | **`W`** | Modul- / Workspace-Auswahl öffnen |
181
- | **`V`** | **Version heraussuchen (Interaktiver Such- & Filterdialog)** |
182
- | **`L`** | Sprache umschalten (Deutsch ⇄ English) |
183
- | **`↑` / `↓`** *(oder `k`/`j`)* | In der Liste navigieren |
184
- | **`Space`** | Markierung des fokussierten Eintrags umschalten |
185
- | **`A`** | Alle sichtbaren Einträge im aktuellen Tab umschalten |
186
- | **`Tab`** *(oder `1`, `2`, `3`)* | Zwischen Tabs wechseln |
187
- | **`U`** | Update für alle ausgewählten Einträge starten |
188
- | **`R`** | Aktuelles Modul neu scannen |
189
- | **`Q`** | Elevate beenden |
190
-
191
- ---
192
-
193
- ## ⚙️ Konfiguration (`elevate.config.json`)
194
-
195
- Im Wurzelverzeichnis deines Repositories kann optional eine `elevate.config.json` angelegt werden:
196
-
197
- ```json
198
- {
199
- "author": "Dennis Répa",
200
- "channel": "stable",
201
- "locale": "de",
202
- "excludeScopes": ["@my-org", "com.mycompany"],
203
- "postUpdateScript": "npm test",
204
- "postUpdateLabel": "Test-Suite ausführen"
205
- }
206
- ```
207
-
208
- * **`author`:** Optionaler Name, der oben rechts im Header erscheint.
209
- * **`channel`:** `"stable"` (Standard, schließt Betas/RCs aus) oder `"all"` (zeigt auch Vorabversionen).
210
- * **`locale`:** `"de"` (Deutsch), `"en"` (Englisch) oder `"auto"` (automatische Erkennung).
211
- * **`excludeScopes`:** Liste interner Paket-Präfixe, die vor externen Registry-Abfragen geschützt werden.
212
- * **`postUpdateScript`:** Optionaler Konsistenz- oder Testbefehl nach einem npm-Update.
213
-
214
- ---
215
-
216
- ## 📦 Installation & Bereitstellung
217
-
218
- Elevate bietet maximale Flexibilität für jede Entwickler-Umgebung:
219
-
220
- ### 1. ⚡ Sofortstart ohne Installation via `npx` (Empfohlen)
221
- Startet Elevate sofort, ohne Klonen oder npm-Installationen:
222
- ```bash
223
- npx @dennisrepa/elevate
224
- ```
225
- > **Für autonome KI-Agenten (Claude Code, Cursor, Antigravity):**
226
- > Direkt in der MCP-Konfiguration hinterlegen:
227
- > ```json
228
- > {
229
- > "mcpServers": {
230
- > "elevate": {
231
- > "command": "npx",
232
- > "args": ["-y", "@dennisrepa/elevate", "mcp"]
233
- > }
234
- > }
235
- > }
236
- > ```
237
-
238
- ---
239
-
240
- ### 2. 🪟 Standalone Executable (Komplett ohne Node.js)
241
- Für reine Java-Entwickler, Systemadministratoren oder CI-Server ohne Node-Installation:
242
- 1. `elevate.exe` (Windows) oder `elevate-linux` aus den **[GitHub Releases](https://github.com/dennisrepa/elevate/releases)** herunterladen.
243
- 2. Direkt im Terminal oder per Doppelklick starten:
244
- ```powershell
245
- .\elevate.exe
246
- ```
247
-
248
- ---
249
-
250
- ### 3. 🌍 Globale System-Installation
251
- Installiert den Befehl `elevate` dauerhaft in jedem Terminal:
252
- ```bash
253
- npm install -g @dennisrepa/elevate
254
- ```
255
- Danach überall einfach aufrufen:
256
- ```bash
257
- elevate
258
- ```
259
-
260
- ---
261
-
262
- ### 4. 🏢 Monorepo- & Projekt-Integration
263
- Als devDependency im eigenen Monorepo hinterlegen:
264
- ```bash
265
- npm install -D @dennisrepa/elevate
266
- ```
267
- Skript in die Root-`package.json` einfügen:
268
- ```json
269
- {
270
- "scripts": {
271
- "elevate": "elevate"
272
- }
273
- }
274
- ```
275
- Jedes Teammitglied kann das Dashboard nun starten mit:
276
- ```bash
277
- npm run elevate
278
- ```
279
-
280
- ---
281
-
282
- ### 5. 🛠️ Lokale Entwicklung & Mitwirken (In diesem Repo)
283
- ```bash
284
- cd tools/updater/elevate
285
- npm run build
286
- npm link
287
- ```
288
- Direkt aus dem Root-Verzeichnis ausführen:
289
- ```powershell
290
- .\elevate.exe
291
- # oder
292
- node tools/updater/elevate/dist/cli.js
293
- ```
294
-
295
- ---
296
-
297
- ## ☕ Projekt unterstützen (Ko-fi & Sponsoring)
298
-
299
- Elevate ist Open-Source und wird mit Leidenschaft entwickelt. Wenn dir das Tool gefällt und es dir oder deinem Team Zeit spart, kannst du die Weiterentwicklung gerne unterstützen:
300
-
301
- [![Dennis Répa auf Ko-fi unterstützen](https://img.shields.io/badge/Ko--fi-Support%20Dennis%20R%C3%A9pa-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/dennisrepa)
302
-
303
- * ☕ **[Dennis Répa auf Ko-fi einen Kaffee spendieren](https://ko-fi.com/dennisrepa)**
304
- * 💻 Oder im Terminal: `npm fund @dennisrepa/elevate`
305
-
1
+ # 🪶 Elevate — Deutsche Dokumentation
2
+
3
+ > **Interaktives Terminal-Dashboard (TUI) zur sicheren, selektiven und transparenten Aktualisierung von Abhängigkeiten in Polyglot-Monorepos.**
4
+ > *Entwickelt und gepflegt von **Dennis Répa**.*
5
+
6
+ ---
7
+
8
+ ## 🌟 Übersicht
9
+
10
+ **Elevate** ist ein interaktives Terminal-Dashboard (TUI) zur sicheren, selektiven und transparenten Aktualisierung von Abhängigkeiten in **Polyglot-Monorepos** (Node/npm & Java/Maven) sowie Einzelprojekten.
11
+
12
+ * **Feder-Symbolik (`🪶`) & Orange-Brand (`#FF8800`):** Leicht, modern und übersichtlich im Terminal.
13
+ * **Polyglot-Fähig:** Unterstützt gleichzeitig Frontend-Projekte (`package.json` mit npm Workspaces) und Backend-Projekte (`pom.xml` mit Maven).
14
+ * **Release Channels:** Filtert Vorabversionen (Beta, RC, Alpha, Milestone, Snapshot) standardmäßig heraus und schlägt ausschließlich produktionsreife Releases vor.
15
+ * **Animiertes Begleiter-Hühnchen („Pip“ 🐣):** Begleitet den Entwickler dezent im Terminal und reagiert auf Aktionen.
16
+ * **Bilinguales i18n:** Jederzeit umschaltbar zwischen Deutsch und Englisch via Taste **`[L]`**.
17
+
18
+ ---
19
+
20
+ ## ✨ Features & Highlights
21
+
22
+ 1. **🌐 Polyglot Monorepo Support (npm & Maven):**
23
+ * **Node / npm:** Löst Workspaces genau wie npm auf (inklusive Glob-Mustern wie `packages/**`), berechnet SemVer-Diffs, aktualisiert `package.json`, führt `npm install` aus und prüft das Lockfile.
24
+ * **Java / Maven:** Findet jede `pom.xml` (auch die Root-POM), lässt Maven die Effective POM berechnen, sucht neuere Versionen über die Repositories des Builds (Mirrors, Nexus/Artifactory, Zugangsdaten aus der `settings.xml`) und prüft die betroffenen Module mit `mvn test-compile`.
25
+ * **Live-Wechsel:** Ein Tastendruck auf **`[E]`** schaltet im laufenden Betrieb zwischen Frontend- und Backend-Modulen um.
26
+
27
+ 2. **🔍 Version gezielt heraussuchen (`[V]`):**
28
+ * Man muss nicht zwingend auf die `latest` Version aktualisieren: Taste **`[V]`** öffnet ein interaktives Such-Modal für das aktuell ausgewählte Paket.
29
+ * Lädt alle jemals veröffentlichten Versionen aus der npm- oder Maven-Registry.
30
+ * Ermöglicht Echtzeit-Filterung während des Tippens (z. B. `3.2` oder `25`), Pfeiltasten-Navigation und Übernahme mit `Enter`.
31
+ * Manuell ausgewählte Versionen werden im Dashboard mit einem `[MANUELL]`-Badge hervorgehoben.
32
+
33
+ 3. **🚦 Release Channels (`stable` vs. `all`):**
34
+ * **`channel: "stable"` (Standard):** Verhindert das unabsichtliche Installieren instabiler Vorabversionen (`-alpha`, `-beta`, `-rc`, `-m1`, `-snapshot`).
35
+ * **`channel: "all"`:** Zeigt alle Versionen an und hebt Vorabversionen mit farbigen Warn-Badges (`[BETA]`, `[RC]`, `[ALPHA]`) in Magenta hervor.
36
+
37
+ 4. **🏢 Interne Abhängigkeiten (Workspace-Module & private Registries):**
38
+ * Workspace-Module, die voneinander abhängen, werden an ihre lokale Version angeglichen (`[Angleichen]`).
39
+ * Interne Pakete (`internalScopes`, z. B. `@my-org/*`, `com.mycompany.*`) werden nur in privaten Registries abgefragt, nie in einer öffentlichen.
40
+ * Details im Abschnitt [Interne Abhängigkeiten & Sicherheit](#-interne-abhängigkeiten--sicherheit).
41
+
42
+ 5. **🐣 Das animierte Hühnchen („Pip“):**
43
+ * Sitzt unten rechts im Dashboard.
44
+ * Reagiert auf den Status:
45
+ * *Idle:* Blinzelt sanft oder schlürft im Java-Modus Kaffee (`*kaffee schlürf* ☕`).
46
+ * *Scan:* Sucht neugierig mit Lupe (`( ˘ө˘ )🔍`).
47
+ * *Build:* Arbeitet emsig (`(ง •ө• )ง`).
48
+ * *Erfolg:* Feiert das Update mit Konfetti (`\( ᵔөᵔ )/ 🎉`).
49
+
50
+ 6. **🚀 Englischer Initial-Splash-Screen:**
51
+ * Ein stylischer Startbildschirm mit animiertem Ladebalken (~3,2 Sekunden).
52
+ * Kann jederzeit mit der `[Leertaste]` oder `[Enter]` sofort übersprungen werden.
53
+
54
+ ---
55
+
56
+ ## 🏢 Interne Abhängigkeiten & Sicherheit
57
+
58
+ Jede Abhängigkeit erhält eine **Herkunft**, bevor eine Registry kontaktiert wird:
59
+
60
+ | Herkunft | Erkannt an | Versionsquelle | Aktion |
61
+ | :--- | :--- | :--- | :--- |
62
+ | `workspace` | Ein Modul dieses Repositorys | Die **lokale** Version des Moduls | `align` (angleichen) |
63
+ | `private` | `internalScopes` oder eine explizite Zuordnung `@scope:registry` in der `.npmrc` | Die dafür konfigurierte private Registry | `update` |
64
+ | `public` | Alles andere | Die konfigurierte Registry | `update` |
65
+
66
+ Die URL der Registry allein entscheidet bewusst **nicht** über die Herkunft: In den meisten Unternehmen läuft jede Anfrage — auch für öffentliche Pakete — über einen Artifactory- oder Nexus-Proxy.
67
+
68
+ ### Workspace-Module angleichen
69
+
70
+ * **npm:** Schließt der Versionsbereich einer Abhängigkeit die lokale Version eines Workspace-Pakets nicht ein, verlinkt npm das Workspace **nicht**, sondern installiert ein gleichnamiges Paket aus der Registry. Elevate bietet an, den Bereich anzugleichen (z. B. `^1.0.0` ➔ `^2.0.0`). Nach `npm install` prüft es die `package-lock.json`: Jede angeglichene Abhängigkeit muss `"link": true` sein, sonst wird das Update zurückgenommen. Bereiche, die npm immer verlinkt (`*`, `file:`, `workspace:`), bleiben unberührt.
71
+ * **Maven:** Hängt ein Modul mit abweichender Version von einem Modul *desselben Reactors* ab (z. B. `1.0.0`, während das Modul auf `1.1.0-SNAPSHOT` steht), bietet Elevate das Angleichen an. Verweise über `${project.version}` brauchen kein Angleichen.
72
+ * Der Release Channel gilt beim Angleichen nicht: Ziel ist die lokale Version — auch `-SNAPSHOT` —, weil die Module eines Repositorys zusammen gebaut und getestet werden.
73
+
74
+ ### Private Registries & Dependency Confusion
75
+
76
+ * Interne Pakete werden nie in einer öffentlichen Registry abgefragt. Löst die Registry eines internen npm-Pakets zu `registry.npmjs.org` auf, wird es mit Begründung als *nicht angeboten* aufgeführt, statt abgefragt zu werden — genau diese Anfrage nach einem internen Namen nutzt ein Dependency-Confusion-Angriff aus.
77
+ * npm-Abfragen verwenden die npm-Konfiguration (`npm config`), Maven-Abfragen Maven selbst — Mirrors, private Repositories und Zugangsdaten gelten ohne eigene Elevate-Konfiguration, und Elevate fasst nie Zugangsdaten an.
78
+
79
+ ### Wohin Maven-Versionen geschrieben werden
80
+
81
+ Die Effective POM sagt, welche Version gilt, nicht wo sie steht. Elevate sucht die deklarierende Stelle — `<version>` einer Abhängigkeit, ein Eintrag im `<dependencyManagement>`, eine Property (auch in einer Parent-POM) oder ein externer `<parent>` — und ändert genau diesen Text; Formatierung und Kommentare bleiben erhalten. Vor dem Schreiben wird der Wert mit der effektiven Version abgeglichen. Weichen sie ab (aktive Profile, Properties von der Kommandozeile) oder stammt die Version aus einem externen Parent/BOM, wird die Abhängigkeit mit Begründung als *nicht angeboten* aufgeführt. Artefakte, die sich eine Versions-Property teilen, werden gekennzeichnet; widersprüchliche Zielversionen für eine gemeinsame Property werden abgelehnt.
82
+
83
+ ### Rücknahme
84
+
85
+ Jedes Update läuft als ein Ablauf: **Snapshot ➔ Schreiben & Installieren ➔ Integritätsprüfung ➔ Verifikation**. Schlägt Installation, Integritätsprüfung oder Verifikation fehl, werden alle berührten Dateien (Manifeste, Lockfile, Parent-POMs) wiederhergestellt und `node_modules` neu installiert. `--keep-on-failure` (CLI) bzw. `keepOnFailure` (MCP) behält die Änderungen einer fehlgeschlagenen *Verifikation* zur Untersuchung. Die Verifikation läuft außerdem einmal *vor* dem Update: Schlägt sie schon dort fehl, wird ein Fehlschlag danach als bereits vorhanden gemeldet und das Update behalten statt zurückgenommen. Ein abstürzender Verifier zählt als fehlgeschlagene Verifikation.
86
+
87
+ ### Verifikation
88
+
89
+ * **npm:** `npm ls` im Repository-Root (fehlende, ungültige oder unerfüllte Abhängigkeiten in allen Workspaces), sofern kein `postUpdateScript` gesetzt ist.
90
+ * **Maven:** `mvn test-compile -pl <geänderte Module> -amd` im Reactor — die geänderten Module *und alle Module, die von ihnen abhängen*. Eine Änderung an der Aggregator-POM baut den ganzen Reactor.
91
+
92
+ ### Voraussetzungen für Maven
93
+
94
+ Elevate verwendet den Maven Wrapper des Projekts (`mvnw` / `mvnw.cmd`), sonst `mvn` aus dem `PATH`. Fehlt beides, bricht der Maven-Scan mit einer klaren Meldung ab, statt zu raten. Die Plugin-Versionen sind für reproduzierbare Ergebnisse festgelegt (`maven-help-plugin` 3.5.2, `versions-maven-plugin` 2.22.0) und lassen sich je Repository mit `mavenPlugins` in der `elevate.config.json` ersetzen (siehe [Maven-Plugin-Versionen](#maven-plugin-versionen)). Scans schreiben temporäre Dateien nur nach `target/.elevate-*` und entfernen sie danach.
95
+
96
+ ### Repository-Root
97
+
98
+ Elevate verhält sich gleich, egal wo im Repository es gestartet wird. Der Root wird so bestimmt:
99
+
100
+ 1. Das nächste Verzeichnis (vom Startverzeichnis aufwärts) mit einer `elevate.config.json` ist der Root.
101
+ 2. Sonst schlägt npm das nächste Verzeichnis vor, dessen `package.json` `workspaces` deklariert, und Maven das obere Ende der zusammenhängenden POM-Kette (ein `<parent>`, der über `<relativePath>` gefunden wird, und jeder Aggregator, der das Projekt in `<modules>` aufführt). Der äußerste Vorschlag gewinnt.
102
+ 3. Ohne jede Markierung ist das Startverzeichnis der Root.
103
+
104
+ Die Suche verlässt nie den Checkout der Versionsverwaltung: Sie endet im nächsten Verzeichnis, das einen `.git`-Eintrag enthält. Eine verirrte `package.json` oder `pom.xml` oberhalb des Repositorys wird daher nie für dessen Root gehalten. Manifeste, die sich nicht lesen lassen, werden übersprungen.
105
+
106
+ ### Paketmanager-Schutz (npm)
107
+
108
+ Elevates Node.js-Unterstützung steuert npm. In einem Repository, das pnpm, Yarn oder Bun verwaltet, weigert sich Elevate, die npm-Module zu scannen oder zu ändern, denn `npm install` würde ein zweites Lockfile und ein `node_modules`-Layout anlegen, das das Projekt nicht verwendet. Der Paketmanager wird am Repository-Root in dieser Reihenfolge erkannt: Feld `packageManager` der `package.json` (`npm@`, `pnpm@`, `yarn@`, `bun@`), dann `package-lock.json` / `npm-shrinkwrap.json`, `pnpm-lock.yaml` / `pnpm-workspace.yaml`, `yarn.lock` / `.yarnrc.yml`, `bun.lock` / `bun.lockb`; ohne eines davon gilt das Repository als npm. Startet Elevate in einem Workspace-Paket, läuft die Suche in den übergeordneten Verzeichnissen weiter bis zum Checkout (nächstes Verzeichnis mit `.git`-Eintrag); ohne Checkout wird nur das Verzeichnis selbst geprüft. Die Ablehnung nennt den Paketmanager und die Datei, die entschieden hat. Maven-Module im selben Repository, lesende Versionsabfragen (`elevate versions`) und ein eigenes `postUpdateScript` bleiben unberührt.
109
+
110
+ ### Abhängigkeitsbereiche (npm)
111
+
112
+ | Bereich | Gescannt | Geschrieben |
113
+ | :--- | :---: | :---: |
114
+ | `dependencies`, `devDependencies`, `optionalDependencies` | ja | ja |
115
+ | `peerDependencies`, `overrides`, `bundleDependencies` | nein | nie |
116
+
117
+ Ein Peer-Bereich sagt Verbrauchern, mit welchen Versionen ein Paket funktioniert; ihn anzuheben, nur weil es eine neuere Version gibt, wäre ein Breaking Change, den niemand beschlossen hat. Ein Name, der in mehreren gescannten Bereichen steht, erhält den neuen Bereich in jedem davon; zur Anzeige haben `optionalDependencies` Vorrang vor `dependencies` (wie bei npm), und ein Name, der auch Entwicklungsabhängigkeit ist, wird als solche angezeigt.
118
+
119
+ ### Angleichen innerhalb des Reactors (Maven)
120
+
121
+ Eine Abhängigkeit von einem anderen Modul wird nur dann an dessen lokale Version angeglichen, wenn beide Module vom selben äußersten Aggregator gebaut werden (derselbe Reactor). Außerhalb eines Reactors löst Maven die Abhängigkeit wie jedes andere Artefakt aus einem Repository auf, auch wenn irgendwo im Checkout ein Projekt mit denselben Koordinaten liegt (ein Beispiel, eine Testdatei, eine alte Kopie). Eine solche Abhängigkeit wird daher abgefragt und als gewöhnliches Update angeboten — `private`, wenn sie zu `internalScopes` passt, sonst `public`. POM-Dateien unterhalb des `src`-Verzeichnisses eines Projekts (Testdateien, `maven-invoker-plugin`-Projekte, Archetype-Vorlagen) sowie unterhalb von `node_modules`, `target`, `build`, `dist`, `out` oder versteckten Verzeichnissen sind keine Module, es sei denn, ein `<modules>`-Abschnitt nennt sie.
122
+
123
+ ### Maven-Plugin-Versionen
124
+
125
+ Elevate startet zwei Maven-Plugins: `maven-help-plugin` (liest die Effective POM, Standard `3.5.2`) und `versions-maven-plugin` (fragt neuere Versionen ab, Standard `2.22.0`). Bietet dein Repository-Manager diese Versionen nicht an, lege mit `mavenPlugins` in der `elevate.config.json` andere fest. Ein Wert muss mit einer Ziffer beginnen und darf nur Buchstaben, Ziffern, `.` und `-` enthalten (höchstens 64 Zeichen); alles andere wird durch den Standard ersetzt und als Warnung gemeldet. Kann Maven ein Plugin nicht herunterladen, sagt Elevate das, nennt das Plugin und die Einstellung, mit der sich seine Version ersetzen lässt, und hängt Mavens eigene Fehlerzeilen an.
126
+
127
+ ### Windows-Pfade
128
+
129
+ Unter Windows sind `npm`, `mvn` und der Maven Wrapper Batch-Dateien, die über `cmd.exe` laufen. Dieses deutet `" % ! ^ & | < >` selbst innerhalb von Anführungszeichen; Elevate setzt kein Argument mit einem dieser Zeichen auf eine Kommandozeile. Das Verzeichnis, in dem das Repository liegt, wird dem Prozess als Arbeitsverzeichnis übergeben, Projektdateien werden relativ dazu benannt — ein Pfad wie `C:\R&D\shop` funktioniert also. Namen *innerhalb* des Repositorys, die auf einer Kommandozeile landen (etwa ein Modulverzeichnis für `-pl`), dürfen diese Zeichen weiterhin nicht enthalten; die Fehlermeldung nennt das Argument und die Abhilfe.
130
+
131
+ ---
132
+
133
+ ## 🏗️ Domain-Driven Clean Architecture
134
+
135
+ Elevate ist strikt nach den Prinzipien des **Domain-Driven Design (DDD)** und der **Hexagonalen Architektur (Ports & Adapters)** aufgebaut. UI und Hooks hängen niemals direkt von Paketmanagern ab:
136
+
137
+ ```text
138
+ src/
139
+ ├── domain/ # 🧠 DOMAIN CORE (Reine Fachlogik, zero I/O)
140
+ │ ├── models.ts # Entities & Value Objects (ProjectModule, UpdateCandidate, DependencyOrigin, …)
141
+ │ ├── origin.ts # Herkunft (workspace / private / public)
142
+ │ ├── versions.ts # Erkennung von Vorabversionen & Versionshilfen
143
+ │ ├── ports.ts # Domain Ports (ModuleDiscoveryPort, RegistryPort, etc.)
144
+ │ ├── ecosystem-strategy.ts # Strategy Pattern: Plattform-agnostisches Interface
145
+ │ └── ecosystem-factory.ts # Factory Pattern: Liefert npm- oder Maven-Strategie
146
+ │
147
+ ├── adapters/ # 🔌 ADAPTERS (Konkrete Implementierungen)
148
+ │ ├── shared/ # 🧰 XML (positionsgenau), Prozesse, Snapshots, Pooling
149
+ │ │
150
+ │ ├── npm/ # 📦 Node / npm Adapter
151
+ │ │ ├── npm-config.ts # Effektive npm-Konfiguration (Registry je Scope)
152
+ │ │ ├── npm-discovery.ts # Workspaces über @npmcli/map-workspaces
153
+ │ │ ├── npm-registry.ts # npm-view-Abfragen & Dist-Tags
154
+ │ │ ├── npm-scanner.ts # Herkunft, Angleichen, SemVer-Diffs
155
+ │ │ ├── npm-lockfile.ts # Prüfung der Workspace-Verlinkung im Lockfile
156
+ │ │ ├── npm-updater.ts # Aktualisiert package.json & npm install
157
+ │ │ ├── npm-verifier.ts # npm ls / eigene Verifikation
158
+ │ │ └── npm-strategy.ts # NpmEcosystemStrategy
159
+ │ │
160
+ │ └── maven/ # ☕ Java / Maven Adapter
161
+ │ ├── maven-command.ts # Aufruf über Maven Wrapper / mvn
162
+ │ ├── maven-pom.ts # Rohes POM-Modell mit editierbaren Textbereichen
163
+ │ ├── maven-project.ts # Alle POMs des Repos, Parent-Ketten, Reactors
164
+ │ ├── maven-discovery.ts # Module inkl. Root-POM, Versionen, Aggregator
165
+ │ ├── maven-resolution.ts # Effective POM & Report des versions-maven-plugin
166
+ │ ├── maven-locator.ts # Findet die Stelle, an der eine Version steht
167
+ │ ├── maven-scanner.ts # Herkunft, Angleichen, Update-Kandidaten
168
+ │ ├── maven-registry.ts # `elevate versions` über Maven (jeder Nexus/Artifactory)
169
+ │ ├── maven-updater.ts # Formatierungserhaltende POM-Änderungen
170
+ │ ├── maven-verifier.ts # mvn test-compile -pl … -amd
171
+ │ └── maven-strategy.ts # MavenEcosystemStrategy
172
+ │
173
+ ├── application/ # 🧭 ANWENDUNGSFÄLLE für TUI, CLI und MCP
174
+ │ ├── scan.ts # Scan-Kontext, Modulsuche, JSON-Ausgabe
175
+ │ ├── update-selection.ts # Guardrails für angeforderte Updates
176
+ │ ├── update-workflow.ts # Snapshot ➔ Installation ➔ Integrität ➔ Verifikation ➔ Rücknahme
177
+ │ └── version-lookup.ts # Versionshistorie ohne öffentliche Abfrage interner Namen
178
+ │
179
+ ├── hooks/ # 🎣 APPLICATION HOOKS (Verwenden ausschließlich Ports)
180
+ │ ├── use-workspaces.ts # Modulverwaltung über ModuleDiscoveryPort
181
+ │ ├── use-packages.ts # Scan & Filterung über DependencyReaderPort
182
+ │ └── use-updater.ts # Führt den gemeinsamen Update-Ablauf aus
183
+ │
184
+ ├── components/ # 🎨 PRESENTATIONAL UI (Reine Darstellung mit Ink)
185
+ │ ├── header.tsx # Ökosystem [E], Channel [stable], Sprache [L], Autor
186
+ │ ├── workspace-bar.tsx # Aktives Modul mit statischem Schutzhinweis
187
+ │ ├── mascot.tsx # 🐣 Animiertes Begleiter-Hühnchen ("Pip")
188
+ │ ├── status-bar.tsx # Wackelfreie Statusleiste mit Zählern & Pip
189
+ │ ├── tab-bar.tsx # Ökosystem-spezifische Tabs
190
+ │ ├── package-list.tsx # Scrollbare Liste im Orange-Design
191
+ │ ├── package-row.tsx # Zeile mit Badges ([Patch], [Minor], [MAJOR], [BETA])
192
+ │ ├── controls-bar.tsx # Tastaturkürzel
193
+ │ ├── workspace-modal.tsx # Modalauswahl für Module
194
+ │ ├── version-modal.tsx # 🔍 Modale Version-Suche & Picker
195
+ │ ├── splash-screen.tsx # Initialer Start-Screen
196
+ │ ├── updating-view.tsx # Fortschrittsanzeige während des Updates
197
+ │ └── summary-view.tsx # Ergebnisbericht nach Abschluss
198
+ │
199
+ ├── cli/ # 💻 HEADLESS CLI SUBCOMMANDS (für CI/CD & Shell-Agents)
200
+ │ ├── parser.ts # Befehlszeilen-Parser (node:util.parseArgs)
201
+ │ ├── command-modules.ts # `elevate modules`
202
+ │ ├── command-scan.ts # `elevate scan`
203
+ │ ├── command-versions.ts # `elevate versions`
204
+ │ └── command-update.ts # `elevate update`
205
+ │
206
+ ├── mcp/ # 🤖 MODEL CONTEXT PROTOCOL (MCP Server)
207
+ │ └── mcp-server.ts # Standardisierter stdio MCP-Server mit 5 Tools
208
+ │
209
+ ├── i18n/ # 🌍 Sprachverwaltung (de.ts / en.ts)
210
+ ├── config.ts # ⚙️ Konfigurations-Loader
211
+ ├── theme.ts # 🎨 Farb-Tokens & Icons
212
+ ├── app.tsx # 📱 App-Shell (Container)
213
+ └── index.tsx # 🏁 Universeller Einstiegspunkt (TUI / CLI / MCP)
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 🤖 Agentic & CI/CD Nutzung (Headless CLI & MCP)
219
+
220
+ Elevate kann von KI-Agenten (Claude Code, Antigravity, Cursor, Copilot) sowie automatisierten CI/CD-Pipelines nahtlos angesteuert werden.
221
+
222
+ ### 1. Headless CLI-Befehle (`--json`)
223
+
224
+ ```bash
225
+ # Module im Monorepo auflisten
226
+ node tools/updater/elevate/index.mjs modules --json
227
+
228
+ # Abhängigkeiten aller Module scannen
229
+ # (Exit-Code 0 = aktuell, 1 = Updates verfügbar, 3 = ein Modul konnte nicht gescannt werden)
230
+ node tools/updater/elevate/index.mjs scan --channel=stable --all-modules --json
231
+
232
+ # Vollständige Versionshistorie eines Pakets abfragen
233
+ node tools/updater/elevate/index.mjs versions chalk --json
234
+
235
+ # Updates mit Guardrails simulieren (--dry-run)
236
+ node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=chalk@5.6.2 --dry-run --json
237
+
238
+ # Major-Updates gezielt anwenden (--allow-major erforderlich)
239
+ node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=pinia@4.0.3 --allow-major --json
240
+
241
+ # Änderungen behalten, wenn die Verifikation fehlschlägt (Standard: Rücknahme)
242
+ node tools/updater/elevate/index.mjs update --module=apps/web --all --keep-on-failure
243
+ ```
244
+
245
+ `scan --json` liefert je Modul die `updates` (mit `action`, `origin` und bei Maven `declaredIn`) und die übersprungenen Abhängigkeiten unter `skipped` mit `reason`. `update` endet mit Exit-Code `2`, wenn das Update fehlschlug und zurückgenommen wurde.
246
+
247
+ ### 2. Model Context Protocol (MCP) Server
248
+
249
+ Elevate bietet einen vollwertigen, stdio-basierten MCP-Server:
250
+ ```bash
251
+ node tools/updater/elevate/index.mjs mcp
252
+ ```
253
+
254
+ In der MCP-Konfiguration hinterlegen (z. B. `claude_desktop_config.json` oder Antigravity MCP):
255
+ ```json
256
+ {
257
+ "mcpServers": {
258
+ "elevate": {
259
+ "command": "npx",
260
+ "args": ["-y", "@dennisrepa/elevate", "mcp"]
261
+ }
262
+ }
263
+ }
264
+ ```
265
+
266
+ #### Verfügbare MCP-Tools für LLMs:
267
+ | Tool | Funktion |
268
+ | :--- | :--- |
269
+ | `elevate_discover_modules` | Erkennt alle Monorepo-Module und Workspaces für npm oder Maven |
270
+ | `elevate_scan` | Scannt ein Modul (oder alle Module) nach Updates und anzugleichenden internen Abhängigkeiten; nennt übersprungene Abhängigkeiten mit Grund |
271
+ | `elevate_get_versions` | Ruft die Versionshistorie aus der Registry ab (keine öffentliche Abfrage interner Pakete) |
272
+ | `elevate_apply_updates` | Wendet Updates mit Verifikation, Major-Guardrail und Rücknahme an (`keepOnFailure` optional) |
273
+ | `elevate_verify` | Führt modulspezifische Build- und Test-Checks aus |
274
+
275
+ ---
276
+
277
+ ## ⌨️ Tastatur-Steuerung (Interaktive TUI)
278
+
279
+ | Taste | Aktion |
280
+ | :--- | :--- |
281
+ | **`E`** | **Ökosystem umschalten (📦 Node/npm ⇄ ☕ Java/Maven)** |
282
+ | **`W`** | Modul- / Workspace-Auswahl öffnen |
283
+ | **`V`** | **Version heraussuchen (Interaktiver Such- & Filterdialog)** |
284
+ | **`L`** | Sprache umschalten (Deutsch ⇄ English) |
285
+ | **`↑` / `↓`** *(oder `k`/`j`)* | In der Liste navigieren |
286
+ | **`Space`** | Markierung des fokussierten Eintrags umschalten |
287
+ | **`A`** | Alle sichtbaren Einträge im aktuellen Tab umschalten |
288
+ | **`Tab`** *(oder `1`, `2`, `3`)* | Zwischen Tabs wechseln |
289
+ | **`U`** | Update für alle ausgewählten Einträge starten |
290
+ | **`R`** | Aktuelles Modul neu scannen |
291
+ | **`Q`** | Elevate beenden |
292
+
293
+ ---
294
+
295
+ ## ⚙️ Konfiguration (`elevate.config.json`)
296
+
297
+ Im Wurzelverzeichnis deines Repositories kann optional eine `elevate.config.json` angelegt werden:
298
+
299
+ ```json
300
+ {
301
+ "author": "Dennis Répa",
302
+ "channel": "stable",
303
+ "locale": "de",
304
+ "internalScopes": ["@my-org", "com.mycompany"],
305
+ "mavenPlugins": { "help": "3.5.2", "versions": "2.22.0" },
306
+ "postUpdateScript": "npm test",
307
+ "postUpdateLabel": "Test-Suite ausführen"
308
+ }
309
+ ```
310
+
311
+ * **`author`:** Optionaler Name, der oben rechts im Header erscheint.
312
+ * **`channel`:** `"stable"` (Standard, schließt Betas/RCs aus) oder `"all"` (zeigt auch Vorabversionen).
313
+ * **`locale`:** `"de"` (Deutsch), `"en"` (Englisch) oder `"auto"` (automatische Erkennung).
314
+ * **`internalScopes`:** Interne npm-Scopes und Maven-groupId-Präfixe. `@my-org` trifft `@my-org/*`; `com.mycompany` trifft `com.mycompany` und `com.mycompany.*` (nicht `com.mycompanyx`). Passende Pakete werden nur in privaten Registries abgefragt. *Früher `excludeScopes`; der alte Name wird weiter gelesen und als veraltet gemeldet.*
315
+ * **`mavenPlugins`:** Optionale Versionen der Maven-Plugins, die Elevate startet: `help` (`maven-help-plugin`, Standard `3.5.2`) und `versions` (`versions-maven-plugin`, Standard `2.22.0`). Nutze es, wenn dein Repository-Manager die Standardversionen nicht anbietet. Ungültige Werte fallen mit einer Warnung auf den Standard zurück.
316
+ * **`postUpdateScript`:** Optionaler Befehl, der die Standard-Verifikation (`npm ls` / `mvn test-compile`) ersetzt. Läuft im Repository-Root (npm) bzw. im Modulverzeichnis (Maven).
317
+
318
+ ---
319
+
320
+ ## 📦 Installation & Bereitstellung
321
+
322
+ Elevate bietet maximale Flexibilität für jede Entwickler-Umgebung:
323
+
324
+ ### 1. ⚡ Sofortstart ohne Installation via `npx` (Empfohlen)
325
+ Startet Elevate sofort, ohne Klonen oder npm-Installationen:
326
+ ```bash
327
+ npx @dennisrepa/elevate
328
+ ```
329
+ > **Für autonome KI-Agenten (Claude Code, Cursor, Antigravity):**
330
+ > Direkt in der MCP-Konfiguration hinterlegen:
331
+ > ```json
332
+ > {
333
+ > "mcpServers": {
334
+ > "elevate": {
335
+ > "command": "npx",
336
+ > "args": ["-y", "@dennisrepa/elevate", "mcp"]
337
+ > }
338
+ > }
339
+ > }
340
+ > ```
341
+
342
+ ---
343
+
344
+ ### 2. 🪟 Standalone Executable (Komplett ohne Node.js)
345
+ Für reine Java-Entwickler, Systemadministratoren oder CI-Server ohne Node-Installation:
346
+ 1. `elevate.exe` (Windows) oder `elevate-linux` aus den **[GitHub Releases](https://github.com/dennisrepa/elevate/releases)** herunterladen.
347
+ 2. Direkt im Terminal oder per Doppelklick starten:
348
+ ```powershell
349
+ .\elevate.exe
350
+ ```
351
+
352
+ ---
353
+
354
+ ### 3. 🌍 Globale System-Installation
355
+ Installiert den Befehl `elevate` dauerhaft in jedem Terminal:
356
+ ```bash
357
+ npm install -g @dennisrepa/elevate
358
+ ```
359
+ Danach überall einfach aufrufen:
360
+ ```bash
361
+ elevate
362
+ ```
363
+
364
+ ---
365
+
366
+ ### 4. 🏢 Monorepo- & Projekt-Integration
367
+ Als devDependency im eigenen Monorepo hinterlegen:
368
+ ```bash
369
+ npm install -D @dennisrepa/elevate
370
+ ```
371
+ Skript in die Root-`package.json` einfügen:
372
+ ```json
373
+ {
374
+ "scripts": {
375
+ "elevate": "elevate"
376
+ }
377
+ }
378
+ ```
379
+ Jedes Teammitglied kann das Dashboard nun starten mit:
380
+ ```bash
381
+ npm run elevate
382
+ ```
383
+
384
+ ---
385
+
386
+ ### 5. 🛠️ Lokale Entwicklung & Mitwirken (In diesem Repo)
387
+ ```bash
388
+ cd tools/updater/elevate
389
+ npm run build
390
+ npm link
391
+ ```
392
+ Direkt aus dem Root-Verzeichnis ausführen:
393
+ ```powershell
394
+ .\elevate.exe
395
+ # oder
396
+ node tools/updater/elevate/dist/cli.js
397
+ ```
398
+
399
+ ---
400
+
401
+ ## ☕ Projekt unterstützen (Ko-fi & Sponsoring)
402
+
403
+ Elevate ist Open-Source und wird mit Leidenschaft entwickelt. Wenn dir das Tool gefällt und es dir oder deinem Team Zeit spart, kannst du die Weiterentwicklung gerne unterstützen:
404
+
405
+ [![Dennis Répa auf Ko-fi unterstützen](https://img.shields.io/badge/Ko--fi-Support%20Dennis%20R%C3%A9pa-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/dennisrepa)
406
+
407
+ * ☕ **[Dennis Répa auf Ko-fi einen Kaffee spendieren](https://ko-fi.com/dennisrepa)**
408
+ * 💻 Oder im Terminal: `npm fund @dennisrepa/elevate`
409
+