hmgr 0.0.44 → 0.0.45

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.
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "fassung": 1,
3
3
  "versionen": {
4
+ "0.0.45": [
5
+ "MCP-Server und die Listen in den Einstellungen (Harnesses, zusätzliche Homedirs) erscheinen jetzt alphabetisch sortiert, ebenso in hmgr mcp list."
6
+ ],
4
7
  "0.0.44": [
5
8
  "Läuft gerade eine Aktualisierung, zeigt hmgr ein im Terminal hinzugefügtes Verzeichnis trotzdem sofort an, statt bis zum Ende der Aktualisierung zu warten."
6
9
  ],
package/dist/cli/main.js CHANGED
@@ -702,7 +702,10 @@ export async function ausfuehren(argv, umgebung, optionen = {}) {
702
702
  const uebersicht = await anwendungsfaelle.mcpUebersicht();
703
703
  if (uebersicht.katalog.length === 0)
704
704
  console.log('Kein MCP im Katalog. hmgr help mcp zeigt das Format von ~/.hmgr/mcp.yaml.');
705
- for (const { eintrag, eingehaengt, geteilteFundorte } of uebersicht.katalog) {
705
+ // E113: alphabetisch nach Name (Kopie, die Lieferreihenfolge der Daten bleibt).
706
+ const nachName = (a, b) => a.localeCompare(b, 'de', { sensitivity: 'base' });
707
+ const katalogSortiert = [...uebersicht.katalog].sort((a, b) => nachName(a.eintrag.name, b.eintrag.name));
708
+ for (const { eintrag, eingehaengt, geteilteFundorte } of katalogSortiert) {
706
709
  console.log(`${eintrag.name} ${eintrag.beschreibung}`);
707
710
  if (eingehaengt.length === 0 && geteilteFundorte.length === 0)
708
711
  console.log(' nirgends eingehängt');
@@ -714,9 +717,9 @@ export async function ausfuehren(argv, umgebung, optionen = {}) {
714
717
  }
715
718
  if (uebersicht.unbekannt.length > 0 || uebersicht.unbekannteGeteilteFundorte.length > 0) {
716
719
  console.log('Nicht im Katalog, aber eingehängt (hmgr fasst sie nicht an):');
717
- for (const { ziel, name } of uebersicht.unbekannt)
720
+ for (const { ziel, name } of [...uebersicht.unbekannt].sort((a, b) => nachName(a.name, b.name)))
718
721
  console.log(` ${name} ${ziel.harness} ${beschreibeOrt(ziel.ort)}`);
719
- for (const f of uebersicht.unbekannteGeteilteFundorte)
722
+ for (const f of [...uebersicht.unbekannteGeteilteFundorte].sort((a, b) => nachName(a.name, b.name)))
720
723
  console.log(` ${f.name} ${f.ziel.harness} ${beschreibeOrt(f.ziel.ort)} ${f.datei} · Scope ${f.scope}`);
721
724
  }
722
725
  return 0;
package/dist/gui/main.js CHANGED
@@ -962,6 +962,8 @@ function fensterOeffnen() {
962
962
  document.querySelector('[data-ansicht="mcp"]')?.click();
963
963
  var mcpKartenText = document.getElementById('mcpliste')?.textContent
964
964
  ?.replace(/\\s+/g, ' ').trim() ?? null;
965
+ var mcpKartenNamen = Array.from(document.querySelectorAll('#mcpliste .mcpkopf > b'))
966
+ .map((b) => b.textContent).join(',');
965
967
  var mcpHeimLinkVorhanden = document.querySelector('#mcpliste .mcpkopf .qlink') !== null;
966
968
  var mcpWarnzeileVorhanden = document.querySelector('#mcpliste .mcp .ruhezeile') !== null;
967
969
  // F46: die Orte-Liste je Karte und der Fremdkasten der Ansicht sind ganz weg, nicht nur
@@ -1273,6 +1275,7 @@ function fensterOeffnen() {
1273
1275
  skillOrdnerFehler,
1274
1276
  navReihenfolge,
1275
1277
  mcpKartenText,
1278
+ mcpKartenNamen,
1276
1279
  mcpHeimLinkVorhanden,
1277
1280
  mcpWarnzeileVorhanden,
1278
1281
  mcpOrteVorhanden,
@@ -3356,7 +3356,12 @@
3356
3356
  var w = $('mcpliste');
3357
3357
  w.textContent = '';
3358
3358
  if (MCP_KATALOG.length === 0) w.appendChild(mcpEinladung());
3359
- else MCP_KATALOG.forEach(function (k) { w.appendChild(mcpKarte(k)); });
3359
+ else {
3360
+ // E113: Kopie nach Name, MCP_KATALOG selbst bleibt in Lieferreihenfolge (F105).
3361
+ MCP_KATALOG.slice().sort(function (a, b) {
3362
+ return a.eintrag.name.localeCompare(b.eintrag.name, 'de', { sensitivity: 'base' });
3363
+ }).forEach(function (k) { w.appendChild(mcpKarte(k)); });
3364
+ }
3360
3365
  $('navzahlmcp').textContent = MCP_KATALOG.length;
3361
3366
  }
3362
3367
 
@@ -3388,6 +3393,12 @@
3388
3393
  // Die Plätze kommen aus dem Kern (F42, E16): die Fähigkeit hängt am Adapter, nicht am
3389
3394
  // Harness-Namen, hier wird nicht selbst entschieden, wer welche Ebene kennt.
3390
3395
  var plaetze = await rufe(function () { return window.hmgr.mcpPlaetze(); });
3396
+ // E113: nach angezeigtem Titel (Harness · Ort), bei Gleichstand nach der Dateispur. Die Kopie
3397
+ // ist zugleich die Auswahlliste, damit der Radio-Index zur sortierten Reihenfolge passt.
3398
+ plaetze = plaetze.slice().sort(function (a, b) {
3399
+ return zielTitel({ ziel: a }).localeCompare(zielTitel({ ziel: b }), 'de', { sensitivity: 'base' })
3400
+ || mcpOrtSpur(a).localeCompare(mcpOrtSpur(b), 'de', { sensitivity: 'base' });
3401
+ });
3391
3402
  mcpPlaetzeAuswahl = plaetze;
3392
3403
  plaetze.forEach(function (ziel, i) {
3393
3404
  var schon = k.eingehaengt.some(function (z) { return zielKey(z) === zielKey(ziel); });
@@ -3522,7 +3533,13 @@
3522
3533
  box.appendChild(e('p', 'ohne', 'Noch kein Server im Katalog. hmgr liest ihn aus '
3523
3534
  + pfadSchreibweise('~/.hmgr/mcp.yaml') + ' und schreibt die Datei nie.'));
3524
3535
  }
3525
- MCP_KATALOG.forEach(function (k, i) {
3536
+ // E113: nach Name sortiert. Der Wert der Checkbox bleibt der Index in MCP_KATALOG (Lieferreihenfolge),
3537
+ // den die Auswertung beim Absenden dort nachschlägt.
3538
+ MCP_KATALOG.map(function (k, i) { return { k: k, i: i }; }).sort(function (a, b) {
3539
+ return a.k.eintrag.name.localeCompare(b.k.eintrag.name, 'de', { sensitivity: 'base' });
3540
+ }).forEach(function (p) {
3541
+ var k = p.k;
3542
+ var i = p.i;
3526
3543
  var schon = k.eingehaengt.some(function (z) { return zielKey(z) === zielKey(ziel); });
3527
3544
  var label = e('label', 'wahlzeile');
3528
3545
  var input = document.createElement('input');
@@ -3648,7 +3665,12 @@
3648
3665
  var eintrag = null;
3649
3666
  HARNESS_HEIME.forEach(function (x) { if (x.harness === h) eintrag = x; });
3650
3667
  if (!eintrag) return kasten;
3651
- eintrag.heime.forEach(function (heim) {
3668
+ // E113: das primäre Homedir (ohne Adresse) bleibt oben, die zusätzlichen folgen nach Adresse sortiert.
3669
+ var heimeSortiert = eintrag.heime.filter(function (x) { return !x.adresse; }).concat(
3670
+ eintrag.heime.filter(function (x) { return !!x.adresse; }).sort(function (a, b) {
3671
+ return a.adresse.localeCompare(b.adresse, 'de', { sensitivity: 'base' });
3672
+ }));
3673
+ heimeSortiert.forEach(function (heim) {
3652
3674
  var zeile = e('div', 'heimzeile');
3653
3675
  zeile.appendChild(e('span', 'heimart', heim.adresse ? heim.adresse : 'Homedir'));
3654
3676
  var pfad = e('code', 'heimpfad', pfadKurz(heim.pfad));
@@ -3768,7 +3790,10 @@
3768
3790
  var vorher = document.activeElement;
3769
3791
  var merk = vorher && vorher.dataset && ul.contains(vorher) ? vorher.dataset.harness : null;
3770
3792
  ul.textContent = '';
3771
- HARNESSE_ALLE.forEach(function (h) {
3793
+ // E113: Kopie nach Anzeigename, HARNESSE_ALLE bleibt in Lieferreihenfolge (F105).
3794
+ HARNESSE_ALLE.slice().sort(function (a, b) {
3795
+ return harnessName(a).localeCompare(harnessName(b), 'de', { sensitivity: 'base' });
3796
+ }).forEach(function (h) {
3772
3797
  var li = document.createElement('li');
3773
3798
  var label = e('label', 'harnessschalter');
3774
3799
  var input = document.createElement('input');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmgr",
3
- "version": "0.0.44",
3
+ "version": "0.0.45",
4
4
  "description": "Harness Manager: Skills und Plugins für AI-Harnesses verwalten",
5
5
  "license": "MIT",
6
6
  "author": "Tim Kaufmann",