[TypeError: No se pueden leer propiedades de indefinido en formatDocsLink durante la instalación del Daemon] - TypeError: Cannot Read Properties of Undefined in formatDocsLink During Daemon Installation
El comando de incorporación install-daemon falla con un TypeError al iterar a través de las entradas del canal porque formatDocsLink no maneja parámetros de ruta indefinidos.
🔍 Síntomas
El proceso termina abruptamente durante el flujo de trabajo openclaw onboard --install-daemon cuando el usuario establece el canal. La aplicación no logra avanzar a los pasos de configuración posteriores.
Salida del error:
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)
Pasos de reproducción:
- Ejecutar
openclaw onboard --install-daemon - Configurar el modelo (por ejemplo, minimax)
- Proceder a establecer el canal
- Observar el fallo con TypeError
Entorno afectado:
- Sistema operativo: Windows 11
- Versión de OpenClaw: 2026.4.14
- Método de instalación: npm global installation
- Comando onboard:
openclaw onboard --install-daemon
🧠 Causa raíz
El fallo se origina a partir de una deficiencia en la codificación defensiva en la función formatDocsLink dentro de links-BlUEqVE8.js. La función asume que el parámetro path siempre está definido, pero existe una entrada de canal con un valor undefined en meta.docsPath.
Análisis de la cadena de llamadas:
- Punto de entrada:
onboard-channels-D--y_LfI.js:855— La funciónsetupChannelsinvocaresolveChannelSelectionNoteLinesque itera a través de todas las entradas de canal registradas. - Agregación:
registry-DE4nHTjg.js:111—resolveChannelSetupEntriesfusiona las entradas de canal de tres fuentes:- Canales incorporados
- Plugins instalados (por ejemplo, plugin de WeCom)
- Entradas de canal basadas en directorios
- Formateo:
resolveChannelSelectionNoteLinesllama aformatChannelSelectionLine(entry.meta, formatDocsLink)para cada entrada. - Punto del fallo:
links-BlUEqVE8.js:7—formatDocsLinkejecutapath.trim()dondepathesundefined.
Vulnerabilidad:
javascript // links-BlUEqVE8.js - ANTES (vulnerable) function formatDocsLink(path, label, opts) { const trimmed = path.trim(); // 💥 CRASH si path es undefined // … }
La función no protege contra valores null o undefined para el parámetro path. Las entradas de canal originadas desde el registro basado en directorios o manifests de plugins incompletos pueden carecer de la propiedad docsPath en su objeto de metadatos.
🛠️ Solución paso a paso
Opción 1: Parchear el archivo de distribución (Solución inmediata)
Localizar y editar el archivo de distribución. La ruta varía según el método de instalación:
Windows (npm global):
%AppData%\npm\node_modules\openclaw\dist\links-BlUEqVE8.jsmacOS/Linux (npm global):
$(npm root -g)/openclaw/dist/links-BlUEqVE8.jsParche aplicado en la línea 7:
// links-BlUEqVE8.js - DESPUÉS (parcheado)
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}`}`;
// ...
}
Opción 2: Identificar y parchear el canal de origen
Si el docsPath faltante proviene de un plugin de canal específico:
- Identificar canales con metadatos incompletos examinando
~/.openclaw/plugins/o directorios de plugins a nivel de proyecto. - Asegurar que cada entrada de canal defina
meta.docsPathen su manifest. - Volver a registrar el canal afectado.
Opción 3: Esperar el parche oficial
Monitorear el repositorio de GitHub de OpenClaw para la versión 2026.4.15 o posterior, que debería incluir esta verificación defensiva en el código base upstream.
🧪 Verificación
Paso 1: Verificar que existe el parche
Verificar que la protección nula está presente en formatDocsLink:
# Windows PowerShell
Select-String -Path "$env:AppData\npm\node_modules\openclaw\dist\links-BlUEqVE8.js" -Pattern "if \(path == null\)"
# Salida esperada: Línea que contiene "if (path == null) return label ?? "";"Paso 2: Volver a ejecutar el comando onboard
Ejecutar el flujo de trabajo completo de onboarding:
openclaw onboard --install-daemon
# Esperado: El flujo de trabajo se completa sin TypeError
# Proceder a través de: configuración del modelo → selección de canal → finalizaciónPaso 3: Verificar la instalación del daemon
Confirmar que el daemon está en ejecución:
# Windows
openclaw daemon status
# Esperado: "Daemon is running" o similar
# Verificar mediante servicio
Get-Service -Name OpenClaw* 2>$null
# Esperado: Estado RunningPaso 4: Verificar la configuración de canales
openclaw config get channels
# Esperado: Lista de canales configurados sin errores⚠️ Errores comunes
- Parchear el archivo incorrecto: Asegurarse de editar el
links-BlUEqVE8.jscorrecto en el directorionode_modulesactivo, no una copia en caché o de respaldo. - Instalación global vs local: Si OpenClaw está instalado tanto globalmente como localmente en un proyecto, la instalación local puede tener precedencia. Verificar con
npm list openclawpara determinar qué instalación está activa. - Permisos del directorio de plugins: En Windows, asegurar que el directorio de plugins sea escribible; de lo contrario, el registro de canales puede fallar silenciosamente, dejando entradas sin
docsPath. - Invalidación de caché: Después de parchear, limpiar cualquier artefacto de compilación en caché:
npm cache clean --force rm -rf node_modules/.cache 2>/dev/null - Las actualizaciones posteriores sobrescriben los parches: Ejecutar
npm update -g openclawsobrescribirá el parche manual. Fijar la versión o volver a aplicar el parche después de las actualizaciones. - Interferencia de Windows Defender: La protección en tiempo real puede bloquear temporalmente las ediciones a archivos en
AppData. Desactivar temporalmente o agregar una exclusión si las operaciones de escritura fallan. - Instalaciones con Yarn vs npm: Yarn puede almacenar paquetes en caché de manera diferente. Usar
yarn global dirpara localizar la ruta de instalación correcta si Yarn se usó para la instalación.
🔗 Errores relacionados
TypeError: Cannot read properties of undefined (reading 'startsWith')— Problema similar de codificación defensiva enformatDocsLinksipathestá definido pero no es una cadena (por ejemplo, objeto vacío).TypeError: Cannot read properties of null (reading 'trim')— Variante del mismo error cuandopathes explícitamentenullen lugar deundefined.Channel registration failed: docsPath is required— Error de validación descendente que ocurriría si el código upstream validara correctamente los metadatos del canal.openclaw onboardse bloquea indefinidamente en la selección de canal — Síntoma relacionado donde la iteración de canales encuentra una entrada sindocsPathpero el error se captura silenciosamente.Plugin manifest incomplete: missing required field 'docsPath'— Error de validación upstream para plugins que debería prevenir que ocurra este error.