hmgr 0.0.6 → 0.0.12
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/dist/adapter/agents.js +14 -5
- package/dist/adapter/bundle-yaml.js +87 -0
- package/dist/adapter/claude-code.js +53 -12
- package/dist/adapter/dateisystem.js +85 -43
- package/dist/adapter/git.js +148 -0
- package/dist/adapter/heime.js +76 -0
- package/dist/adapter/hermes.js +16 -7
- package/dist/adapter/npm-registry.js +61 -0
- package/dist/adapter/paket-version.js +25 -0
- package/dist/adapter/umgebung.js +6 -1
- package/dist/adapter/verlauf-json.js +39 -0
- package/dist/adapter/wsl.js +212 -0
- package/dist/adapter/zustand-json.js +40 -12
- package/dist/cli/hilfe.js +197 -11
- package/dist/cli/main.js +376 -21
- package/dist/gui/hmgr-cli.js +44 -0
- package/dist/gui/main.js +445 -4
- package/dist/gui/preload.cjs +30 -2
- package/dist/gui/renderer/index.html +79 -16
- package/dist/gui/renderer/renderer.js +807 -286
- package/dist/gui/renderer/styles.css +89 -16
- package/dist/kern/anwendungsfaelle.js +687 -18
- package/dist/kern/modell.js +192 -1
- package/dist/kern/version.js +13 -0
- package/dist/ports/dateizugriff.js +1 -0
- package/dist/ports/harness.js +4 -0
- package/dist/ports/heime.js +1 -0
- package/dist/ports/verlauf.js +4 -0
- package/dist/ports/zustand.js +16 -1
- package/package.json +26 -5
package/dist/gui/preload.cjs
CHANGED
|
@@ -11,6 +11,10 @@ contextBridge.exposeInMainWorld('hmgr', {
|
|
|
11
11
|
marketplaces: () => ipcRenderer.invoke('hmgr:marketplaces'),
|
|
12
12
|
skills: () => ipcRenderer.invoke('hmgr:skills'),
|
|
13
13
|
quellen: () => ipcRenderer.invoke('hmgr:quellen'),
|
|
14
|
+
/** Bundles aller bekannten Quellen (E69), entdeckt beim Quellen-Scan: kein eigener Katalog. */
|
|
15
|
+
bundles: () => ipcRenderer.invoke('hmgr:bundles'),
|
|
16
|
+
bundleInstallieren: (args) => ipcRenderer.invoke('hmgr:bundleInstallieren', args),
|
|
17
|
+
bundleEntfernen: (args) => ipcRenderer.invoke('hmgr:bundleEntfernen', args),
|
|
14
18
|
/** Icon einer Quelle als data-URL, oder null (E60). */
|
|
15
19
|
icon: (text) => ipcRenderer.invoke('hmgr:icon', text),
|
|
16
20
|
/** Öffnet eine Quelle: Repo-Seite im Browser oder Ordner im Dateimanager (E60). */
|
|
@@ -29,6 +33,12 @@ contextBridge.exposeInMainWorld('hmgr', {
|
|
|
29
33
|
eintragLoeschen: (args) => ipcRenderer.invoke('hmgr:eintragLoeschen', args),
|
|
30
34
|
uebernehmen: (args) => ipcRenderer.invoke('hmgr:uebernehmen', args),
|
|
31
35
|
aktualisieren: (args) => ipcRenderer.invoke('hmgr:aktualisieren', args),
|
|
36
|
+
/** Changelog der letzten Läufe (E80), neueste zuerst. */
|
|
37
|
+
verlauf: () => ipcRenderer.invoke('hmgr:verlauf'),
|
|
38
|
+
/** Installiert das geladene GUI-Update und startet neu (E80), Gegenstück zum Neustart-Knopf. */
|
|
39
|
+
neuStarten: () => {
|
|
40
|
+
ipcRenderer.send('hmgr:neuStarten');
|
|
41
|
+
},
|
|
32
42
|
arbeitsverzeichnisHinzufuegen: (pfad) => ipcRenderer.invoke('hmgr:arbeitsverzeichnisHinzufuegen', pfad),
|
|
33
43
|
arbeitsverzeichnisVergessen: (pfad) => ipcRenderer.invoke('hmgr:arbeitsverzeichnisVergessen', pfad),
|
|
34
44
|
/** Nativer Verzeichnis-Dialog fürs Pfadfeld in „Verzeichnis hinzufügen" (A1). */
|
|
@@ -39,6 +49,13 @@ contextBridge.exposeInMainWorld('hmgr', {
|
|
|
39
49
|
harnessAktivieren: (name) => ipcRenderer.invoke('hmgr:harnessAktivieren', name),
|
|
40
50
|
harnessDeaktivieren: (name) => ipcRenderer.invoke('hmgr:harnessDeaktivieren', name),
|
|
41
51
|
saeubern: (name) => ipcRenderer.invoke('hmgr:saeubern', name),
|
|
52
|
+
/** Homedirs je Harness (E78): zeigen, umstellen (F89), zusätzliche eintragen und vergessen (F87). */
|
|
53
|
+
harnessHeime: () => ipcRenderer.invoke('hmgr:harnessHeime'),
|
|
54
|
+
wslDistros: () => ipcRenderer.invoke('hmgr:wslDistros'),
|
|
55
|
+
harnessHeimSetzen: (args) => ipcRenderer.invoke('hmgr:harnessHeimSetzen', args),
|
|
56
|
+
harnessHeimZuruecksetzen: (harness) => ipcRenderer.invoke('hmgr:harnessHeimZuruecksetzen', harness),
|
|
57
|
+
harnessHeimHinzufuegen: (args) => ipcRenderer.invoke('hmgr:harnessHeimHinzufuegen', args),
|
|
58
|
+
harnessHeimEntfernen: (args) => ipcRenderer.invoke('hmgr:harnessHeimEntfernen', args),
|
|
42
59
|
/** Verwalteter Hermes-Skill-Ordner (E56): zeigen kommt über hmgr:istZustand, hier nur Ändern. */
|
|
43
60
|
skillOrdnerFestlegen: (args) => ipcRenderer.invoke('hmgr:skillOrdnerFestlegen', args),
|
|
44
61
|
skillOrdnerEntfernen: (args) => ipcRenderer.invoke('hmgr:skillOrdnerEntfernen', args),
|
|
@@ -50,15 +67,26 @@ contextBridge.exposeInMainWorld('hmgr', {
|
|
|
50
67
|
antwortenRueckfrage: (id, antwort) => {
|
|
51
68
|
ipcRenderer.send('hmgr:rueckfrage:antwort', { id, antwort });
|
|
52
69
|
},
|
|
53
|
-
/** Anstoß zum selbsttätigen Aktualisieren (E44): Main ruft nach dem Start und alle sechs Stunden
|
|
70
|
+
/** Anstoß zum selbsttätigen Aktualisieren (E44): Main ruft nach dem Start und alle sechs Stunden,
|
|
71
|
+
mit dem Auslöser für den Verlauf (E80). */
|
|
54
72
|
onAktualisierenAnstossen: (hoerer) => {
|
|
55
|
-
ipcRenderer.on('hmgr:aktualisierenAnstossen', () => hoerer());
|
|
73
|
+
ipcRenderer.on('hmgr:aktualisierenAnstossen', (_event, ausloeser) => hoerer(ausloeser));
|
|
56
74
|
},
|
|
57
75
|
/** Anstoß zum stillen Neuladen der Anzeige (E62): Main ruft bei Fokus-Wechsel und beobachteten
|
|
58
76
|
Dateiänderungen, nie mit Netzzugriff (im Unterschied zu onAktualisierenAnstossen). */
|
|
59
77
|
onNeuLadenAnstossen: (hoerer) => {
|
|
60
78
|
ipcRenderer.on('hmgr:neuLadenAnstossen', () => hoerer());
|
|
61
79
|
},
|
|
80
|
+
/** Prüfung auf neue hmgr-Stände (E77), angestoßen bei jedem Aktualisieren-Lauf (E80: Start,
|
|
81
|
+
Intervall, Klick). Antwortet nicht, meldet sich später über onSelbstUpdate — Netz und Spawn
|
|
82
|
+
dauern länger als ein Knopfdruck. */
|
|
83
|
+
selbstUpdatePruefen: () => {
|
|
84
|
+
ipcRenderer.send('hmgr:selbstUpdatePruefen');
|
|
85
|
+
},
|
|
86
|
+
/** Ein Fund der Selbst-Prüfung (E77): geladenes GUI-Update oder neuere CLI auf npm. */
|
|
87
|
+
onSelbstUpdate: (hoerer) => {
|
|
88
|
+
ipcRenderer.on('hmgr:selbstUpdate', (_event, nachricht) => hoerer(nachricht));
|
|
89
|
+
},
|
|
62
90
|
/** MCP-Ansicht (E61-Folgerunde): Katalog gelesen, nie geschrieben. */
|
|
63
91
|
mcpUebersicht: () => ipcRenderer.invoke('hmgr:mcpUebersicht'),
|
|
64
92
|
/** Plätze für den Einhängen-Dialog (F42): kommt aus dem Kern, hängt an der Fähigkeit (E16). */
|
|
@@ -42,8 +42,18 @@
|
|
|
42
42
|
</nav>
|
|
43
43
|
|
|
44
44
|
<div class="stand">
|
|
45
|
-
<p id="standtext">Noch nicht
|
|
46
|
-
<button class="standknopf" type="button" id="standknopf"
|
|
45
|
+
<p id="standtext">Noch nicht geprüft</p>
|
|
46
|
+
<button class="standknopf" type="button" id="standknopf" aria-label="Verlauf öffnen" title="Verlauf öffnen">›</button>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<!-- Update-Hinweise über hmgr selbst (E77): geladenes GUI-Paket und/oder neuere CLI auf npm.
|
|
50
|
+
Beide können zugleich stehen, deshalb je eine eigene Zeile. Nur Text, kein Knopf für die
|
|
51
|
+
CLI-Zeile: die GUI installiert die CLI nicht selbst. Leer und verborgen, solange nichts
|
|
52
|
+
ansteht. Nur bei der GUI ein Knopf (E80): Neustart installiert das geladene Paket. -->
|
|
53
|
+
<div class="selbstupdate" id="selbstupdate" role="status" hidden>
|
|
54
|
+
<p id="selbstupdate-gui" hidden></p>
|
|
55
|
+
<p id="selbstupdate-cli" hidden></p>
|
|
56
|
+
<button class="standknopf" type="button" id="selbstupdate-neustart" hidden>Jetzt neu starten</button>
|
|
47
57
|
</div>
|
|
48
58
|
|
|
49
59
|
<!-- Harness-Schalter des Entwurfs (GRILL.md Entwurfskritik 4) docken hier an. Der Kern hält
|
|
@@ -81,6 +91,10 @@
|
|
|
81
91
|
<input type="search" id="suchfeld" placeholder="Skill oder Pfad suchen" aria-label="Skills durchsuchen">
|
|
82
92
|
</div>
|
|
83
93
|
<div class="filter" role="group" aria-label="Nach Quelle filtern" id="quellenfilter"></div>
|
|
94
|
+
<div class="filter" role="group" aria-label="Sortieren" id="sortierung">
|
|
95
|
+
<button class="chip" type="button" id="sortnach-name" aria-pressed="true" data-richtung="auf">Name<span class="sortpfeil" aria-hidden="true">↑</span></button>
|
|
96
|
+
<button class="chip" type="button" id="sortnach-datum" aria-pressed="false">Zuletzt geändert<span class="sortpfeil" aria-hidden="true"></span></button>
|
|
97
|
+
</div>
|
|
84
98
|
</div>
|
|
85
99
|
|
|
86
100
|
<p class="katalogzahl" id="katalogzahl"></p>
|
|
@@ -130,19 +144,19 @@
|
|
|
130
144
|
<div class="mcpliste" id="mcpliste"></div>
|
|
131
145
|
</section>
|
|
132
146
|
|
|
133
|
-
<!-- ============ AKTUALISIEREN ============ -->
|
|
147
|
+
<!-- ============ AKTUALISIEREN (E80: Verlauf statt Sitzungsbericht) ============ -->
|
|
134
148
|
<section id="ansicht-update" hidden>
|
|
135
149
|
<div class="ansichtskopf">
|
|
136
150
|
<h1>Aktualisieren</h1>
|
|
137
|
-
<p>Holt jede Quelle auf den neuesten Stand ihres Refs
|
|
151
|
+
<p>Holt jede Quelle auf den neuesten Stand ihres Refs und erneuert alle Links — von selbst beim Start und alle sechs Stunden, oder jetzt mit dem Knopf. Checkouts mit lokalen Änderungen bleiben unangetastet. Darunter steht, was die letzten Läufe geändert haben.</p>
|
|
138
152
|
</div>
|
|
139
153
|
|
|
140
154
|
<div class="startfeld">
|
|
141
|
-
<p id="updatestand">Noch nicht
|
|
142
|
-
<button class="
|
|
155
|
+
<p id="updatestand">Noch nicht geprüft</p>
|
|
156
|
+
<button class="kringel" type="button" id="updatestart" aria-label="Jetzt prüfen und aktualisieren" title="Jetzt prüfen und aktualisieren">↻</button>
|
|
143
157
|
</div>
|
|
144
158
|
|
|
145
|
-
<div class="bericht" id="
|
|
159
|
+
<div class="bericht" id="verlauf"></div>
|
|
146
160
|
</section>
|
|
147
161
|
|
|
148
162
|
<!-- ============ PLUGINS ============ -->
|
|
@@ -216,7 +230,18 @@
|
|
|
216
230
|
<svg viewBox="0 0 16 16" stroke-width="1.6" aria-hidden="true"><circle cx="7" cy="7" r="4.5"/><path d="M10.5 10.5 14.5 14.5"/></svg>
|
|
217
231
|
<input type="search" id="dsk-suche" placeholder="Skill suchen" aria-label="Skills durchsuchen">
|
|
218
232
|
</div>
|
|
219
|
-
|
|
233
|
+
<!-- Bundle-Sektion (E69, F68): kein eigener Navigationspunkt, Bundles stehen hier, wo die
|
|
234
|
+
Entscheidung fällt, was ins Ziel kommt. Leer bleibt der Kasten weg. -->
|
|
235
|
+
<div class="dskgruppe" id="dsk-bundlebox" hidden>
|
|
236
|
+
<span class="etikett">Bundles</span>
|
|
237
|
+
<p class="ohne dskgruppentext">Ein Bundle bringt eine ganze Zusammenstellung auf einmal, auch über Quellen hinweg. Fehlende Quellen legt hmgr dabei an.</p>
|
|
238
|
+
<div class="wahl" id="dsk-bundles"></div>
|
|
239
|
+
<p class="ohne dskgruppenfehler" id="dsk-bundlefehler" hidden></p>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="dskgruppe">
|
|
242
|
+
<span class="etikett" id="dsk-skilletikett">Skills</span>
|
|
243
|
+
<div class="wahl" id="dsk-liste"></div>
|
|
244
|
+
</div>
|
|
220
245
|
</div>
|
|
221
246
|
<div class="dfuss">
|
|
222
247
|
<span class="links mono" id="dsk-bilanz">0 ausgewählt</span>
|
|
@@ -275,20 +300,58 @@
|
|
|
275
300
|
</form>
|
|
276
301
|
</dialog>
|
|
277
302
|
|
|
278
|
-
|
|
303
|
+
|
|
304
|
+
<dialog id="d-heim-pfad">
|
|
279
305
|
<form method="dialog">
|
|
280
306
|
<div class="dkopf">
|
|
281
|
-
<span class="etikett">
|
|
282
|
-
<h3 id="
|
|
283
|
-
<p
|
|
307
|
+
<span class="etikett">Homedir</span>
|
|
308
|
+
<h3 id="dhh-titel">Homedir</h3>
|
|
309
|
+
<p>hmgr merkt sich nur den neuen Ort und zeigt ab dann ihn. Was am alten Ort liegt, bleibt dort liegen — es wird nichts verschoben und nichts gelöscht.</p>
|
|
284
310
|
</div>
|
|
285
311
|
<div class="dkoerper">
|
|
286
|
-
<
|
|
287
|
-
|
|
312
|
+
<div class="feld">
|
|
313
|
+
<label class="etikett" for="dhh-pfad">Pfad</label>
|
|
314
|
+
<input type="text" id="dhh-pfad" spellcheck="false" autocomplete="off" autocapitalize="off">
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
<div class="dfuss">
|
|
318
|
+
<button class="knopf leise" value="abbruch">Abbrechen</button>
|
|
319
|
+
<button class="knopf signal" value="ok" id="dhh-ok">Übernehmen</button>
|
|
320
|
+
</div>
|
|
321
|
+
</form>
|
|
322
|
+
</dialog>
|
|
323
|
+
|
|
324
|
+
<dialog id="d-heim-wsl">
|
|
325
|
+
<form method="dialog">
|
|
326
|
+
<div class="dkopf">
|
|
327
|
+
<span class="etikett">Homedir in WSL</span>
|
|
328
|
+
<h3>Welche Distro?</h3>
|
|
329
|
+
<p>Claude Code in einer WSL-Distro hat ein eigenes Homedir. hmgr ermittelt es einmal, zeigt es an und legt Links dort über wsl.exe an; die Checkouts bleiben, wo sie sind. Das Ziel steht danach als eigene Karte neben dem Windows-Homedir, gespiegelt wird nichts.</p>
|
|
330
|
+
</div>
|
|
331
|
+
<div class="dkoerper">
|
|
332
|
+
<div class="feld">
|
|
333
|
+
<label class="etikett" for="dhw-distro">Distro</label>
|
|
334
|
+
<select id="dhw-distro"></select>
|
|
335
|
+
<p id="dhw-leer" class="dialogfehler" hidden>Auf diesem Rechner meldet wsl -l -q keine Distro.</p>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
<div class="dfuss">
|
|
339
|
+
<button class="knopf leise" value="abbruch">Abbrechen</button>
|
|
340
|
+
<button class="knopf signal" value="ok" id="dhw-ok">Hinzufügen</button>
|
|
341
|
+
</div>
|
|
342
|
+
</form>
|
|
343
|
+
</dialog>
|
|
344
|
+
|
|
345
|
+
<dialog id="d-heim-weg">
|
|
346
|
+
<form method="dialog">
|
|
347
|
+
<div class="dkopf">
|
|
348
|
+
<span class="etikett">Rückfrage</span>
|
|
349
|
+
<h3 id="dhv-titel">Homedir vergessen?</h3>
|
|
350
|
+
<p id="dhv-text"></p>
|
|
288
351
|
</div>
|
|
289
352
|
<div class="dfuss">
|
|
290
353
|
<button class="knopf leise" value="abbruch">Abbrechen</button>
|
|
291
|
-
<button class="knopf signal" value="
|
|
354
|
+
<button class="knopf signal" value="ok">Ja, vergessen</button>
|
|
292
355
|
</div>
|
|
293
356
|
</form>
|
|
294
357
|
</dialog>
|
|
@@ -557,7 +620,7 @@
|
|
|
557
620
|
<div class="dkoerper">
|
|
558
621
|
<section class="abschnitt">
|
|
559
622
|
<span class="etikett" id="harnesstitel">Harnesses</span>
|
|
560
|
-
<p>Schalt aus, was hmgr nicht anfassen soll. Ein abgeschalteter Harness bleibt auf dem Rechner, hmgr pflegt seine Ziele nur nicht mehr.</p>
|
|
623
|
+
<p>Schalt aus, was hmgr nicht anfassen soll. Ein abgeschalteter Harness bleibt auf dem Rechner, hmgr pflegt seine Ziele nur nicht mehr. Darunter steht, wo hmgr das Homedir des Harness sucht; ein weiteres Homedir wird zu einem eigenen Ziel.</p>
|
|
561
624
|
<ul class="harnessliste" id="harnessliste" aria-labelledby="harnesstitel"></ul>
|
|
562
625
|
</section>
|
|
563
626
|
<section class="abschnitt">
|