April 23, 2026 • Versión: 2026.4.14

[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:

  1. Ejecutar openclaw onboard --install-daemon
  2. Configurar el modelo (por ejemplo, minimax)
  3. Proceder a establecer el canal
  4. 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:

  1. Punto de entrada: onboard-channels-D--y_LfI.js:855 — La función setupChannels invoca resolveChannelSelectionNoteLines que itera a través de todas las entradas de canal registradas.
  2. Agregación: registry-DE4nHTjg.js:111resolveChannelSetupEntries fusiona las entradas de canal de tres fuentes:
    • Canales incorporados
    • Plugins instalados (por ejemplo, plugin de WeCom)
    • Entradas de canal basadas en directorios
  3. Formateo: resolveChannelSelectionNoteLines llama a formatChannelSelectionLine(entry.meta, formatDocsLink) para cada entrada.
  4. Punto del fallo: links-BlUEqVE8.js:7formatDocsLink ejecuta path.trim() donde path es undefined.

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.js

macOS/Linux (npm global):

$(npm root -g)/openclaw/dist/links-BlUEqVE8.js

Parche 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:

  1. Identificar canales con metadatos incompletos examinando ~/.openclaw/plugins/ o directorios de plugins a nivel de proyecto.
  2. Asegurar que cada entrada de canal defina meta.docsPath en su manifest.
  3. 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ón

Paso 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 Running

Paso 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.js correcto en el directorio node_modules activo, 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 openclaw para 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 openclaw sobrescribirá 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 dir para 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 en formatDocsLink si path está definido pero no es una cadena (por ejemplo, objeto vacío).
  • TypeError: Cannot read properties of null (reading 'trim') — Variante del mismo error cuando path es explícitamente null en lugar de undefined.
  • 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 onboard se bloquea indefinidamente en la selección de canal — Síntoma relacionado donde la iteración de canales encuentra una entrada sin docsPath pero 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.

Evidencia y fuentes

Esta guía de solución de problemas fue sintetizada automáticamente por la tubería de inteligencia de FixClaw a partir de las discusiones de la comunidad.