hmgr 0.0.50 → 0.0.51
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/aenderungen.json +3 -0
- package/dist/cli/hilfe.js +8 -1
- package/dist/cli/main.js +4 -2
- package/dist/kern/anwendungsfaelle.js +25 -1
- package/package.json +1 -1
package/dist/aenderungen.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"fassung": 1,
|
|
3
3
|
"versionen": {
|
|
4
|
+
"0.0.51": [
|
|
5
|
+
"Ein gelöschter Projektordner, an dem noch ein Bundle hing, wird beim Aktualisieren nicht mehr neu angelegt. `hmgr doctor` findet solche Ordner jetzt und bietet an, sie samt ihren Bundles zu vergessen."
|
|
6
|
+
],
|
|
4
7
|
"0.0.50": [
|
|
5
8
|
"Die Suche in hmgr findet jetzt auch Ordner und Skills mit Umlauten, etwa „döring“. Unter macOS legt hmgr denselben Ordner nicht mehr doppelt an, wenn er einmal aus dem Finder und einmal getippt hinzugefügt wird."
|
|
6
9
|
],
|
package/dist/cli/hilfe.js
CHANGED
|
@@ -315,6 +315,11 @@ Liegt am Ziel schon derselbe Skill aus derselben Quelle als hmgr-Link, wird er a
|
|
|
315
315
|
übernommen: aus Bestand wird ein Bundle, ohne erst Links von Hand zu entfernen. Alles andere unter
|
|
316
316
|
demselben Namen ist ein Konflikt und wird genannt.
|
|
317
317
|
|
|
318
|
+
Ein Bundle in einem Arbeitsverzeichnis, das es nicht mehr gibt, legen update und sync nicht wieder
|
|
319
|
+
an: update übergeht es still, sync --ort meldet es als fehlgeschlagen. hmgr doctor bietet an, das
|
|
320
|
+
Arbeitsverzeichnis samt seinen Bundle-Installationen zu vergessen. bundle add legt ein fehlendes
|
|
321
|
+
Verzeichnis weiterhin an, bundle remove trägt kein Arbeitsverzeichnis ein.
|
|
322
|
+
|
|
318
323
|
hmgr unlink <skill> auf ein einzelnes Mitglied nimmt es aus dem Bundle heraus: nur dieser Link
|
|
319
324
|
verschwindet, das Bundle bleibt im Ziel und merkt sich den Skill als herausgenommen. sync und
|
|
320
325
|
update legen ihn nicht wieder an, neue Mitglieder der Definition ergänzen sie weiter. Zurück kommt
|
|
@@ -617,7 +622,9 @@ Prüft, ob jedes gemerkte Arbeitsverzeichnis (hmgr dir add) noch auf der Platte
|
|
|
617
622
|
umbenanntes oder woanders neu geklontes Projekt hinterlässt sonst für immer einen toten Pfad im
|
|
618
623
|
Zustand, den nur hmgr dir forget von Hand entfernt. Bei einem Fund fragt doctor wie hmgr update
|
|
619
624
|
einmal für alle Funde, ob sie vergessen werden sollen; ohne Bestätigung bleiben sie gemeldet, aber
|
|
620
|
-
gemerkt.
|
|
625
|
+
gemerkt. Geprüft werden auch Arbeitsverzeichnisse, an denen nur Bundles oder Bindungen hängen
|
|
626
|
+
(E119); vergessen nimmt dann auch deren Bundle-Installationen aus dem Zustand. Anders als update
|
|
627
|
+
holt doctor nichts aus dem Netz.
|
|
621
628
|
|
|
622
629
|
Dazu prüft doctor Dateien, die eine Quelle mit SOPS verschlüsselt (.gitattributes mit
|
|
623
630
|
filter=sops_dotenv, sops_yaml oder sops_generic) und die noch verschlüsselt im Checkout liegen,
|
package/dist/cli/main.js
CHANGED
|
@@ -483,7 +483,9 @@ export async function ausfuehren(argv, umgebung, optionen = {}) {
|
|
|
483
483
|
'hmgr status zeigt die verlinkten Skills, hmgr source add <url|pfad> die Skills einer Quelle.');
|
|
484
484
|
const ziel = { harness: werte.get('harness') ?? 'claude-code', ort: ortLesen(werte.get('ort'), ports.umgebung.plattform()) };
|
|
485
485
|
const lokal = flaggen.has('local') || flaggen.has('lokal');
|
|
486
|
-
|
|
486
|
+
// E119: unlink trägt ein Verzeichnis, das es nicht mehr gibt, nicht neu ein.
|
|
487
|
+
if (ziel.ort.art === 'arbeitsverzeichnis' &&
|
|
488
|
+
(kommando === 'link' || (await ports.zeiger.verzeichnisExistiert(ziel.ort.pfad)))) {
|
|
487
489
|
// Verzeichnis merken und binden, damit status es wiederfindet und der Zeiger bekannt ist (E21).
|
|
488
490
|
const composer = werte.get('composer');
|
|
489
491
|
const verz = composer === undefined
|
|
@@ -657,7 +659,7 @@ export async function ausfuehren(argv, umgebung, optionen = {}) {
|
|
|
657
659
|
if (name === undefined && unterkommando !== 'sync')
|
|
658
660
|
throw new Error(`bundle ${unterkommando} braucht einen Bundle-Namen. hmgr bundle list zeigt die Bundles der bekannten Quellen.`);
|
|
659
661
|
const ziel = { harness: werte.get('harness') ?? 'claude-code', ort: ortLesen(werte.get('ort'), ports.umgebung.plattform()) };
|
|
660
|
-
if (ziel.ort.art === 'arbeitsverzeichnis') {
|
|
662
|
+
if (unterkommando !== 'remove' && ziel.ort.art === 'arbeitsverzeichnis') {
|
|
661
663
|
// Wie bei link: Verzeichnis merken und binden, damit status es wiederfindet (E21).
|
|
662
664
|
const composer = werte.get('composer');
|
|
663
665
|
const verz = composer === undefined
|
|
@@ -1279,6 +1279,21 @@ export class Anwendungsfaelle {
|
|
|
1279
1279
|
for (const installation of installationen) {
|
|
1280
1280
|
const ziel = Anwendungsfaelle.installationZiel(installation);
|
|
1281
1281
|
const kopf = { ziel, bundle: installation.bundle, quelle: installation.quelle };
|
|
1282
|
+
// E119: Ein Arbeitsverzeichnis, das es nicht mehr gibt, legt der Abgleich nicht neu an. Ohne
|
|
1283
|
+
// genanntes Ziel übergeht er es still (die Meldung übernimmt doctor), mit Ziel ist es ein Fehlschlag.
|
|
1284
|
+
if (ziel.ort.art === 'arbeitsverzeichnis' && !(await this.p.zeiger.verzeichnisExistiert(ziel.ort.pfad))) {
|
|
1285
|
+
if (args?.ziel === undefined)
|
|
1286
|
+
continue;
|
|
1287
|
+
ergebnis.push({
|
|
1288
|
+
...kopf,
|
|
1289
|
+
ergebnis: 'fehlgeschlagen',
|
|
1290
|
+
gelegt: [],
|
|
1291
|
+
entfernt: [],
|
|
1292
|
+
neueQuellen: [],
|
|
1293
|
+
fehler: `Das Arbeitsverzeichnis ${ziel.ort.pfad} gibt es nicht mehr. hmgr doctor bietet an, es zu vergessen.`,
|
|
1294
|
+
});
|
|
1295
|
+
continue;
|
|
1296
|
+
}
|
|
1282
1297
|
try {
|
|
1283
1298
|
const harness = await this.harnessGeprueft(ziel.harness);
|
|
1284
1299
|
// Die Definition liegt in der Quelle: ohne Nachziehen bliebe eine Änderung unsichtbar,
|
|
@@ -1383,6 +1398,7 @@ export class Anwendungsfaelle {
|
|
|
1383
1398
|
const zustand = await this.p.zustand.lesen();
|
|
1384
1399
|
zustand.arbeitsverzeichnisse = zustand.arbeitsverzeichnisse.filter((p) => p !== verzeichnis);
|
|
1385
1400
|
zustand.bindungen = zustand.bindungen.filter((b) => !(b.ziel.ort.art === 'arbeitsverzeichnis' && b.ziel.ort.pfad === verzeichnis));
|
|
1401
|
+
zustand.bundleInstallationen = zustand.bundleInstallationen.filter((i) => !(i.ort.art === 'arbeitsverzeichnis' && i.ort.pfad === verzeichnis));
|
|
1386
1402
|
await this.p.zustand.schreiben(zustand);
|
|
1387
1403
|
}
|
|
1388
1404
|
/**
|
|
@@ -1406,7 +1422,15 @@ export class Anwendungsfaelle {
|
|
|
1406
1422
|
async doctorPruefen(rueckfragen) {
|
|
1407
1423
|
const zustand = await this.p.zustand.lesen();
|
|
1408
1424
|
const fehlend = [];
|
|
1409
|
-
|
|
1425
|
+
// E119: auch Pfade, an denen nur Bindungen oder Bundle-Installationen hängen.
|
|
1426
|
+
const pfade = new Set(zustand.arbeitsverzeichnisse);
|
|
1427
|
+
for (const b of zustand.bindungen)
|
|
1428
|
+
if (b.ziel.ort.art === 'arbeitsverzeichnis')
|
|
1429
|
+
pfade.add(b.ziel.ort.pfad);
|
|
1430
|
+
for (const i of zustand.bundleInstallationen)
|
|
1431
|
+
if (i.ort.art === 'arbeitsverzeichnis')
|
|
1432
|
+
pfade.add(i.ort.pfad);
|
|
1433
|
+
for (const pfad of pfade)
|
|
1410
1434
|
if (!(await this.p.zeiger.verzeichnisExistiert(pfad)))
|
|
1411
1435
|
fehlend.push(pfad);
|
|
1412
1436
|
let vergessen = [];
|