hmgr 0.0.55 → 0.0.56

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.
@@ -56,6 +56,7 @@ function texteLesen(wert, feld) {
56
56
  return e;
57
57
  });
58
58
  }
59
+ /** `null` für ein Plugin, das hmgr aus dieser Quelle nicht bedienen kann (fremde oder fehlende `source`). */
59
60
  function pluginLesen(roh, dateien) {
60
61
  if (typeof roh !== 'object' || roh === null || Array.isArray(roh))
61
62
  throw new MarketplaceUnbekannteForm('Ein Eintrag unter „plugins" ist kein Objekt');
@@ -64,10 +65,11 @@ function pluginLesen(roh, dateien) {
64
65
  if (typeof name !== 'string' || name.length === 0)
65
66
  throw new MarketplaceUnbekannteForm('Ein Plugin hat keinen Namen');
66
67
  const quelle = eintrag['source'];
67
- // Die Doku kennt nur eine Pfadangabe. Fremde Quellen ({ source: "github", … }) und ein
68
- // fehlendes Feld lehnt hmgr ab, statt einen Ordner zu raten.
68
+ // Die Doku kennt als Pfad nur einen Text. Fremde Quellen ({ source: "npm" | "github" | "url", … })
69
+ // und ein fehlendes Feld kann hmgr aus dieser Quelle nicht bedienen. Es lässt genau diesen Eintrag
70
+ // weg, statt die ganze Datei zu verwerfen und damit alle übrigen Plugins mitzunehmen.
69
71
  if (typeof quelle !== 'string')
70
- throw new MarketplaceUnbekannteForm(`Plugin „${name}": „source" ist kein Pfad in dieser Quelle`);
72
+ return null;
71
73
  const wurzel = normalisieren(quelle);
72
74
  // Mit „skills" gilt genau diese Liste, sonst der Ordner <source>/skills (HARNESS-FAKTEN:
73
75
  // mehrere Plugins teilen sich so einen gemeinsamen skills-Ordner).
@@ -95,5 +97,5 @@ export function marketplaceLesen(text, dateien) {
95
97
  const plugins = wurzel['plugins'];
96
98
  if (!Array.isArray(plugins))
97
99
  throw new MarketplaceUnbekannteForm('kein „plugins" als Liste');
98
- return { name, plugins: plugins.map((p) => pluginLesen(p, dateien)) };
100
+ return { name, plugins: plugins.map((p) => pluginLesen(p, dateien)).filter((p) => p !== null) };
99
101
  }
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "fassung": 1,
3
3
  "versionen": {
4
+ "0.0.56": [
5
+ "Eine Quelle, deren Plugin als npm-Paket oder aus einem fremden Repo kommt, lässt die Oberfläche nicht mehr leer. hmgr überspringt solche Plugins und zeigt alles andere wie gewohnt."
6
+ ],
4
7
  "0.0.55": [
5
8
  "Auch die Dialoge „Verlinken“ und „MCP hinzufügen“ haben jetzt ein Suchfeld. Du kannst über mehrere Suchen hinweg ankreuzen, unten steht, wie viele Einträge ausgewählt sind."
6
9
  ],
@@ -920,7 +920,8 @@ export class Anwendungsfaelle {
920
920
  const zustand = await this.p.zustand.lesen();
921
921
  const ergebnis = [];
922
922
  for (const quelle of zustand.quellen) {
923
- const gelesen = await this.marketplaceLesen(quelle);
923
+ // Eine unlesbare marketplace.json einer Quelle darf nicht die ganze Liste kippen (E124).
924
+ const gelesen = await this.marketplaceLesen(quelle).catch(() => null);
924
925
  if (gelesen === null)
925
926
  continue;
926
927
  ergebnis.push({ quelle, name: gelesen.name, plugins: gelesen.plugins });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmgr",
3
- "version": "0.0.55",
3
+ "version": "0.0.56",
4
4
  "description": "Harness Manager: Skills und Plugins für AI-Harnesses verwalten",
5
5
  "license": "MIT",
6
6
  "author": "Tim Kaufmann",