diff --git a/BENUTZERHANDBUCH.md b/BENUTZERHANDBUCH.md
index f27c1a9..bfbf5ce 100644
--- a/BENUTZERHANDBUCH.md
+++ b/BENUTZERHANDBUCH.md
@@ -4,6 +4,22 @@ Dieses Handbuch richtet sich an Anwender, die Claude Live Dashboard installieren
und nutzen möchten. Wer die Anwendung selbst bauen oder am Quellcode arbeiten
möchte, findet die technische Dokumentation in der `README.md`.
+## Inhalt
+
+- [Was die Anwendung tut](#was-die-anwendung-tut)
+- [Voraussetzungen](#voraussetzungen)
+- [Installation](#installation)
+ - [Windows](#windows)
+ - [Linux (Ubuntu und verwandte Distributionen)](#linux-ubuntu-und-verwandte-distributionen)
+- [Erster Start](#erster-start)
+- [Die Oberfläche](#die-oberfläche)
+ - [Endpunkt-Status und Fehler-/Ereignis-Log](#endpunkt-status-und-fehler-ereignis-log)
+- [Einstellungen](#einstellungen)
+- [Tray-Menü](#tray-menü)
+- [Datenschutz und Sicherheit](#datenschutz-und-sicherheit)
+- [Deinstallation](#deinstallation)
+- [Häufige Fragen](#häufige-fragen)
+
## Was die Anwendung tut
Claude Live Dashboard ist ein kleines, immer sichtbares Fenster, das anzeigt,
@@ -18,12 +34,16 @@ zusätzlich denselben Server-Endpunkt ab, den auch der Befehl `/usage` in
Claude Code nutzt, um exakte statt geschätzter Werte anzuzeigen — dazu weiter
unten mehr unter „Datenschutz und Sicherheit“.
+[nach oben](#inhalt)
+
## Voraussetzungen
- Windows 10/11 oder Ubuntu (bzw. eine vergleichbare Linux-Distribution)
- Claude Code muss installiert sein und mindestens einmal benutzt worden sein
— ohne vorhandene Protokolldateien hat das Dashboard nichts anzuzeigen
+[nach oben](#inhalt)
+
## Installation
### Windows
@@ -56,6 +76,8 @@ Unter GNOME braucht das Tray-Symbol die Erweiterung **AppIndicator** — bei
Standard-Ubuntu ist sie bereits vorinstalliert. Fehlt sie, läuft die Anwendung
trotzdem, nur ohne sichtbares Symbol in der oberen Leiste.
+[nach oben](#inhalt)
+
## Erster Start
Nach dem Start erscheint das Fenster rechts oben auf dem Bildschirm und bleibt
@@ -66,6 +88,8 @@ Unter Windows liegt das Symbol zunächst häufig im Überlaufbereich hinter dem
Pfeil `^` — per Drag & Drop lässt es sich dauerhaft sichtbar an die Taskleiste
heften.
+[nach oben](#inhalt)
+
## Die Oberfläche
**Kopfzeile** — per Ziehen lässt sich das Fenster frei positionieren, die
@@ -110,6 +134,8 @@ einen Neustart hinweg erhalten und lässt sich über den Knopf **Log löschen**
jederzeit zurücksetzen. Bei einer Fehlermeldung im Programm ist ein Blick in
dieses Log meist der schnellste Weg herauszufinden, was los ist.
+[nach oben](#inhalt)
+
## Einstellungen
Das Zahnrad öffnet den Einstellungsdialog:
@@ -137,12 +163,16 @@ Das Zahnrad öffnet den Einstellungsdialog:
Updates suchen", siehe oben). `Strg`+`S` speichert, `Esc` schließt den
Dialog ohne zu speichern.
+[nach oben](#inhalt)
+
## Tray-Menü
Ein Rechtsklick (Linux) bzw. Klick (Windows) auf das Symbol im
Infobereich/der Systemleiste öffnet ein Menü mit: Dashboard anzeigen/ausblenden,
-Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Datenordner öffnen
-und Beenden.
+Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Info
+(Benutzerhandbuch/Disclaimer/Lizenz), Datenordner öffnen und Beenden.
+
+[nach oben](#inhalt)
## Datenschutz und Sicherheit
@@ -169,6 +199,8 @@ und Beenden.
Zugriffstoken und ohne weitere Daten. Abschaltbar in den Einstellungen.
- Es findet keine Übertragung an Dritte statt.
+[nach oben](#inhalt)
+
## Deinstallation
**Windows:** über *Einstellungen ▸ Apps* bzw. den mitinstallierten
@@ -179,6 +211,8 @@ erneut installieren.
**Linux:** `.deb`-Installation mit `sudo apt remove claude-live-dashboard`;
ein AppImage genügt zu löschen.
+[nach oben](#inhalt)
+
## Häufige Fragen
**Das Fenster zeigt keine Zahlen an.** Vermutlich wurde Claude Code auf diesem
@@ -210,3 +244,5 @@ oder Symbol öffnet die Release-Seite im Browser — heruntergeladen oder
installiert wird nichts automatisch. Das Symbol bleibt sichtbar, bis eine
neuere Version installiert wurde. Abschaltbar über die Einstellung „Nach
Updates suchen".
+
+[nach oben](#inhalt)
diff --git a/src/main/index.js b/src/main/index.js
index 27ed87d..0d685f4 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -272,6 +272,14 @@ function buildTrayMenu() {
},
{ type: 'separator' },
{ label: 'Einstellungen …', click: openSettings },
+ {
+ label: 'Info',
+ submenu: [
+ { label: 'Benutzerhandbuch', click: () => openInfoDoc('manual') },
+ { label: 'Disclaimer', click: () => openInfoDoc('disclaimer') },
+ { label: 'Lizenz', click: () => openInfoDoc('license') },
+ ],
+ },
{ label: 'Datenordner öffnen', click: () => shell.openPath(USER_DATA_DIR) },
{ type: 'separator' },
{ label: 'Beenden', click: () => app.quit() },
@@ -396,6 +404,39 @@ function escapeHtml(text) {
.replace(/>/g, '>');
}
+/** GitHub-ähnlicher Anker-Slug — reicht für die deutschen Überschriften hier
+ * (Umlaute bleiben erhalten, nur Satzzeichen fallen weg). */
+function slugify(text) {
+ return text
+ .toLowerCase()
+ .trim()
+ .replace(/[^\p{L}\p{N}\s-]/gu, '')
+ .replace(/\s+/g, '-')
+ .replace(/-+/g, '-');
+}
+
+/**
+ * Markdown→HTML mit `id`-Attributen auf jeder Überschrift, damit
+ * Sprunganker (z. B. aus einem Inhaltsverzeichnis) funktionieren — marked
+ * vergibt seit Version 5 selbst keine Heading-IDs mehr (früher `headerIds`,
+ * jetzt eine separate Erweiterung, die wir nicht zusätzlich einbinden).
+ * Ein frischer Renderer pro Aufruf hält die Dopplungs-Zählung dokumentweise
+ * sauber getrennt.
+ */
+function renderMarkdown(raw) {
+ const renderer = new marked.Renderer();
+ const seen = new Map();
+ renderer.heading = function ({ tokens, depth, text }) {
+ const inline = this.parser.parseInline(tokens);
+ let slug = slugify(text) || 'abschnitt';
+ const count = seen.get(slug) || 0;
+ seen.set(slug, count + 1);
+ if (count > 0) slug = `${slug}-${count}`;
+ return `
Datei konnte nicht gelesen werden: ${escapeHtml(err.message)}
`; } @@ -480,6 +521,11 @@ function openInfoDoc(kind) { // lassen (siehe handleInfoLink()) — sonst bleibt ein leeres, unschließbares // Fenster zurück. infoWin.webContents.on('will-navigate', (event, url) => { + // Reiner Sprunganker innerhalb desselben Dokuments (z. B. aus dem + // Inhaltsverzeichnis) — Standardverhalten (Scrollen zum Anker) zulassen, + // statt es wie eine echte Navigation zu behandeln. + const currentBase = infoWin.webContents.getURL().split('#')[0]; + if (url.split('#')[0] === currentBase) return; event.preventDefault(); handleInfoLink(url); });