hmgr 0.0.16 → 0.0.18

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.
@@ -325,7 +325,10 @@ export class GitQuellen {
325
325
  async refsNachziehen(quelle) {
326
326
  if (quelle.art === 'lokal')
327
327
  return;
328
- await this.git(['fetch', '--prune', '--tags', 'origin'], await this.basis(quelle));
328
+ // --force: mitlaufende Tags (z.B. cmux `nightly`) zeigen bei jedem Build auf einen neuen
329
+ // Commit; ohne --force verweigert git das Überschreiben ("would clobber existing tag") und
330
+ // bricht den ganzen Fetch ab (E87). Betrifft nur lokale Tag-Refs im bare-Basis-Clone.
331
+ await this.git(['fetch', '--prune', '--force', '--tags', 'origin'], await this.basis(quelle));
329
332
  }
330
333
  async standardRef(quelle) {
331
334
  if (quelle.art === 'lokal')
@@ -413,7 +416,8 @@ export class GitQuellen {
413
416
  const basis = await this.basis(checkout.quelle);
414
417
  const von = (await this.git(['rev-parse', 'HEAD'], checkout.pfad)).trim();
415
418
  try {
416
- await this.git(['fetch', '--prune', '--tags', 'origin'], basis);
419
+ // --force: siehe refsNachziehen (E87), mitlaufende Tags dürfen den Fetch nicht abbrechen.
420
+ await this.git(['fetch', '--prune', '--force', '--tags', 'origin'], basis);
417
421
  }
418
422
  catch (fehler) {
419
423
  return { ergebnis: 'fehlgeschlagen', fehler: fehler instanceof Error ? fehler.message : String(fehler) };
@@ -2271,6 +2271,16 @@
2271
2271
  }
2272
2272
  $('dsk-suche').addEventListener('input', filtereDskListe);
2273
2273
 
2274
+ /** Quelle · [Pfad ·] Ref für eine Skill-Karte im „Skills hinzufügen"-Dialog (F106): der Pfad
2275
+ unterscheidet Skills, die unter demselben Namen mehrfach im selben Repo liegen (z. B. je
2276
+ Harness ein eigener Ordner). Ein Wurzel-Skill hat pfad === '' und zeigt kein Pfad-Segment. */
2277
+ function skillQuelleBeschriftung(skill) {
2278
+ var teile = [skill.quelleName];
2279
+ if (skill.pfad) teile.push(skill.pfad);
2280
+ teile.push('Ref ' + skill.ref);
2281
+ return teile.join(' · ');
2282
+ }
2283
+
2274
2284
  function oeffneSkillsHinzufuegen(z) {
2275
2285
  skillsKontext = { modus: 'einzeln', z: z };
2276
2286
  $('dsk-ziel').textContent = zielTitel(z);
@@ -2295,7 +2305,7 @@
2295
2305
  // Dieselben Marken wie im Katalog (F13): hier fällt die Entscheidung, was installiert wird.
2296
2306
  var marken = skillMarkenBox(skill);
2297
2307
  if (marken) txt.appendChild(marken);
2298
- var quelleSpanEl = e('span', 'mono', skill.quelleName + ' · Ref ' + skill.ref);
2308
+ var quelleSpanEl = e('span', 'mono', skillQuelleBeschriftung(skill));
2299
2309
  quelleSpanEl.title = skill.quelleText;
2300
2310
  txt.appendChild(quelleSpanEl);
2301
2311
  if (schon) txt.appendChild(e('span', 'notiz', 'Hängt hier schon.'));
@@ -2337,7 +2347,7 @@
2337
2347
  // Dieselben Marken wie im Katalog (F13): hier fällt die Entscheidung, was installiert wird.
2338
2348
  var marken = skillMarkenBox(skill);
2339
2349
  if (marken) txt.appendChild(marken);
2340
- var quelleSpanEl = e('span', 'mono', skill.quelleName + ' · Ref ' + skill.ref);
2350
+ var quelleSpanEl = e('span', 'mono', skillQuelleBeschriftung(skill));
2341
2351
  quelleSpanEl.title = skill.quelleText;
2342
2352
  txt.appendChild(quelleSpanEl);
2343
2353
  if (ueberall) txt.appendChild(e('span', 'notiz', 'Hängt schon überall.'));
@@ -3489,7 +3499,12 @@
3489
3499
  liste.appendChild(e('li', 'leerhinweis', 'Noch keine Quelle. „Quelle hinzufügen …" legt die erste an.'));
3490
3500
  return;
3491
3501
  }
3492
- QUELLEN.forEach(function (q) {
3502
+ // Kopie statt QUELLEN direkt: baueQuellenfilter() und andere Stellen iterieren über QUELLEN in
3503
+ // Lieferreihenfolge, die soll unangetastet bleiben (F105).
3504
+ var quellenSortiert = QUELLEN.slice().sort(function (a, b) {
3505
+ return a.name.localeCompare(b.name, 'de', { sensitivity: 'base' });
3506
+ });
3507
+ quellenSortiert.forEach(function (q) {
3493
3508
  var li = document.createElement('li');
3494
3509
  li.appendChild(repoIcon(q));
3495
3510
  var beschriftung = e('b', null, q.name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmgr",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Harness Manager: Skills und Plugins für AI-Harnesses verwalten",
5
5
  "license": "MIT",
6
6
  "author": "Tim Kaufmann",