[Error del comando /status de Discord mostrando discord/undefined sin actividad] - Discord Native /status Reports 'discord/undefined' and No Activity for Active Channel Sessions
El comando nativo /status de Discord muestra incorrectamente Modelo: discord/undefined, cero contexto y sin actividad incluso cuando hay una sesión de canal válida activa. La causa raíz es una falta de búsqueda de sessionEntry en la ruta del comando nativo.
🔍 Síntomas
Manifestaciones visibles para el usuario
Al ejecutar el comando nativo de Discord /status en un canal de guild con una sesión activa, se devuelve la siguiente salida incorrecta:
🦞 OpenClaw 2026.4.5 (3e72c03)
🧠 Model: discord/undefined · 🔑 unknown
📚 Context: 0/200k (0%) · 🧹 Compactions: 0
🧵 Session: agent:main:discord:slash:332887877048598528 • no activity
📌 Tasks: 0 active · 5 total · agent-local
⚙️ Runtime: direct · Think: off · elevated
🪢 Queue: collect (depth 0)En algunas observaciones, la clave de sesión muestra el ID de canal correcto pero los metadatos permanecen incorrectos:
🧵 Session: agent:main:discord:channel:1490775030236450876 • no activityContraste con el estado del camino de mensajes funcional
Cuando la sesión del mismo canal se consulta a través del camino normal de mensajes (agregando /status dentro de un mensaje regular), la salida es correcta:
🦞 OpenClaw 2026.4.5 (3e72c03)
🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (...)
📚 Context: 50k/272k (18%)
🧵 Session: agent:main:discord:channel:1490775030236450876 • updated just nowIndicadores clave de diagnóstico
- Campo Model muestra la cadena literal
discord/undefineden lugar del modelo configurado (ej.,openai-codex/gpt-5.4) - Campo Context muestra
0/...en lugar del porcentaje de uso real - Campo Session muestra el sufijo
no activityen lugar deupdated just now - Clave de sesión puede referenciar
discord/slash:...en lugar dediscord:channel:...con el ID de canal correcto
Condiciones del entorno
- Versión de OpenClaw:
2026.4.5(build3e72c03) - Método de instalación: npm global
- Sistema operativo: Linux 5.15.0-171-generic (x64)
- Modo Discord: Guild-channel con comandos nativos habilitados
- Modelo de agente predeterminado:
openai-codex/gpt-5.4
🧠 Causa raíz
Análisis arquitectónico
El error se origina en una resolución faltante de entrada de sesión en la tubería de enrutamiento de comandos nativos de Discord. El camino de código del comando nativo /status intenta leer routeState.sessionEntry para poblar los metadatos de estado, pero esta propiedad nunca es poblada por la función de resolución de ruta ascendente.
Desglose del flujo de código
1. Punto de entrada: Invocación de comando nativo
Cuando un usuario invoca /status como un comando nativo (slash) de Discord, la solicitud entra en:
provider-DR2mO1YM.js → commands.runtime-CVX5D6kT.js → pi-embedded-DWASRjxE.js → status-yaHSTeGo.js2. Fallo en la resolución de sesión
En provider-DR2mO1YM.js, la rama nativa /status referencia routeState.sessionEntry:
// Representación de pseudocódigo del camino de código problemático
const routeState = resolveDiscordNativeInteractionRouteState(interaction);
const sessionEntry = routeState.sessionEntry; // ← ESTO ES undefined
if (!sessionEntry) {
// Recurre a metadatos del payload slash
displayStatus(slashPayloadMetadata);
}3. Brecha en la resolución del estado de ruta
La función resolveDiscordNativeInteractionRouteState() retorna:
{
route: "...", // ✓ Proporcionado
effectiveRoute: "...", // ✓ Proporcionado
binding: {...}, // ✓ Proporcionado
sessionEntry: undefined // ✗ FALTANTE
}La función proporciona metadatos de enrutamiento (route, effectiveRoute, binding) pero nunca pobla sessionEntry, dejándola como undefined.
4. Construcción de contexto con valores predeterminados hardcodeados
Cuando sessionEntry es undefined, buildDiscordNativeCommandContext() se ejecuta con datos faltantes. Esta función:
- Hardcodea el proveedor como la cadena literal
"discord" - Falla al resolver el modelo configurado real desde la configuración del agente
- No puede buscar la sesión activa del canal desde el almacén de sesiones
5. Falla en cascada hacia la visualización del estado
El motor de renderizado de estado recibe:
{
provider: "discord",
model: undefined, // Resulta en "discord/undefined"
contextUsage: 0, // Resulta en "0/200k (0%)"
sessionKey: "discord/slash:..." // Tipo de sesión incorrecto
}Por qué el camino de mensajes funciona
La búsqueda de estado por camino de mensajes normal usa un camino de código diferente que:
- Resuelve el ID del canal desde el contexto del mensaje
- Consulta el almacén de sesiones directamente por
agent:main:discord:channel:{channelId} - Extrae el modelo real, uso de contexto y marca de tiempo de última actividad desde la entrada de sesión almacenada
Este camino evita la función rota resolveDiscordNativeInteractionRouteState() por completo.
Explicación de la discrepancia en la clave de sesión
La clave de sesión muestra discord/slash:{interactionId} en lugar de discord:channel:{channelId} porque:
- El camino alternativo usa el ID del comando de interacción como identificador de sesión
- Nunca resuelve la entrada de sesión del canal padre
- El camino correcto derivaría el ID del canal desde el contexto del canal de la interacción
🛠️ Solución paso a paso
Solución temporal (Inmediata)
Hasta que se implemente la corrección, usa la consulta de estado por camino de mensajes:
Antes (Roto - Comando nativo):
/status
Después (Funciona - Camino de mensajes):
cualquier contenido de mensaje /status
Esto fuerza el camino de enrutamiento de mensajes que resuelve correctamente la sesión del canal.
Corrección permanente (Para mantenedores)
La corrección requiere modificaciones a dos funciones en la tubería de comandos nativos de Discord:
Corrección 1: Poblar sessionEntry en la resolución de ruta
Archivo: provider-DR2mO1YM.js (o bundle equivalente)
Antes:
function resolveDiscordNativeInteractionRouteState(interaction) {
return {
route: determineRoute(interaction),
effectiveRoute: determineEffectiveRoute(interaction),
binding: resolveBinding(interaction)
// sessionEntry está faltante
};
}Después:
function resolveDiscordNativeInteractionRouteState(interaction) {
const channelId = interaction?.channel_id || interaction?.channelId;
const sessionKey = channelId
? `agent:main:discord:channel:${channelId}`
: null;
return {
route: determineRoute(interaction),
effectiveRoute: determineEffectiveRoute(interaction),
binding: resolveBinding(interaction),
sessionEntry: sessionKey ? sessionStore.get(sessionKey) : null
};
}Corrección 2: Manejar modelo faltante en el contexto de estado
Archivo: Función buildDiscordNativeCommandContext
Antes:
function buildDiscordNativeCommandContext(sessionEntry) {
return {
provider: "discord",
model: sessionEntry?.model || undefined,
// ...
};
}Después:
function buildDiscordNativeCommandContext(sessionEntry, routeState) {
// Si sessionEntry falta en routeState, intentar búsqueda directa
const resolvedSession = sessionEntry || (
routeState?.binding?.channelId
? sessionStore.get(`agent:main:discord:channel:${routeState.binding.channelId}`)
: null
);
return {
provider: resolvedSession?.provider || "discord",
model: resolvedSession?.model || getDefaultAgentModel(),
// ...
};
}Corrección 3: Derivar la clave de sesión correcta para la visualización de estado
Archivo: status-yaHSTeGo.js (renderizado de estado)
Antes:
function resolveStatusSessionKey(routeState) {
if (routeState.sessionEntry) {
return routeState.sessionEntry.key;
}
return `discord/slash:${interaction.id}`;
}Después:
function resolveStatusSessionKey(routeState) {
if (routeState.sessionEntry) {
return routeState.sessionEntry.key;
}
// Alternativa a clave basada en canal, no ID de interacción slash
const channelId = routeState.binding?.channelId;
return channelId
? `agent:main:discord:channel:${channelId}`
: `discord/slash:${interaction.id}`;
}🧪 Verificación
Caso de prueba 1: Estado de comando nativo en sesión de canal activa
Configuración:
- Asegurar que existe una sesión para un ID de canal conocido (ej.,
1490775030236450876) - Verificar que la sesión tiene uso de contexto no cero
Ejecución:
/statusSalida esperada:
🦞 OpenClaw 2026.4.5 (3e72c03)
🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (...)
📚 Context: 50k/272k (18%)
🧵 Session: agent:main:discord:channel:1490775030236450876 • updated just now
📌 Tasks: 0 active · 5 total · agent-local
⚙️ Runtime: direct · Think: off · elevated
🪢 Queue: collect (depth 0)Criterios de aprobación:
- El campo Model muestra
openai-codex/gpt-5.4(nodiscord/undefined) - El contexto muestra porcentaje no cero
- La clave de sesión referencía
discord:channel:{channelId} - La sesión muestra
updated just now(nono activity)
Caso de prueba 2: Comparación con estado de camino de mensajes
Ejecución:
¿Cuál es el estado actual? /statusVerificación: La salida del comando nativo y la salida del camino de mensajes deben mostrar idéntico:
- Nombre del modelo
- Porcentaje de contexto
- Clave de sesión
- Marca de tiempo de última actividad
Caso de prueba 3: Estado de nueva sesión (Sin sesión de canal activa)
Configuración:
Invocar /status en un canal sin sesión previa.
Salida esperada:
🧵 Session: agent:main:discord:channel:{channelId} • no activityCriterios de aprobación:
- La clave de sesión aún muestra
discord:channel:{channelId}(nodiscord/slash:...) - El campo Model debe mostrar el modelo predeterminado configurado (no
discord/undefined)
Caso de prueba 4: Comportamiento de canal Guild vs DM
Ejecución:
Probar /status tanto en canales de texto de guild como en canales DM.
Criterios de aprobación: Ambos tipos de canal deben mostrar comportamiento de resolución de sesión consistente con claves de sesión basadas en canal correctas.
Script de verificación automatizada
#!/bin/bash
# Verificar corrección de /status nativo de Discord
EXPECTED_MODEL="openai-codex/gpt-5.4"
CHANNEL_ID="1490775030236450876"
EXPECTED_SESSION_PREFIX="agent:main:discord:channel:${CHANNEL_ID}"
# Capturar salida de /status (requiere API de Discord o harness de prueba)
STATUS_OUTPUT=$(get_discord_status_output)
# Verificar campo Model
if echo "$STATUS_OUTPUT" | grep -q "Model: $EXPECTED_MODEL"; then
echo "✓ Campo Model correcto"
else
echo "✗ Campo Model incorrecto"
exit 1
fi
# Verificar formato de clave de sesión
if echo "$STATUS_OUTPUT" | grep -q "Session: $EXPECTED_SESSION_PREFIX"; then
echo "✓ Clave de sesión correcta"
else
echo "✗ Clave de sesión incorrecta"
exit 1
fi
# Verificar que indicador de no actividad NO esté presente
if echo "$STATUS_OUTPUT" | grep -q "• no activity"; then
echo "✗ Aún muestra 'no activity' para sesión activa"
exit 1
else
echo "✓ Estado de actividad correcto"
fi
echo "Todas las verificaciones pasaron"⚠️ Errores comunes
Trampas específicas del entorno
1. Canales DM vs Canales Guild
- Síntoma: La corrección funciona en canales guild pero las sesiones DM muestran
discord/undefined - Causa: Los canales DM pueden tener formatos de ID o estructuras de clave de sesión diferentes
- Mitigación: Asegurar que la derivación de clave de sesión maneje ambos prefijos
channelydm
2. Múltiples sesiones por canal
- Síntoma: El estado muestra datos del modelo incorrecto para configuraciones multi-agente
- Causa: El canal puede tener múltiples sesiones concurrentes con diferentes agentes
- Mitigación: La corrección debe respetar la dimensión
agenten las claves de sesión (ej.,agent:main:...)
3. Estado de ruta en caché
- Síntoma: La corrección parece funcionar pero revierte después de reiniciar el bot
- Causa: El estado de ruta antiguo puede estar en caché en memoria
- Mitigación: Limpiar la caché del almacén de sesiones o reiniciar completamente el proceso de OpenClaw
4. Conflicto entre comando nativo y comando de mensaje
- Síntoma: Ambos
/statusnativo y de camino de mensajes muestran datos incorrectos - Causa: La búsqueda en el almacén de sesiones puede estar fallando independientemente de la resolución de ruta
- Depuración: Verificar que el almacén de sesiones es accesible y contiene entradas para el canal objetivo
Configuraciones incorrectas del usuario
5. Configuración de agente faltante
- Síntoma: El modelo muestra
discord/undefinedincluso después de la corrección - Causa: No hay modelo de agente predeterminado configurado en
~/.openclaw/openclaw.json - Corrección: Asegurar que
agents.default.modelesté configurado:
{
"agents": {
"default": {
"model": "openai-codex/gpt-5.4"
}
}
}6. Comandos nativos de Discord no habilitados
- Síntoma: El comando nativo
/statusnunca ejecuta el camino de comando nativo - Causa: Comandos nativos deshabilitados en Discord Developer Portal o configuración de OpenClaw
- Corrección: Habilitar comandos nativos tanto en la configuración de la aplicación Discord como en la configuración de OpenClaw
7. URL del endpoint de interacción mal configurada
- Síntoma: Los comandos nativos devuelven errores genéricos o caen en los manejadores de mensajes
- Causa:
INTERACTIONS_ENDPOINT_URLincorrecta apuntando a despliegue incorrecto - Corrección: Verificar que la URL del endpoint coincide con la instancia de OpenClaw desplegada
Consideraciones específicas de versión
8. Discrepancia en hash de build
- Síntoma: La corrección referencia archivos con diferentes sufijos hash que la versión instalada
- Causa: La versión
2026.4.5puede tener múltiples builds - Verificación: Confirmar que el hash del build en la salida de estado coincide con el objetivo de la corrección esperada
🔗 Errores relacionados
Patrones de error lógicamente conectados
- Visualización de modelo
discord/undefined— Síntoma general de fallo en la resolución de entrada de sesión a través de cualquier camino de comando que dependa del estado de ruta - Estado de sesión
no activity— Indica que la búsqueda en el almacén de sesiones devolvió null o una entrada obsoleta - Indicador de clave API
unknown— Síntoma correlacionado cuando faltan metadatos de sesión de proveedor/información de clave - Divergencia entre comando slash y comando de mensaje — Relacionado con el enrutamiento inconsistente entre tipos de interacción de Discord
Contexto histórico
- Cambios en formato de clave de sesión (v2026.x) — Las versiones anteriores pueden haber usado estructuras de clave de sesión diferentes, causando fallos de búsqueda al mezclar versiones
- Limitaciones beta de comandos nativos — La funcionalidad de comandos nativos fue notada como beta; este error puede estar relacionado con implementación incompleta de vinculación de sesión
- Manejo de sesión de canal vs DM — Problemas anteriores con sesiones DM que no persisten correctamente pueden compartir patrones de causa raíz con este error
Issues relacionados de GitHub
- Metadatos de sesión faltantes para comandos nativos — Issue de seguimiento general para propagación de contexto de comando nativo
- Resolución de modelo del proveedor Discord — Fallos de resolución de modelo específico del proveedor a través de tipos de comando de Discord
- Gestión del ciclo de vida del estado de ruta — Problemas con el estado de ruta que no se mantiene correctamente a través de las fases de interacción
Comandos de diagnóstico para problemas relacionados
# Verificar contenido del almacén de sesiones
openclaw session list --filter discord
# Verificar resolución de ruta en modo debug
DEBUG=openclaw:route openclaw start
# Volcar entrada de sesión para canal objetivo
openclaw session dump agent:main:discord:channel:1490775030236450876