TypeError: Eigenschaften von undefined können nicht gelesen werden in formatDocsLink während der Daemon-Installation - TypeError: Cannot Read Properties of Undefined in formatDocsLink During Daemon Installation
Der Onboarding-Befehl 'install-daemon' stürzt mit einem TypeError ab, während er durch Kanal-Einträge iteriert, da formatDocsLink keine undefinierten Pfadparameter verarbeitet.
🔍 Symptome
Der Prozess wird während des openclaw onboard --install-daemon-Workflows abrupt beendet, wenn der Benutzer den Kanal einstellt. Die Anwendung kann nicht zu den nachfolgenden Konfigurationsschritten fortfahren.
Fehlerausgabe:
TypeError: Cannot read properties of undefined (reading 'trim')
at formatDocsLink (links-BlUEqVE8.js:7)
at resolveChannelSelectionNoteLines (registry-DE4nHTjg.js:111)
at setupChannels (onboard-channels-D--y_LfI.js:855)
Reproduktionsschritte:
- Führen Sie
openclaw onboard --install-daemonaus - Konfigurieren Sie das Modell (z.B. minimax)
- Gehen Sie zur Einstellung des Kanals über
- Beobachten Sie den Absturz mit TypeError
Betroffene Umgebung:
- OS: Windows 11
- OpenClaw-Version: 2026.4.14
- Installationsmethode: npm globale Installation
- Onboard-Befehl:
openclaw onboard --install-daemon
🧠 Ursache
Der Absturz stammt aus einem Defizit in der defensiven Programmierung in der formatDocsLink-Funktion in links-BlUEqVE8.js. Die Funktion nimmt an, dass der path-Parameter immer definiert ist, aber ein Kanalentry existiert mit einem undefined-Wert für meta.docsPath.
Aufrufkettenanalyse:
- Einstiegspunkt:
onboard-channels-D--y_LfI.js:855— DiesetupChannels-Funktion ruftresolveChannelSelectionNoteLinesauf, die durch alle registrierten Kanalentries iteriert. - Aggregation:
registry-DE4nHTjg.js:111—resolveChannelSetupEntriesführt Kanalentries aus drei Quellen zusammen:- Integrierte Kanäle
- Installierte Plugins (z.B. WeCom-Plugin)
- Verzeichnisbasierte Kanalentries
- Formatierung:
resolveChannelSelectionNoteLinesruftformatChannelSelectionLine(entry.meta, formatDocsLink)für jeden Entry auf. - Absturzstelle:
links-BlUEqVE8.js:7—formatDocsLinkführtpath.trim()aus, wobeipathundefinedist.
Schwachstelle:
javascript // links-BlUEqVE8.js - VORHER (verwundbar) function formatDocsLink(path, label, opts) { const trimmed = path.trim(); // 💥 ABSTURZ wenn path undefined ist // … }
Die Funktion schützt nicht gegen null- oder undefined-Werte für den path-Parameter. Kanalentries, die aus verzeichnisbasierter Registrierung oder unvollständigen Plugin-Manifesten stammen, fehlt möglicherweise die docsPath-Eigenschaft in ihrem Metadatenobjekt.
🛠️ Schritt-für-Schritt-Lösung
Option 1: Patch der Verteilungsdatei (Sofortige Problemumgehung)
Suchen und bearbeiten Sie die Verteilungsdatei. Der Pfad variiert je nach Installationsmethode:
Windows (npm global):
%AppData%\npm\node_modules\openclaw\dist\links-BlUEqVE8.jsmacOS/Linux (npm global):
$(npm root -g)/openclaw/dist/links-BlUEqVE8.jsPatch angewendet in Zeile 7:
// links-BlUEqVE8.js - NACHHER (gepatcht)
function formatDocsLink(path, label, opts) {
+ if (path == null) return label ?? "";
const trimmed = path.trim();
const docsRoot = resolveDocsRoot();
const url = trimmed.startsWith("http") ? trimmed : `${docsRoot}${trimmed.startsWith("/") ? trimmed : `/${trimmed}`}`;
// ...
}
Option 2: Quellkanal identifizieren und patchen
Wenn das fehlende docsPath von einem bestimmten Kanal-Plugin stammt:
- Identifizieren Sie Kanäle mit unvollständigen Metadaten, indem Sie `~/.openclaw/plugins/` oder projektbezogene Plugin-Verzeichnisse untersuchen.
- Stellen Sie sicher, dass jeder Kanalentry `meta.docsPath` in seinem Manifest definiert.
- Registrieren Sie den betroffenen Kanal erneut.
Option 3: Auf offiziellen Patch warten
Überwachen Sie das OpenClaw GitHub-Repository auf Version 2026.4.15 oder höher, die diese defensive Prüfung im Upstream-Codebase enthalten sollte.
🧪 Verifizierung
Schritt 1: Überprüfen, dass der Patch vorhanden ist
Stellen Sie sicher, dass der Null-Schutz in formatDocsLink vorhanden ist:
# Windows PowerShell
Select-String -Path "$env:AppData\npm\node_modules\openclaw\dist\links-BlUEqVE8.js" -Pattern "if \(path == null\)"
# Erwartete Ausgabe: Zeile mit "if (path == null) return label ?? "";"Schritt 2: Onboard-Befehl erneut ausführen
Führen Sie den vollständigen Onboard-Workflow aus:
openclaw onboard --install-daemon
# Erwartet: Workflow wird ohne TypeError abgeschlossen
# Fortfahren durch: Modelleinrichtung → Kanalauswahl → AbschlussSchritt 3: Daemon-Installation verifizieren
Bestätigen Sie, dass der Daemon läuft:
# Windows
openclaw daemon status
# Erwartet: "Daemon is running" oder ähnlich
# Über Dienst prüfen
Get-Service -Name OpenClaw* 2>$null
# Erwartet: Running-StatusSchritt 4: Kanal-Konfiguration verifizieren
openclaw config get channels
# Erwartet: Liste der konfigurierten Kanäle ohne Fehler⚠️ Häufige Fehler
- Falsche Datei patchen: Stellen Sie sicher, dass Sie die richtige `links-BlUEqVE8.js` im aktiven `node_modules`-Verzeichnis bearbeiten, nicht eine zwischengespeicherte oder Sicherungskopie.
- Globale vs. lokale Installation: Wenn OpenClaw sowohl global als auch lokal in einem Projekt installiert ist, kann die lokale Installation Vorrang haben. Überprüfen Sie mit
npm list openclaw, welche Installation aktiv ist. - Plugin-Verzeichnisberechtigungen: Unter Windows stellen Sie sicher, dass das Plugin-Verzeichnis beschreibbar ist; andernfalls kann die Kanalregistrierung lautlos fehlschlagen und Entries ohne `docsPath` hinterlassen.
- Cache-Invalidierung: Löschen Sie nach dem Patchen alle zwischengespeicherten Build-Artefakte:
npm cache clean --force rm -rf node_modules/.cache 2>/dev/null - Nachfolgende Updates überschreiben Patches: Das Ausführen von
npm update -g openclawüberschreibt den manuellen Patch. Pinnen Sie die Version oder wenden Sie den Patch nach Updates erneut an. - Windows Defender-Interferenz: Echtzeitschutz kann Bearbeitungen an Dateien in `AppData` vorübergehend blockieren. Deaktivieren Sie vorübergehend oder fügen Sie eine Ausnahme hinzu, wenn Schreibvorgänge fehlschlagen.
- Yarn vs. npm-Installationen: Yarn speichert Pakete möglicherweise anders. Verwenden Sie
yarn global dir, um den korrekten Installationspfad zu finden, wenn Yarn für die Installation verwendet wurde.
🔗 Zugehörige Fehler
TypeError: Cannot read properties of undefined (reading 'startsWith')— Ähnliches Problem mit defensiver Programmierung in `formatDocsLink`, wenn `path` definiert, aber kein String ist (z.B. leeres Objekt).TypeError: Cannot read properties of null (reading 'trim')— Variante desselben Fehlers, wenn `path` explizit `null` statt `undefined` ist.Channel registration failed: docsPath is required— Nachgelagerter Validierungsfehler, der auftreten würde, wenn vorgelagerter Code Kanalmetadaten ordnungsgemäß validieren würde.openclaw onboardhängt unbegrenzt bei der Kanalauswahl — Verwandtes Symptom, wobei die Kanaliteration auf einen Entry ohne `docsPath` stößt, der Fehler jedoch lautlos abgefangen wird.Plugin manifest incomplete: missing required field 'docsPath'— Validierungsfehler im vorgelagerten Bereich für Plugins, die diesen Fehler verhindern sollten.