@dennisrepa/elevate 1.2.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/LICENSE +21 -0
- package/README.md +214 -0
- package/dist/cli.js +3569 -0
- package/dist/cli.js.map +1 -0
- package/docs/de.md +305 -0
- package/docs/en.md +309 -0
- package/docs/plans/transactional-updates.md +142 -0
- package/package.json +73 -0
package/docs/de.md
ADDED
|
@@ -0,0 +1,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:** 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
|
+
[](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
|
+
|
package/docs/en.md
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# 🪶 Elevate — English Documentation
|
|
2
|
+
|
|
3
|
+
> **Interactive Polyglot Terminal Dashboard (TUI) for safe, selective, and transparent dependency management across monorepos and multi-project repositories.**
|
|
4
|
+
> *Developed and maintained by **Dennis Répa**.*
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🌟 Overview
|
|
9
|
+
|
|
10
|
+
**Elevate** is an interactive terminal dashboard (TUI) for safe, selective, and transparent dependency management across **polyglot monorepos** (Node/npm & Java/Maven) and single-package projects.
|
|
11
|
+
|
|
12
|
+
* **Feather Identity (`🪶`) & Orange Brand (`#FF8800`):** Clean, modern, and readable in any terminal.
|
|
13
|
+
* **Polyglot Architecture:** Seamlessly manages frontend workspaces (`package.json` with npm workspaces) and backend modules (`pom.xml` with Maven).
|
|
14
|
+
* **Release Channels:** Filters out pre-releases (Alpha, Beta, RC, Milestone, Snapshot) by default, suggesting only battle-tested production releases.
|
|
15
|
+
* **Animated Companion ("Pip" 🐣):** A delightful chicken mascot that reacts to actions and keeps you company in the terminal.
|
|
16
|
+
* **Bilingual i18n:** Toggle on the fly between English and German with the **`[L]`** key.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ✨ Features & Highlights
|
|
21
|
+
|
|
22
|
+
1. **🌐 Polyglot Monorepo Support (npm & Maven):**
|
|
23
|
+
* **Node / npm:** Discovers root and workspace packages, calculates SemVer diffs, updates `package.json`, and runs `npm install`.
|
|
24
|
+
* **Java / Maven:** Scans the project tree for all `pom.xml` files (Spring Boot services, libraries, etc.), queries Maven Central, and verifies source code with `mvn test-compile`.
|
|
25
|
+
* **Runtime Switch:** Press **`[E]`** anytime to switch between frontend and backend modules.
|
|
26
|
+
|
|
27
|
+
2. **🔍 Pick a Specific Version (`[V]`):**
|
|
28
|
+
* You aren't restricted to upgrading only to `latest`: pressing **`[V]`** opens an interactive modal to browse and select any published version for the focused package.
|
|
29
|
+
* Fetches the entire version history directly from the npm or Maven registry.
|
|
30
|
+
* Real-time search/filtering as you type (e.g. `3.2` or `25`), arrow key navigation, and instant selection via `Enter`.
|
|
31
|
+
* Manually chosen versions are marked with a `[MANUAL]` badge in the dashboard.
|
|
32
|
+
|
|
33
|
+
3. **🚦 Release Channels (`stable` vs. `all`):**
|
|
34
|
+
* **`channel: "stable"` (Default):** Prevents accidental upgrades to pre-releases (`-alpha`, `-beta`, `-rc`, `-m1`, `-snapshot`).
|
|
35
|
+
* **`channel: "all"`:** Displays all versions and highlights pre-releases with prominent magenta badges (`[BETA]`, `[RC]`, `[ALPHA]`).
|
|
36
|
+
|
|
37
|
+
4. **🛡️ Monorepo Symlink & Internal Scope Protection:**
|
|
38
|
+
* Protects internal packages (e.g. `@my-org/*`, `com.mycompany.*`) from being overwritten by public registries.
|
|
39
|
+
|
|
40
|
+
5. **🐣 Animated Mascot ("Pip"):**
|
|
41
|
+
* Positioned neatly in the bottom right corner of the dashboard.
|
|
42
|
+
* State-reactive behavior:
|
|
43
|
+
* *Idle:* Blinks gently or sips coffee in Java mode (`*sipping coffee* ☕`).
|
|
44
|
+
* *Scanning:* Inspects dependencies with a magnifying glass (`( ˘ө˘ )🔍`).
|
|
45
|
+
* *Building:* Rolls up its sleeves (`(ง •ө• )ง`).
|
|
46
|
+
* *Success:* Celebrates with confetti (`\( ᵔөᵔ )/ 🎉`).
|
|
47
|
+
|
|
48
|
+
6. **🚀 Initial Splash Screen:**
|
|
49
|
+
* A stylish intro screen with an animated progress bar (~3.2 seconds).
|
|
50
|
+
* Can be skipped immediately at any time by pressing `[Space]` or `[Enter]`.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 🏗️ Domain-Driven Clean Architecture
|
|
55
|
+
|
|
56
|
+
Elevate follows **Domain-Driven Design (DDD)** and **Hexagonal Architecture (Ports & Adapters)**. The UI and hooks never depend directly on a package manager:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
src/
|
|
60
|
+
├── domain/ # 🧠 DOMAIN CORE (Pure domain logic, 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: Platform-agnostic interface
|
|
64
|
+
│ └── ecosystem-factory.ts # Factory Pattern: Resolves npm or Maven strategy
|
|
65
|
+
│
|
|
66
|
+
├── adapters/ # 🔌 ADAPTERS (Concrete port implementations)
|
|
67
|
+
│ ├── npm/ # 📦 Node / npm Adapters
|
|
68
|
+
│ │ ├── npm-discovery.ts # Reads workspaces from root package.json
|
|
69
|
+
│ │ ├── npm-registry.ts # npm registry queries & dist-tags
|
|
70
|
+
│ │ ├── npm-scanner.ts # Parses dependencies & SemVer diffs
|
|
71
|
+
│ │ ├── npm-updater.ts # Updates package.json & runs npm install
|
|
72
|
+
│ │ ├── npm-verifier.ts # Workspace check & test verification
|
|
73
|
+
│ │ └── npm-strategy.ts # NpmEcosystemStrategy
|
|
74
|
+
│ │
|
|
75
|
+
│ └── maven/ # ☕ Java / Maven Adapters
|
|
76
|
+
│ ├── maven-discovery.ts # Finds all pom.xml files in the repo tree
|
|
77
|
+
│ ├── maven-registry.ts # Maven Central metadata & release filters
|
|
78
|
+
│ ├── maven-scanner.ts # Parses dependencies, deduplication & properties
|
|
79
|
+
│ ├── maven-updater.ts # Updates pom.xml & runs mvn dependency:resolve
|
|
80
|
+
│ ├── maven-verifier.ts # mvn test-compile code verification
|
|
81
|
+
│ └── maven-strategy.ts # MavenEcosystemStrategy
|
|
82
|
+
│
|
|
83
|
+
├── hooks/ # 🎣 APPLICATION HOOKS (Consume only domain ports)
|
|
84
|
+
│ ├── use-workspaces.ts # Module management via ModuleDiscoveryPort
|
|
85
|
+
│ ├── use-packages.ts # Scanning & filtering via DependencyReaderPort
|
|
86
|
+
│ └── use-updater.ts # Updating & verification via updater/verifier ports
|
|
87
|
+
│
|
|
88
|
+
├── components/ # 🎨 PRESENTATIONAL UI (Pure rendering with Ink)
|
|
89
|
+
│ ├── header.tsx # Ecosystem [E], Channel [stable], Language [L], Author
|
|
90
|
+
│ ├── workspace-bar.tsx # Active module with static protection notice
|
|
91
|
+
│ ├── mascot.tsx # 🐣 Animated companion ("Pip")
|
|
92
|
+
│ ├── status-bar.tsx # Rock-solid status bar with counts & mascot
|
|
93
|
+
│ ├── tab-bar.tsx # Ecosystem-specific tabs
|
|
94
|
+
│ ├── package-list.tsx # Scrollable list with orange accents
|
|
95
|
+
│ ├── package-row.tsx # Row with badges ([Patch], [Minor], [MAJOR], [BETA])
|
|
96
|
+
│ ├── controls-bar.tsx # Keyboard shortcuts
|
|
97
|
+
│ ├── workspace-modal.tsx # Modal selector for modules
|
|
98
|
+
│ ├── version-modal.tsx # 🔍 Modal version search & picker
|
|
99
|
+
│ ├── splash-screen.tsx # Initial startup screen
|
|
100
|
+
│ ├── updating-view.tsx # Update progress display
|
|
101
|
+
│ └── summary-view.tsx # Final report summary
|
|
102
|
+
│
|
|
103
|
+
├── cli/ # 💻 HEADLESS CLI SUBCOMMANDS (for CI/CD & Shell-Agents)
|
|
104
|
+
│ ├── parser.ts # Zero-dependency CLI argument parser
|
|
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 # Standard stdio MCP server exposing 5 tools
|
|
112
|
+
│
|
|
113
|
+
├── i18n/ # 🌍 Localization dictionaries (de.ts / en.ts)
|
|
114
|
+
├── config.ts # ⚙️ Configuration loader
|
|
115
|
+
├── theme.ts # 🎨 Color tokens & icons
|
|
116
|
+
├── app.tsx # 📱 App Shell (Container)
|
|
117
|
+
└── index.tsx # 🏁 Universal entry point (TUI / CLI / MCP)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🤖 Agentic & CI/CD Support (Headless CLI & MCP)
|
|
123
|
+
|
|
124
|
+
Elevate is built from the ground up for agentic execution by AI coding assistants (Claude Code, Antigravity, Cursor, Copilot CLI) and automated CI/CD runners.
|
|
125
|
+
|
|
126
|
+
### 1. Headless CLI Subcommands (`--json`)
|
|
127
|
+
|
|
128
|
+
Any command line agent or pipeline can run Elevate without starting the interactive TUI:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Discover modules in monorepo
|
|
132
|
+
node tools/updater/elevate/index.mjs modules --json
|
|
133
|
+
|
|
134
|
+
# Scan dependencies across all modules (exit code 1 if updates found)
|
|
135
|
+
node tools/updater/elevate/index.mjs scan --channel=stable --all-modules --json
|
|
136
|
+
|
|
137
|
+
# Query complete version history for a package
|
|
138
|
+
node tools/updater/elevate/index.mjs versions chalk --json
|
|
139
|
+
|
|
140
|
+
# Apply updates with safety guardrails (simulation via --dry-run)
|
|
141
|
+
node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=chalk@5.6.2 --dry-run --json
|
|
142
|
+
|
|
143
|
+
# Apply major updates (explicit permission required)
|
|
144
|
+
node tools/updater/elevate/index.mjs update --module=apps/e2e-cockpit --packages=pinia@4.0.3 --allow-major --json
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 2. Model Context Protocol (MCP) Server
|
|
148
|
+
|
|
149
|
+
Elevate provides a native, stdio-based MCP Server:
|
|
150
|
+
```bash
|
|
151
|
+
node tools/updater/elevate/index.mjs mcp
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Register it in your agent's MCP settings (e.g., `claude_desktop_config.json` or Antigravity MCP config):
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"mcpServers": {
|
|
158
|
+
"elevate": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "@dennisrepa/elevate", "mcp"]
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### Available MCP Tools for LLMs:
|
|
167
|
+
| Tool | Purpose |
|
|
168
|
+
| :--- | :--- |
|
|
169
|
+
| `elevate_discover_modules` | Discovers all repository modules and workspaces for npm or Maven |
|
|
170
|
+
| `elevate_scan` | Scans a module (or all modules) for available dependency updates |
|
|
171
|
+
| `elevate_get_versions` | Fetches complete published version history from registry |
|
|
172
|
+
| `elevate_apply_updates` | Applies targeted updates with verification & major guardrails |
|
|
173
|
+
| `elevate_verify` | Runs module-specific build and test verification checks |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## ⌨️ Keyboard Shortcuts (Interactive TUI)
|
|
178
|
+
|
|
179
|
+
| Key | Action |
|
|
180
|
+
| :--- | :--- |
|
|
181
|
+
| **`E`** | **Switch Ecosystem (📦 Node/npm ⇄ ☕ Java/Maven)** |
|
|
182
|
+
| **`W`** | Open module / workspace selector |
|
|
183
|
+
| **`V`** | **Pick specific version (Interactive search & filter modal)** |
|
|
184
|
+
| **`L`** | Toggle language (English ⇄ German) |
|
|
185
|
+
| **`↑` / `↓`** *(or `k`/`j`)* | Navigate list items |
|
|
186
|
+
| **`Space`** | Toggle selection of focused item |
|
|
187
|
+
| **`A`** | Toggle all visible items in the active tab |
|
|
188
|
+
| **`Tab`** *(or `1`, `2`, `3`)* | Switch between tabs |
|
|
189
|
+
| **`U`** | Start update for all selected items |
|
|
190
|
+
| **`R`** | Re-scan the active module |
|
|
191
|
+
| **`Q`** | Quit Elevate |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## ⚙️ Configuration (`elevate.config.json`)
|
|
196
|
+
|
|
197
|
+
You can place an optional `elevate.config.json` file in your repository root:
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"author": "Dennis Répa",
|
|
202
|
+
"channel": "stable",
|
|
203
|
+
"locale": "en",
|
|
204
|
+
"excludeScopes": ["@my-org", "com.mycompany"],
|
|
205
|
+
"postUpdateScript": "npm test",
|
|
206
|
+
"postUpdateLabel": "Run test suite"
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
* **`author`:** Optional name displayed in the top-right header.
|
|
211
|
+
* **`channel`:** `"stable"` (default, excludes betas/RCs) or `"all"` (includes pre-releases).
|
|
212
|
+
* **`locale`:** `"en"` (English), `"de"` (German), or `"auto"` (system detection).
|
|
213
|
+
* **`excludeScopes`:** List of internal package prefixes protected from external registry lookups.
|
|
214
|
+
* **`postUpdateScript`:** Optional script executed after an npm update.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 📦 Installation & Setup
|
|
219
|
+
|
|
220
|
+
Elevate offers multiple flexible options for any developer workflow or environment:
|
|
221
|
+
|
|
222
|
+
### 1. ⚡ Zero-Install Instant Run via `npx` (Recommended)
|
|
223
|
+
Run Elevate immediately without cloning or installing anything:
|
|
224
|
+
```bash
|
|
225
|
+
npx @dennisrepa/elevate
|
|
226
|
+
```
|
|
227
|
+
> **For Autonomous AI Agents (Claude Code, Cursor, Antigravity):**
|
|
228
|
+
> Register Elevate directly in your agent's MCP settings:
|
|
229
|
+
> ```json
|
|
230
|
+
> {
|
|
231
|
+
> "mcpServers": {
|
|
232
|
+
> "elevate": {
|
|
233
|
+
> "command": "npx",
|
|
234
|
+
> "args": ["-y", "@dennisrepa/elevate", "mcp"]
|
|
235
|
+
> }
|
|
236
|
+
> }
|
|
237
|
+
> }
|
|
238
|
+
> ```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
### 2. 🪟 Standalone Executable (Zero Node.js Required)
|
|
243
|
+
For Java/Backend developers, system administrators, or CI environments without Node.js:
|
|
244
|
+
1. Download `elevate.exe` (Windows) or `elevate-linux` from the **[GitHub Releases](https://github.com/dennisrepa/elevate/releases)**.
|
|
245
|
+
2. Run directly in your terminal:
|
|
246
|
+
```powershell
|
|
247
|
+
.\elevate.exe
|
|
248
|
+
```
|
|
249
|
+
*(Or double-click `elevate.exe` in Windows Explorer).*
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
### 3. 🌍 Global System Installation
|
|
254
|
+
Install Elevate globally to have the `elevate` command available in every terminal:
|
|
255
|
+
```bash
|
|
256
|
+
npm install -g @dennisrepa/elevate
|
|
257
|
+
```
|
|
258
|
+
Then launch anywhere:
|
|
259
|
+
```bash
|
|
260
|
+
elevate
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### 4. 🏢 Monorepo & Project Integration
|
|
266
|
+
Add Elevate as a devDependency to your project or monorepo:
|
|
267
|
+
```bash
|
|
268
|
+
npm install -D @dennisrepa/elevate
|
|
269
|
+
```
|
|
270
|
+
Add an `elevate` script to your root `package.json`:
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"scripts": {
|
|
274
|
+
"elevate": "elevate"
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
Now every team member can launch the dashboard using:
|
|
279
|
+
```bash
|
|
280
|
+
npm run elevate
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### 5. 🛠️ Local Development & Contributing (Inside this Repo)
|
|
286
|
+
If you are developing or customizing Elevate locally:
|
|
287
|
+
```bash
|
|
288
|
+
cd tools/updater/elevate
|
|
289
|
+
npm run build
|
|
290
|
+
npm link
|
|
291
|
+
```
|
|
292
|
+
Run directly from repo root:
|
|
293
|
+
```powershell
|
|
294
|
+
.\elevate.exe
|
|
295
|
+
# or
|
|
296
|
+
node tools/updater/elevate/dist/cli.js
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## ☕ Support & Funding
|
|
302
|
+
|
|
303
|
+
Elevate is free, open-source software maintained to make dependency updates safe, fast, and transparent across multi-language monorepos. If Elevate saves you or your team valuable development time, you can support its creator and future feature development:
|
|
304
|
+
|
|
305
|
+
[](https://ko-fi.com/dennisrepa)
|
|
306
|
+
|
|
307
|
+
* ☕ **[Buy Dennis a coffee on Ko-fi](https://ko-fi.com/dennisrepa)**
|
|
308
|
+
* 💻 Or run: `npm fund @dennisrepa/elevate`
|
|
309
|
+
|