@aikotools/repo-maintenance 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +227 -0
  2. package/bin/loader.js +10 -0
  3. package/bin/repohub.js +5 -0
  4. package/dist/client/assets/index-Bh_JYZxI.js +15 -0
  5. package/dist/client/assets/index-D-CxJxP4.css +1 -0
  6. package/dist/client/index.html +13 -0
  7. package/dist/server/server/index.js +118 -0
  8. package/dist/server/server/services/bulk-service.js +157 -0
  9. package/dist/server/server/services/cascade-service.js +474 -0
  10. package/dist/server/server/services/config-service.js +343 -0
  11. package/dist/server/server/services/dependency-resolver.js +144 -0
  12. package/dist/server/server/services/git-service.js +320 -0
  13. package/dist/server/server/services/package-service.js +152 -0
  14. package/dist/server/server/services/process.js +51 -0
  15. package/dist/server/server/services/pull-all-service.js +415 -0
  16. package/dist/server/server/services/repo-scanner.js +230 -0
  17. package/dist/server/server/services/task-queue.js +29 -0
  18. package/dist/server/server/trpc/context.js +4 -0
  19. package/dist/server/server/trpc/init.js +7 -0
  20. package/dist/server/server/trpc/procedures/bulk.js +110 -0
  21. package/dist/server/server/trpc/procedures/cascade.js +207 -0
  22. package/dist/server/server/trpc/procedures/dependencies.js +26 -0
  23. package/dist/server/server/trpc/procedures/git.js +151 -0
  24. package/dist/server/server/trpc/procedures/package.js +43 -0
  25. package/dist/server/server/trpc/procedures/project.js +181 -0
  26. package/dist/server/server/trpc/procedures/repos.js +42 -0
  27. package/dist/server/server/trpc/router.js +20 -0
  28. package/dist/server/shared/types.js +3 -0
  29. package/package.json +68 -0
package/README.md ADDED
@@ -0,0 +1,227 @@
1
+ # RepoHub - Repository Maintenance Tool
2
+
3
+ Web-basiertes Dashboard zur Verwaltung des `saas-coding-kernel` Multi-Repo Monorepos. Bietet Dependency-Graph, Bulk-Operationen, Cascade-Updates und Git-Management fuer 140+ Packages.
4
+
5
+ ## Voraussetzungen
6
+
7
+ | Tool | Version | Zweck |
8
+ |------|---------|-------|
9
+ | **Bun** | latest | Backend-Runtime |
10
+ | **pnpm** | 10+ | Package Manager |
11
+ | **Node.js** | 24+ | Build-Tools |
12
+ | **Git** | - | Repository-Operationen |
13
+ | **GitHub CLI (`gh`)** | - | Pull-All (Clone + GitHub-Abfrage) |
14
+
15
+ GitHub CLI muss authentifiziert sein (`gh auth login`).
16
+
17
+ ## Installation & Start
18
+
19
+
20
+ ```bash
21
+ cd repo/tools/tool-repo-maintenance
22
+ pnpm install
23
+ cp .env.example .env # Anpassen falls noetig
24
+ ```
25
+
26
+ ### Development
27
+
28
+ ```bash
29
+ pnpm dev # Backend (3100) + Frontend (3101) parallel
30
+ pnpm dev:server # Nur Backend
31
+ pnpm dev:client # Nur Frontend
32
+ ```
33
+
34
+ Oeffne http://localhost:3101 im Browser.
35
+
36
+ ### Production
37
+
38
+ ```bash
39
+ pnpm build
40
+ pnpm start # http://localhost:3100
41
+ ```
42
+
43
+ ## Konfiguration
44
+
45
+ ### .env
46
+
47
+ ```bash
48
+ PORT=3100 # Backend-Port
49
+ VITE_PORT=3101 # Vite Dev-Server Port
50
+ NPM_REGISTRY=https://npm.pkg.github.com # npm Registry (fuer Cascade)
51
+ ```
52
+
53
+ ### Projekt-Einstellungen (UI)
54
+
55
+ Beim ersten Start ueber das Zahnrad-Icon (Settings) konfigurieren:
56
+
57
+ - **NPM Organizations** - z.B. `@xhubio-saas` (zum Erkennen interner Dependencies)
58
+ - **GitHub Organizations** - z.B. `xhubio-saas` (fuer Pull-All)
59
+ - **Parallel Tasks** - Anzahl gleichzeitiger Operationen (1-20, Default: 6)
60
+ - **Default Branch** - z.B. `main`
61
+
62
+ Die Konfiguration wird in `.repoMaintenance/project.json` gespeichert.
63
+
64
+ ## Features
65
+
66
+ ### Dashboard
67
+
68
+ Uebersicht mit Statistiken: Gesamtzahl Repos, Domains, uncommitted Changes und Dependency-Kanten. Zeigt Repos mit offenen Aenderungen und eine Domain-Uebersicht.
69
+
70
+ ### Repository-Detail
71
+
72
+ Klick auf ein Repo in der Sidebar oeffnet die Detailansicht:
73
+
74
+ - **Changes-Tab** - Geaenderte Dateien mit Diff-Viewer. Untracked Files koennen per Klick zu `.gitignore` hinzugefuegt werden.
75
+ - **Dependencies-Tab** - Interne Abhaengigkeiten mit Links zum jeweiligen Repo.
76
+ - **Dependents-Tab** - Repos die von diesem Repo abhaengen.
77
+ - **Actions** - Commit & Push, Pull, Start Cascade.
78
+ - **Recent Commits** - Letzte Commits des Repos.
79
+
80
+ ### Dependency Graph
81
+
82
+ Interaktive Visualisierung aller internen Abhaengigkeiten als Node-Edge-Graph (React Flow). Klick auf einen Node navigiert zum Repo-Detail.
83
+
84
+ ### Pull All
85
+
86
+ Synchronisiert alle Repos mit GitHub - wie `repo-maintenance.sh`, aber mit UI:
87
+
88
+ 1. Holt alle Repos der konfigurierten GitHub-Organisation via `gh repo list`
89
+ 2. **Klont** fehlende Repos in den richtigen Domain-Ordner
90
+ 3. **Pullt** existierende Repos (ueberspringt bei uncommitted Changes)
91
+ 4. Zeigt Live-Fortschritt mit Status pro Repo
92
+
93
+ **Status-Typen:**
94
+
95
+ | Status | Bedeutung |
96
+ |--------|-----------|
97
+ | Updated | Erfolgreich gepullt |
98
+ | Already up-to-date | Keine Aenderungen |
99
+ | Cloned | Neu von GitHub geklont |
100
+ | Skipped | In Ignore-Liste |
101
+ | Unmapped | Kein Domain-Mapping konfiguriert |
102
+ | Has changes | Uebersprungen wegen uncommitted Changes |
103
+ | Failed | Fehler beim Pull/Clone |
104
+
105
+ **Repo-Mapping konfigurieren:** Settings > Repo Mapping > Edit. Dort koennen Repos Domains zugewiesen, ignoriert oder aus der Unmapped-Liste zugeordnet werden.
106
+
107
+ ### Cascade Updates
108
+
109
+ Propagiert Dependency-Updates automatisch durch die gesamte Abhaengigkeitskette.
110
+
111
+ **Beispiel:** `lib-invoice-interface` wird aktualisiert. Cascade aktualisiert automatisch alle abhaengigen Pakete in der richtigen Reihenfolge (topologisch sortiert, Layer fuer Layer).
112
+
113
+ **Ablauf:**
114
+
115
+ 1. Source-Repo auswaehlen (z.B. `lib-invoice-interface`)
116
+ 2. Tool berechnet alle betroffenen Repos in topologischer Reihenfolge
117
+ 3. Optionen konfigurieren:
118
+ - **Wait for CI** - Wartet zwischen Layern auf CI/CD-Publish
119
+ - **Run Tests** - Fuehrt `pnpm test` vor dem Commit aus
120
+ - **Commit Prefix** - z.B. `deps: ` oder `chore: `
121
+ 4. Plan bestaetigen und starten
122
+
123
+ **Pro Repo wird ausgefuehrt:**
124
+
125
+ 1. `package.json` Dependencies aktualisieren
126
+ 2. `npm install`
127
+ 3. Tests (optional)
128
+ 4. Commit + Push
129
+ 5. Auf CI warten (optional) + publishte Version aufloesen
130
+
131
+ **Steuerung waehrend der Ausfuehrung:** Pause, Resume, Abort, Skip Failed, manuell Version setzen.
132
+
133
+ ### Bulk Operations
134
+
135
+ Beliebige Shell-Befehle ueber mehrere Repos gleichzeitig ausfuehren:
136
+
137
+ 1. Repos filtern nach Domain, Typ oder Suchbegriff
138
+ 2. Befehl eingeben (z.B. `npm run build`, `git status`, `npm test`)
139
+ 3. Parallelitaet waehlen (1-20)
140
+ 4. Starten - Live-Output pro Repo mit Exit-Code und Dauer
141
+
142
+ ### Packages (File-URL Management)
143
+
144
+ Zeigt Repos mit `file:`-Dependencies in `package.json`. Ermoeglicht Batch-Umschaltung zwischen lokalen `file:`-Pfaden (Entwicklung) und npm-Versionen (Produktion).
145
+
146
+ ### History
147
+
148
+ Persistente Historie aller Cascade- und Pull-All-Operationen mit Status, betroffenen Repos und Dauer.
149
+
150
+ ## Datenablage
151
+
152
+ ```
153
+ .repoMaintenance/
154
+ ├── project.json # Projekt-Konfiguration + Repo-Mapping
155
+ ├── cached-repos.json # Repo-Cache (fuer schnellen Start)
156
+ ├── cached-graph.json # Dependency-Graph Cache
157
+ ├── cascade-history/ # Cascade-Ausfuehrungen
158
+ └── pull-history/ # Pull-All Ausfuehrungen
159
+ ```
160
+
161
+ ## Scripts
162
+
163
+ | Script | Beschreibung |
164
+ |--------|-------------|
165
+ | `pnpm dev` | Development (Backend + Frontend) |
166
+ | `pnpm build` | TypeScript + Vite Build |
167
+ | `pnpm start` | Production Server starten |
168
+ | `pnpm test` | Tests mit Coverage |
169
+ | `pnpm lint` | ESLint |
170
+ | `pnpm format` | Prettier |
171
+ | `pnpm depcheck` | Unused Dependencies pruefen |
172
+
173
+ ## Architektur
174
+
175
+ ```
176
+ src/
177
+ ├── server/ # Hono + tRPC Backend (Bun Runtime)
178
+ │ ├── index.ts # Server Entry Point
179
+ │ ├── services/ # Business Logic
180
+ │ │ ├── repo-scanner.ts # Scannt repo/ nach Packages
181
+ │ │ ├── dependency-resolver.ts # Baut Dependency-Graph
182
+ │ │ ├── cascade-service.ts # Cascade-Update Orchestrierung
183
+ │ │ ├── bulk-service.ts # Bulk-Command Ausfuehrung
184
+ │ │ ├── git-service.ts # Git-Operationen (simple-git)
185
+ │ │ ├── pull-all-service.ts # Pull/Clone aller Repos
186
+ │ │ ├── package-service.ts # file: URL Management
187
+ │ │ ├── task-queue.ts # Paralleler Task-Executor
188
+ │ │ └── config-service.ts # Config + Cache Persistenz
189
+ │ └── trpc/ # tRPC Router + Procedures
190
+ │ ├── router.ts
191
+ │ └── procedures/
192
+ │ ├── project.ts # Projekt-Konfiguration
193
+ │ ├── repos.ts # Repo-Liste / Refresh
194
+ │ ├── git.ts # Git-Operationen
195
+ │ ├── cascade.ts # Cascade-Updates
196
+ │ ├── bulk.ts # Bulk-Operationen
197
+ │ ├── dependencies.ts # Dependency-Graph
198
+ │ └── package.ts # Package-Management
199
+ ├── client/ # React Frontend
200
+ │ ├── main.tsx # App Entry Point
201
+ │ ├── App.tsx # Root-Komponente
202
+ │ ├── trpc.ts # tRPC Client Setup
203
+ │ └── components/
204
+ │ ├── layout/ # AppLayout, Sidebar, StatusBar
205
+ │ ├── dashboard/ # Dashboard-Ansicht
206
+ │ ├── repo-detail/ # Repository-Detail
207
+ │ ├── graph/ # Dependency-Graph (React Flow)
208
+ │ ├── cascade/ # Cascade Planner & Monitor
209
+ │ ├── bulk/ # Bulk-Operationen
210
+ │ ├── history/ # History-Ansicht
211
+ │ ├── packages/ # File-URL Ansicht
212
+ │ ├── settings/ # Settings + Repo-Mapping Dialog
213
+ │ └── shared/ # Shared Components
214
+ └── shared/ # Shared Types (Server + Client)
215
+ └── types.ts
216
+ ```
217
+
218
+ ## Tech Stack
219
+
220
+ | Komponente | Technologie |
221
+ |------------|-------------|
222
+ | Backend | Bun + Hono + tRPC |
223
+ | Frontend | React 19 + Vite + Tailwind CSS 4 |
224
+ | State | TanStack Query (Polling fuer Live-Updates) |
225
+ | Graph | React Flow (@xyflow/react) |
226
+ | Git | simple-git |
227
+ | Icons | Lucide React |
package/bin/loader.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Node.js ESM loader that adds .js extension to extensionless relative imports.
3
+ * Required because tsc with module:"preserve" emits imports as written in source.
4
+ */
5
+ export async function resolve(specifier, context, nextResolve) {
6
+ if (specifier.startsWith('.') && !specifier.match(/\.\w+$/)) {
7
+ return nextResolve(specifier + '.js', context)
8
+ }
9
+ return nextResolve(specifier, context)
10
+ }
package/bin/repohub.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { register } from 'node:module'
3
+
4
+ register('./loader.js', import.meta.url)
5
+ await import('../dist/server/server/index.js')