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
|
@@ -154,16 +154,34 @@ a{color:var(--signal-tief)}
|
|
|
154
154
|
.stand{margin:22px 4px 0;padding:14px 6px 0;border-top:1px solid rgba(255,255,255,.16);display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center}
|
|
155
155
|
.stand p{flex:1 1 130px;font-size:16px;line-height:1.4;color:var(--emaille-hell)}
|
|
156
156
|
.stand p b{font-weight:600;color:#F1F6EF}
|
|
157
|
-
/* Ruhig, solange nichts ansteht; erst „mit Neuem" (.neu) macht ihn zum Signal. Der Knopf
|
|
158
|
-
|
|
157
|
+
/* Ruhig, solange nichts ansteht; erst „mit Neuem" (.neu) macht ihn zum Signal. Der Knopf öffnet
|
|
158
|
+
nur die Ansicht (E80), deshalb nie disabled. Schmaler als vorher: er trägt jetzt nur noch „›". */
|
|
159
159
|
.standknopf{
|
|
160
160
|
background:transparent;border:1px solid rgba(255,255,255,.3);color:var(--emaille-hell);border-radius:3px;
|
|
161
|
-
padding:6px 13px;cursor:pointer;white-space:nowrap;
|
|
162
|
-
font-size:16px;letter-spacing:-.005em;
|
|
161
|
+
padding:6px 13px;min-width:34px;text-align:center;cursor:pointer;white-space:nowrap;
|
|
162
|
+
font-family:var(--schrift);font-weight:500;font-size:16px;letter-spacing:-.005em;
|
|
163
|
+
transition:background .14s ease,border-color .14s ease,color .14s ease;
|
|
163
164
|
}
|
|
164
165
|
.standknopf:hover{background:var(--emaille-hoch);color:#F1F6EF}
|
|
165
166
|
.standknopf.neu{border-color:var(--emaille-hell);background:var(--emaille-hoch);color:#F1F6EF;font-weight:600}
|
|
166
167
|
|
|
168
|
+
/* Update-Hinweis über hmgr selbst (E77), direkt über dem Einstellungen-Knopf. Dezent wie die
|
|
169
|
+
Stand-Zeile darüber: kleiner, in der hellen Emaille-Farbe, ohne Signalton — es ist eine Ansage,
|
|
170
|
+
keine Aufforderung. Der Befehl darin steht im Monospace und darf umbrechen, er ist lang.
|
|
171
|
+
Das `margin-top:auto` wandert zu ihm, solange er steht: sonst schöbe der Knopf ihn nach oben
|
|
172
|
+
von sich weg, statt dass beide zusammen unten sitzen. */
|
|
173
|
+
.selbstupdate{margin-top:auto;padding:14px 6px 0;display:flex;flex-direction:column;gap:6px}
|
|
174
|
+
/* Neustart-Knopf (E80): unter der GUI-Zeile, nicht über die volle Leistenbreite gestreckt (sonst
|
|
175
|
+
erbte er die Spaltenbreite der Flex-Column). Kein „.neu": er soll nicht wie der Standknopf-Signal
|
|
176
|
+
aussehen, er meldet nur eine Handlung, keinen Zustand. */
|
|
177
|
+
.selbstupdate .standknopf{align-self:flex-start;min-width:0}
|
|
178
|
+
/* Wie bei .zeile und .wahlzeile: die Klasse setzt display, also braucht hidden eine eigene Regel —
|
|
179
|
+
sonst stünde der leere Kasten samt seinem auto-Rand da, obwohl nichts zu melden ist. */
|
|
180
|
+
.selbstupdate[hidden]{display:none}
|
|
181
|
+
.selbstupdate p{font-size:15px;line-height:1.45;color:var(--emaille-hell)}
|
|
182
|
+
.selbstupdate code{font-family:var(--mono);font-size:14px;color:#F1F6EF;word-break:break-all}
|
|
183
|
+
|
|
184
|
+
.selbstupdate:not([hidden]) + .einstellungen{margin-top:0}
|
|
167
185
|
.einstellungen{
|
|
168
186
|
margin-top:auto;padding:14px 6px 0;display:flex;align-items:center;gap:11px;width:100%;
|
|
169
187
|
background:transparent;border:0;border-top:1px solid rgba(255,255,255,.16);cursor:pointer;text-align:left;
|
|
@@ -213,6 +231,9 @@ a{color:var(--signal-tief)}
|
|
|
213
231
|
.chip[aria-pressed="true"]{background:var(--tinte);border-color:var(--tinte);color:var(--blech)}
|
|
214
232
|
/* Harness-Zeichen im Chip (E53 Pkt. 1): kleiner als die Standardgröße, gap übernimmt den Abstand. */
|
|
215
233
|
.chip .hsymbol{width:15px;height:15px;margin-right:0}
|
|
234
|
+
/* Sortierrichtung im Chip (E81): nur der aktive Chip füllt den Pfeil, Farbe erbt über currentColor
|
|
235
|
+
(im gedrückten Chip also --blech), gap übernimmt den Abstand zum Text. */
|
|
236
|
+
.chip .sortpfeil:empty{display:none}
|
|
216
237
|
|
|
217
238
|
.katalogzahl{margin:0 0 12px;font-size:16px;color:var(--tinte-weich)}
|
|
218
239
|
.zeilen{display:flex;flex-direction:column;gap:8px;list-style:none;margin:0;padding:0}
|
|
@@ -298,6 +319,24 @@ a{color:var(--signal-tief)}
|
|
|
298
319
|
.knopf[disabled]:hover{background:var(--tinte);border-color:var(--tinte)}
|
|
299
320
|
.knopf.klein{padding:4px 13px}
|
|
300
321
|
|
|
322
|
+
/* Prüfen-Kringel in der Update-Ansicht (E80): rund statt der früheren großen Signal-Fläche, denn er
|
|
323
|
+
ist ein Anstoß, keine gefährliche Handlung. Dreht sich, solange der Lauf läuft (.laeuft). */
|
|
324
|
+
.kringel{
|
|
325
|
+
width:44px;height:44px;border-radius:50%;flex:none;
|
|
326
|
+
border:1.5px solid var(--tinte);background:var(--tinte);color:var(--blech);
|
|
327
|
+
font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;
|
|
328
|
+
cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease;
|
|
329
|
+
}
|
|
330
|
+
.kringel:hover{background:var(--emaille);border-color:var(--emaille)}
|
|
331
|
+
.kringel:disabled{opacity:.55;cursor:default}
|
|
332
|
+
.kringel.laeuft{animation:kringel-drehen 1s linear infinite}
|
|
333
|
+
@keyframes kringel-drehen{to{transform:rotate(360deg)}}
|
|
334
|
+
@media (prefers-reduced-motion:reduce){
|
|
335
|
+
/* Die globale Regel weiter unten kappt schon jede Animationsdauer; hier zusätzlich statisch
|
|
336
|
+
gedämpft statt gedreht, damit der laufende Zustand ohne Bewegung sichtbar bleibt. */
|
|
337
|
+
.kringel.laeuft{animation:none;opacity:.6}
|
|
338
|
+
}
|
|
339
|
+
|
|
301
340
|
.ziele{display:flex;flex-direction:column;gap:18px}
|
|
302
341
|
.ziel{background:var(--blech);border:1px solid var(--strich);border-radius:3px;overflow:hidden}
|
|
303
342
|
/* Kopfzeile als Akkordeon-Umschalter (E45): role="button", die ganze Zeile ist klickbar. */
|
|
@@ -309,7 +348,10 @@ a{color:var(--signal-tief)}
|
|
|
309
348
|
.zielkopf .zahl{margin-left:auto;font-family:var(--mono);font-size:16px;color:var(--emaille-zahl)}
|
|
310
349
|
/* Zeichen statt Text-Badge (E45-Nachschärfung): trägt die Farbe selbst als Emoji, nur Größe passend
|
|
311
350
|
zur Kopfzeile. Eigener Randabstand, damit es neben Titel und Pfad Luft behält. */
|
|
312
|
-
.warnung{font-size:19px;line-height:1;margin:0 4px}
|
|
351
|
+
.warnung{font-size:19px;line-height:1;margin:0 4px;display:inline-flex;align-items:center;gap:6px}
|
|
352
|
+
/* Warnzahl neben dem Dreieck (E75): dieselbe Optik wie die Skill-Zahl rechts im selben Kopf, damit
|
|
353
|
+
zwei Zahlen in einer Zeile nicht nach zwei Bauteilen aussehen. Das Dreieck davor trennt sie. */
|
|
354
|
+
.warnzahl{font-family:var(--mono);font-size:16px;color:var(--emaille-zahl)}
|
|
313
355
|
/* Pfeil-Indikator des Akkordeons: zeigt zu, dreht sich beim Aufklappen. */
|
|
314
356
|
.akkordeonpfeil{flex:none;width:15px;height:15px;stroke:var(--emaille-hell);fill:none;stroke-width:1.8;transition:transform .14s ease}
|
|
315
357
|
.zielkopf[aria-expanded="true"] .akkordeonpfeil{transform:rotate(180deg)}
|
|
@@ -336,9 +378,8 @@ a{color:var(--signal-tief)}
|
|
|
336
378
|
.ziel.verzeichnis .zielkoerper > .kartenchips + *{border-top:0;margin-top:0;padding-top:0}
|
|
337
379
|
.kartenchips .hsymbol{margin-right:6px}
|
|
338
380
|
/* Zielordner des gewählten Harness, wie ihn vorher der Abschnittskopf trug (25cddf6): rechts in der
|
|
339
|
-
Chip-Leiste
|
|
381
|
+
Chip-Leiste. */
|
|
340
382
|
.kartenchips .kartenordner{margin-left:auto;align-self:center;color:var(--tinte-weich);word-break:break-all}
|
|
341
|
-
.kartenchips .ruhend{align-self:center}
|
|
342
383
|
|
|
343
384
|
.hsymbol{flex:none;width:17px;height:17px;margin-right:8px;vertical-align:-.19em}
|
|
344
385
|
/* Das Hermes-Zeichen ist ein Bitmap-Favicon mit weißem Grund: leicht gerundet wie eine Tab-Kachel. */
|
|
@@ -533,6 +574,9 @@ dialog::backdrop{background:rgba(9,45,37,.62)}
|
|
|
533
574
|
entfallen ersatzlos, das Icon trägt jetzt die Unterscheidung. */
|
|
534
575
|
.quellenliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:15px}
|
|
535
576
|
.quellenliste li{display:grid;grid-template-columns:20px minmax(0,1fr) auto;gap:3px 10px;align-items:center}
|
|
577
|
+
/* Der Leertext ist keine Quellenzeile (E75): ohne diese Ausnahme fiele er als einziges Grid-Kind in
|
|
578
|
+
die 20px-Icon-Spalte und bräche Wort für Wort um. Erbt sonst die Optik der übrigen Leerhinweise. */
|
|
579
|
+
.quellenliste li.leerhinweis{display:block}
|
|
536
580
|
.quellenliste .repo{grid-column:1;grid-row:1}
|
|
537
581
|
/* Umbenennen und Entfernen sitzen zusammen in Spalte 3, sonst lägen sie als eigene Grid-Kinder
|
|
538
582
|
beide in derselben Zelle übereinander. Spalte und Zeile stehen ausdrücklich da, damit sie nicht
|
|
@@ -555,12 +599,16 @@ dialog::backdrop{background:rgba(9,45,37,.62)}
|
|
|
555
599
|
|
|
556
600
|
/* Harness-Schalter im Einstellungen-Dialog (entwurf/gui.html). */
|
|
557
601
|
.harnessliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
|
|
558
|
-
|
|
559
|
-
|
|
602
|
+
/* Die Box ist das Listenelement, nicht das Label: so liegen die Homedir-Zeilen (E78) mit in der
|
|
603
|
+
Box, ohne dass ein Klick auf ihre Knöpfe den Schalter umlegt. */
|
|
604
|
+
.harnessliste > li{
|
|
560
605
|
background:var(--blech);border:1px solid var(--strich-ui);border-radius:3px;padding:12px 15px;
|
|
561
606
|
transition:border-color .12s ease;
|
|
562
607
|
}
|
|
563
|
-
.
|
|
608
|
+
.harnessliste > li:hover{border-color:var(--tinte-weich)}
|
|
609
|
+
.harnessschalter{
|
|
610
|
+
display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:start;cursor:pointer;
|
|
611
|
+
}
|
|
564
612
|
.harnessschalter input{
|
|
565
613
|
appearance:none;-webkit-appearance:none;
|
|
566
614
|
margin:3px 0 0;flex:none;width:38px;height:22px;
|
|
@@ -576,12 +624,17 @@ dialog::backdrop{background:rgba(9,45,37,.62)}
|
|
|
576
624
|
.harnessschalter b{display:flex;align-items:center;font-family:var(--mono);font-weight:500;font-size:16px;color:var(--tinte);line-height:1.35;word-break:break-word}
|
|
577
625
|
.harnessschalter small{display:block;font-size:16px;color:var(--tinte-weich);line-height:1.4}
|
|
578
626
|
|
|
579
|
-
/*
|
|
580
|
-
.
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
}
|
|
584
|
-
|
|
627
|
+
/* Homedirs unter dem Schalter (E78), in derselben Box: je Zeile Art, Pfad und die Knöpfe dazu.
|
|
628
|
+
Eingerückt auf die Textspalte des Schalters (Schalterbreite plus Spaltenabstand). */
|
|
629
|
+
.heime{display:flex;flex-direction:column;gap:6px;margin:8px 0 0 52px}
|
|
630
|
+
.heime:empty{display:none}
|
|
631
|
+
.heimzeile{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
|
|
632
|
+
.heimart{flex:none;font-size:15px;color:var(--tinte-weich)}
|
|
633
|
+
.heimpfad{flex:1 1 200px;min-width:0;font-family:var(--mono);font-size:15px;color:var(--tinte);overflow-wrap:anywhere}
|
|
634
|
+
.heimknoepfe{flex:none;display:flex;flex-wrap:wrap;gap:6px}
|
|
635
|
+
.heime > .knopf{align-self:flex-start}
|
|
636
|
+
|
|
637
|
+
/* Hinweiskasten in ruhiger Messing-Optik, heute nur noch in der MCP-Ansicht (E61). */
|
|
585
638
|
.ruhezeile{
|
|
586
639
|
display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;
|
|
587
640
|
margin-bottom:14px;padding:11px 14px;
|
|
@@ -695,6 +748,26 @@ dialog::backdrop{background:rgba(9,45,37,.62)}
|
|
|
695
748
|
/* Wo ein Eintrag steht (E64): kein margin-left:auto, sonst teilte er sich den freien Platz mit dem
|
|
696
749
|
Übernehmen-Knopf und stünde in der Mitte statt beim Text. */
|
|
697
750
|
.mcpkartezeilen .geteiltvermerk{font-size:16px;color:var(--tinte-leise)}
|
|
751
|
+
/* Bundle-Gruppe an der Ziel-Karte (E69, F68): eine Einheit über ihren Skill-Zeilen, sichtbar
|
|
752
|
+
zusammengefasst durch eine linke Kante statt durch einen eigenen Kasten — die Zeilen darin sind
|
|
753
|
+
dieselbe Tabelle wie darunter und sollen mit ihr fluchten. */
|
|
754
|
+
.bundlegruppe{margin:14px 0;border-left:3px solid var(--emaille-tief);padding-left:12px}
|
|
755
|
+
.bundlekopf{display:flex;flex-wrap:wrap;align-items:center;gap:5px 14px;padding-bottom:8px}
|
|
756
|
+
.bundletitel{display:inline-flex;align-items:center;gap:8px}
|
|
757
|
+
.bundlename{font-family:var(--schrift);font-weight:700;font-size:17px;letter-spacing:-.012em}
|
|
758
|
+
.bundlequelle{font-size:16px;color:var(--tinte-weich)}
|
|
759
|
+
.bundlezahl{font-size:16px;color:var(--tinte-leise)}
|
|
760
|
+
.bundlemitglieder{font-family:var(--mono);font-size:16px;letter-spacing:-.012em;color:var(--tinte-weich)}
|
|
761
|
+
.bundlekopf .knopf{margin-left:auto}
|
|
762
|
+
.bundlegruppe .linkliste li:last-child{border-bottom:1px solid var(--strich-zart)}
|
|
763
|
+
|
|
764
|
+
/* Bundle- und Skill-Sektion im Dialog „Skills hinzufügen" (E69): zwei benannte Gruppen unter
|
|
765
|
+
demselben Suchfeld. */
|
|
766
|
+
.dskgruppe + .dskgruppe{margin-top:18px}
|
|
767
|
+
.dskgruppe > .etikett{display:block;margin-bottom:9px}
|
|
768
|
+
.dskgruppentext{margin:0 0 10px;color:var(--tinte-weich)}
|
|
769
|
+
.dskgruppenfehler{margin:10px 0 0;color:var(--messing-satt);white-space:pre-line}
|
|
770
|
+
|
|
698
771
|
/* Leerer Katalog: keine Aktion, sondern der Weg zur Datei. */
|
|
699
772
|
.startfeld.mcpstart{display:block}
|
|
700
773
|
.startfeld.mcpstart p{max-width:62ch}
|