hmgr 0.0.12 → 0.0.14

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.
@@ -42,20 +42,27 @@ export async function npmVersion(paket, optionen = {}) {
42
42
  clearTimeout(wecker);
43
43
  }
44
44
  }
45
- /** Die eine Zeile, die GUI-Sidebar und `hmgr update` gleichlautend zeigen. */
46
- export function cliHinweisText(installiert, neu) {
47
- return `hmgr-CLI ${installiert} — npm hat ${neu}: ${NPM_BEFEHL}`;
48
- }
49
45
  /**
50
- * Fragt die Registry und gibt die fertige Meldung zurück — oder null, wenn nichts zu melden ist:
51
- * Registry unerreichbar, gleiche Version, oder die installierte ist die neuere (ein Selbstbau aus
52
- * dem Clone liegt regelmäßig vor npm).
46
+ * Die eine Zeile, die GUI-Sidebar und `hmgr update` gleichlautend zeigen. `installiert === null`
47
+ * heißt: eine hmgr-CLI ist da, aber so alt (vor 0.0.7, E72), dass sie ihre Version nicht sagen
48
+ * kann — dieser Fall meldet sich auch ohne `neu` (Registry unerreichbar), denn die Warnung „veraltet"
49
+ * hängt nicht am Netz, nur der Vergleich mit npm tut das.
53
50
  */
51
+ export function cliHinweisText(installiert, neu) {
52
+ if (installiert !== null && neu !== null)
53
+ return `hmgr-CLI ${installiert} — npm hat ${neu}: ${NPM_BEFEHL}`;
54
+ if (neu !== null)
55
+ return `hmgr-CLI veraltet (vor 0.0.7, kennt --version nicht) — npm hat ${neu}: ${NPM_BEFEHL}`;
56
+ return `hmgr-CLI veraltet (vor 0.0.7, kennt --version nicht): ${NPM_BEFEHL}`;
57
+ }
54
58
  export async function cliUpdateHinweis(installiert, optionen = {}) {
55
59
  const neu = await npmVersion('hmgr', optionen);
60
+ if (installiert === null) {
61
+ // `text` für die CLI (eine Zeile), die Einzelteile für die GUI, die den Befehl hervorhebt. Der
62
+ // Befehl kommt mit, damit er nicht ein zweites Mal im Renderer steht.
63
+ return { installiert: null, neu, befehl: NPM_BEFEHL, text: cliHinweisText(null, neu) };
64
+ }
56
65
  if (neu === null || !versionIstNeuer(neu, installiert))
57
66
  return null;
58
- // `text` für die CLI (eine Zeile), die Einzelteile für die GUI, die den Befehl hervorhebt. Der
59
- // Befehl kommt mit, damit er nicht ein zweites Mal im Renderer steht.
60
67
  return { installiert, neu, befehl: NPM_BEFEHL, text: cliHinweisText(installiert, neu) };
61
68
  }
@@ -4,13 +4,13 @@
4
4
  import spawn from 'cross-spawn';
5
5
  import { versionLesen } from "../kern/version.js";
6
6
  /**
7
- * `hmgr --version` (E72: nur die Nummer, Exit 0). Null heißt „nichts zu melden": keine CLI im PATH,
8
- * Fehlercode, Timeout, oder eine Ausgabe, die keine Version ist. Kein Fehler dringt nach außen —
9
- * eine fehlende CLI ist der Normalfall bei einer reinen GUI-Installation, keine Störung.
7
+ * `hmgr --version` (E72: nur die Nummer, Exit 0). Kein Fehler dringt nach außen — der Aufrufer
8
+ * entscheidet anhand des Befunds, was zu melden ist.
10
9
  *
11
10
  * `spawn` von cross-spawn wie im claude-Adapter (E65/B7): unter Windows ist die npm-installierte
12
11
  * `hmgr` ein `.cmd`-Shim, das Node seit dem Fix zu CVE-2024-27980 ohne Umweg über cmd.exe nicht
13
- * mehr startet. stdin zu und ein Timeout, damit nichts hängen bleibt.
12
+ * mehr startet. stdin zu und ein Timeout, damit nichts hängen bleibt — ein Timeout liefert `fehlt`
13
+ * (cross-spawn beendet den Prozess dann mit `close` und `null`-Code samt Signal, kein `error`).
14
14
  */
15
15
  export function hmgrCliVersion() {
16
16
  return new Promise((aufloesen) => {
@@ -29,16 +29,19 @@ export function hmgrCliVersion() {
29
29
  });
30
30
  let stdout = '';
31
31
  kind.stdout.on('data', (stueck) => (stdout += stueck));
32
- kind.on('error', () => melden(null));
32
+ kind.on('error', () => melden({ art: 'fehlt' }));
33
33
  kind.on('close', (code) => {
34
+ if (code === null)
35
+ return melden({ art: 'fehlt' });
34
36
  if (code !== 0)
35
- return melden(null);
37
+ return melden({ art: 'ohne-version' });
36
38
  const text = stdout.trim().split('\n')[0]?.trim() ?? '';
37
- melden(versionLesen(text) === null ? null : text);
39
+ const version = versionLesen(text);
40
+ melden(version === null ? { art: 'ohne-version' } : { art: 'version', version: text });
38
41
  });
39
42
  }
40
43
  catch {
41
- melden(null);
44
+ melden({ art: 'fehlt' });
42
45
  }
43
46
  });
44
47
  }
package/dist/gui/main.js CHANGED
@@ -1182,24 +1182,40 @@ function selbstUpdateMelden(nachricht) {
1182
1182
  * nie installiert: ein `npm install -g` aus der App scheitert leicht an nvm-Pfaden und Rechten
1183
1183
  * (F82).
1184
1184
  *
1185
- * Still bei allem, was schiefgehen kann: keine CLI im PATH, Fehlercode, Registry unerreichbar,
1186
- * gleiche oder ältere Version auf npm. Der Login-PATH (F47) muss vorher stehen, sonst findet der
1187
- * Aufruf die per nvm installierte CLI nicht.
1185
+ * Still bei „fehlt": keine CLI im PATH, das ist der Normalfall bei einer reinen GUI-Installation.
1186
+ * Bei „version" wie bisher still bei Fehlercode, Registry unerreichbar, gleicher oder älterer
1187
+ * Version auf npm. Bei „ohne-version" (E82: CLI vor 0.0.7, kennt --version nicht) gibt es IMMER
1188
+ * eine Sidebar-Meldung — sie hängt nicht am Netz —, der Verlaufseintrag aber nur, wenn npm
1189
+ * erreichbar war und eine Version lieferte. Der Login-PATH (F47) muss vorher stehen, sonst findet
1190
+ * der Aufruf die per nvm installierte CLI nicht.
1188
1191
  */
1189
1192
  async function cliUpdatePruefen() {
1190
1193
  await pathBereit;
1191
- const installiert = await hmgrCliVersion();
1192
- if (installiert === null)
1194
+ const befund = await hmgrCliVersion();
1195
+ if (befund.art === 'fehlt')
1193
1196
  return;
1194
- const hinweis = await cliUpdateHinweis(installiert, { protokoll: (zeile) => console.log(zeile) });
1195
- if (hinweis === null)
1197
+ if (befund.art === 'version') {
1198
+ const hinweis = await cliUpdateHinweis(befund.version, { protokoll: (zeile) => console.log(zeile) });
1199
+ if (hinweis === null)
1200
+ return;
1201
+ // Verlaufseintrag „CLI X verfügbar" (E80), einmal je neuer Version, vor der Sidebar-Meldung.
1202
+ await anwendungsfaelle
1203
+ .hmgrEreignisVermerken({ art: 'cli-verfuegbar', version: hinweis.neu }, letzterAusloeser)
1204
+ .catch((fehler) => {
1205
+ console.log(`[verlauf] ${fehler instanceof Error ? fehler.message : String(fehler)}`);
1206
+ });
1207
+ selbstUpdateMelden({ art: 'cli', ...hinweis });
1196
1208
  return;
1197
- // Verlaufseintrag „CLI X verfügbar" (E80), einmal je neuer Version, vor der Sidebar-Meldung.
1198
- await anwendungsfaelle
1199
- .hmgrEreignisVermerken({ art: 'cli-verfuegbar', version: hinweis.neu }, letzterAusloeser)
1200
- .catch((fehler) => {
1201
- console.log(`[verlauf] ${fehler instanceof Error ? fehler.message : String(fehler)}`);
1202
- });
1209
+ }
1210
+ // befund.art === 'ohne-version'
1211
+ const hinweis = await cliUpdateHinweis(null, { protokoll: (zeile) => console.log(zeile) });
1212
+ if (hinweis.neu !== null) {
1213
+ await anwendungsfaelle
1214
+ .hmgrEreignisVermerken({ art: 'cli-verfuegbar', version: hinweis.neu }, letzterAusloeser)
1215
+ .catch((fehler) => {
1216
+ console.log(`[verlauf] ${fehler instanceof Error ? fehler.message : String(fehler)}`);
1217
+ });
1218
+ }
1203
1219
  selbstUpdateMelden({ art: 'cli', ...hinweis });
1204
1220
  }
1205
1221
  /**
@@ -52,7 +52,7 @@
52
52
  ansteht. Nur bei der GUI ein Knopf (E80): Neustart installiert das geladene Paket. -->
53
53
  <div class="selbstupdate" id="selbstupdate" role="status" hidden>
54
54
  <p id="selbstupdate-gui" hidden></p>
55
- <p id="selbstupdate-cli" hidden></p>
55
+ <p id="selbstupdate-cli" class="warnung" hidden></p>
56
56
  <button class="standknopf" type="button" id="selbstupdate-neustart" hidden>Jetzt neu starten</button>
57
57
  </div>
58
58
 
@@ -2500,7 +2500,9 @@
2500
2500
  Einstellungen-Knopf. Zwei getrennte Zeilen, weil beide zugleich zutreffen können: ein
2501
2501
  geladenes GUI-Paket und eine neuere CLI auf npm sind zwei Pakete und zwei Kanäle (Gitea bzw.
2502
2502
  npm). Nur die GUI-Zeile trägt seit E80 einen Knopf (Neustart installiert das geladene Paket),
2503
- die CLI installiert die GUI nicht selbst (F82). */
2503
+ die CLI installiert die GUI nicht selbst (F82). Die CLI-Zeile ist seit E82 eine Warnung, keine
2504
+ bloße Ansage: eine alte CLI (vor 0.0.7, kennt --version nicht) schreibt dieselben Dateien
2505
+ (state.json, verlauf.json) wie die neue GUI und kennt Bundles, Verlauf und WSL-Heime nicht. */
2504
2506
  function selbstUpdateZeigen(nachricht) {
2505
2507
  if (nachricht.art === 'gui') {
2506
2508
  $('selbstupdate-gui').textContent = 'hmgr ' + nachricht.version + ' bereit — wird beim Beenden installiert';
@@ -2509,7 +2511,17 @@
2509
2511
  } else if (nachricht.art === 'cli') {
2510
2512
  var p = $('selbstupdate-cli');
2511
2513
  p.textContent = '';
2512
- p.appendChild(document.createTextNode('hmgr-CLI ' + nachricht.installiert + ' — npm hat ' + nachricht.neu + ': '));
2514
+ if (nachricht.installiert !== null) {
2515
+ p.appendChild(e('strong', null, 'CLI veraltet.'));
2516
+ p.appendChild(document.createTextNode(' hmgr-CLI ' + nachricht.installiert + ', npm hat ' + nachricht.neu + '.'));
2517
+ } else if (nachricht.neu !== null) {
2518
+ p.appendChild(e('strong', null, 'CLI veraltet.'));
2519
+ p.appendChild(document.createTextNode(' Die installierte hmgr-CLI ist älter als 0.0.7, npm hat ' + nachricht.neu + '.'));
2520
+ } else {
2521
+ p.appendChild(e('strong', null, 'CLI veraltet.'));
2522
+ p.appendChild(document.createTextNode(' Die installierte hmgr-CLI ist älter als 0.0.7.'));
2523
+ }
2524
+ p.appendChild(document.createTextNode(' Beheben im Terminal: '));
2513
2525
  p.appendChild(e('code', null, nachricht.befehl));
2514
2526
  p.hidden = false;
2515
2527
  } else return;
@@ -181,6 +181,12 @@ a{color:var(--signal-tief)}
181
181
  .selbstupdate p{font-size:15px;line-height:1.45;color:var(--emaille-hell)}
182
182
  .selbstupdate code{font-family:var(--mono);font-size:14px;color:#F1F6EF;word-break:break-all}
183
183
 
184
+ /* E82: die CLI-Zeile ist eine Warnung, kein Hinweis — heller Kasten in Messing auf der dunklen
185
+ Leiste, damit sie sich vom Fließtext abhebt. */
186
+ .selbstupdate p.warnung{background:var(--messing-blass);color:var(--messing-satt);border-left:3px solid var(--messing);border-radius:2px;padding:6px 8px;margin:0}
187
+ .selbstupdate p.warnung strong{font-weight:600}
188
+ .selbstupdate p.warnung code{color:var(--messing-satt)}
189
+
184
190
  .selbstupdate:not([hidden]) + .einstellungen{margin-top:0}
185
191
  .einstellungen{
186
192
  margin-top:auto;padding:14px 6px 0;display:flex;align-items:center;gap:11px;width:100%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmgr",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Harness Manager: Skills und Plugins für AI-Harnesses verwalten",
5
5
  "license": "MIT",
6
6
  "author": "Tim Kaufmann",