Entorno y depuración
Pruebas
OpenClaw tiene tres suites de Vitest (unidad/integración, e2e, en vivo) y un pequeño conjunto de ejecutores Docker. Este documento es una guía de "cómo probamos":
- Qué cubre cada suite (y qué no cubre deliberadamente)
- Qué comandos ejecutar para flujos de trabajo comunes (local, pre-push, depuración)
- Cómo las pruebas en vivo descubren credenciales y seleccionan modelos/proveedores
- Cómo agregar regresiones para problemas reales de modelos/proveedores
Inicio rápido
La mayoría de los días:
- Puerta completa (esperada antes del push):
pnpm build && pnpm check && pnpm test
Cuando tocas pruebas o quieres confianza extra:
- Puerta de cobertura:
pnpm test:coverage - Suite E2E:
pnpm test:e2e
Cuando depuras proveedores/modelos reales (requiere credenciales reales):
- Suite en vivo (modelos + sondeos de herramienta/imagen del gateway):
pnpm test:live
Consejo: cuando solo necesitas un caso fallido, prefiere reducir las pruebas en vivo mediante las variables de entorno de lista permitida descritas a continuación.
Suites de pruebas (qué se ejecuta dónde)
Piensa en las suites como "realismo creciente" (y creciente fragilidad/costo):
Unidad / integración (predeterminada)
- Comando:
pnpm test - Configuración:
scripts/test-parallel.mjs(ejecutavitest.unit.config.ts,vitest.extensions.config.ts,vitest.gateway.config.ts) - Archivos:
src/**/*.test.ts,extensions/**/*.test.ts - Alcance:
- Pruebas unitarias puras
- Pruebas de integración en proceso (autenticación del gateway, enrutamiento, herramientas, análisis, configuración)
- Regresiones deterministas para errores conocidos
- Expectativas:
- Se ejecuta en CI
- No se requieren claves reales
- Debe ser rápida y estable
- Nota sobre el pool:
- OpenClaw usa
vmForksde Vitest en Node 22/23 para fragmentos unitarios más rápidos. - En Node 24+, OpenClaw vuelve automáticamente a
forksregular para evitar errores de enlace de VM de Node (ERR_VM_MODULE_LINK_FAILURE/module is already linked). - Anula manualmente con
OPENCLAW_TEST_VM_FORKS=0(forzarforks) oOPENCLAW_TEST_VM_FORKS=1(forzarvmForks).
- OpenClaw usa
E2E (prueba de humo del gateway)
- Comando:
pnpm test:e2e - Configuración:
vitest.e2e.config.ts - Archivos:
src/**/*.e2e.test.ts - Valores predeterminados de tiempo de ejecución:
- Usa
vmForksde Vitest para un inicio de archivo más rápido. - Usa trabajadores adaptativos (CI: 2-4, local: 4-8).
- Se ejecuta en modo silencioso por defecto para reducir la sobrecarga de E/S de la consola.
- Usa
- Anulaciones útiles:
OPENCLAW_E2E_WORKERS=para forzar el número de trabajadores (limitado a 16).OPENCLAW_E2E_VERBOSE=1para volver a habilitar la salida detallada de la consola.
- Alcance:
- Comportamiento de extremo a extremo del gateway multi-instancia
- Superficies WebSocket/HTTP, emparejamiento de nodos y redes más pesadas
- Expectativas:
- Se ejecuta en CI (cuando está habilitado en el pipeline)
- No se requieren claves reales
- Más partes móviles que las pruebas unitarias (puede ser más lento)
En vivo (proveedores reales + modelos reales)
- Comando:
pnpm test:live - Configuración:
vitest.live.config.ts - Archivos:
src/**/*.live.test.ts - Predeterminado: habilitado por
pnpm test:live(estableceOPENCLAW_LIVE_TEST=1) - Alcance:
- "¿Funciona realmente este proveedor/modelo hoy con credenciales reales?"
- Detectar cambios de formato del proveedor, peculiaridades de llamadas a herramientas, problemas de autenticación y comportamiento de límites de tasa
- Expectativas:
- No es estable en CI por diseño (redes reales, políticas reales de proveedores, cuotas, interrupciones)
- Cuesta dinero / usa límites de tasa
- Prefiere ejecutar subconjuntos reducidos en lugar de "todo"
- Las ejecuciones en vivo obtendrán
~/.profilepara recoger claves API faltantes
- Rotación de claves API (específica del proveedor): establece
*_API_KEYScon formato de coma/punto y coma o*_API_KEY_1,*_API_KEY_2(por ejemploOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) o anulación por prueba en vivo medianteOPENCLAW_LIVE_*_KEY; las pruebas reintentan en respuestas de límite de tasa.
¿Qué suite debo ejecutar?
Usa esta tabla de decisión:
- Editando lógica/pruebas: ejecuta
pnpm test(ypnpm test:coveragesi cambiaste mucho) - Tocando redes del gateway / protocolo WS / emparejamiento: agrega
pnpm test:e2e - Depurando "mi bot está caído" / fallos específicos del proveedor / llamadas a herramientas: ejecuta un
pnpm test:livereducido
En vivo: barrido de capacidades del nodo Android
- Prueba:
src/gateway/android-node.capabilities.live.test.ts - Script:
pnpm android:test:integration - Objetivo: invocar cada comando actualmente anunciado por un nodo Android conectado y afirmar el comportamiento del contrato del comando.
- Alcance:
- Configuración precondicionada/manual (la suite no instala/ejecuta/empareja la aplicación).
- Validación de
node.invokedel gateway comando por comando para el nodo Android seleccionado.
- Preconfiguración requerida:
- Aplicación Android ya conectada + emparejada al gateway.
- Aplicación mantenida en primer plano.
- Permisos/consentimiento de captura otorgados para las capacidades que esperas que pasen.
- Anulaciones de destino opcionales:
OPENCLAW_ANDROID_NODE_IDoOPENCLAW_ANDROID_NODE_NAME.OPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORD.
- Detalles completos de configuración de Android: Aplicación Android
En vivo: prueba de humo de modelos (claves de perfil)
Las pruebas en vivo se dividen en dos capas para poder aislar fallos:
- "Modelo directo" nos dice si el proveedor/modelo puede responder al menos con la clave dada.
- "Prueba de humo del gateway" nos dice si el pipeline completo gateway+agente funciona para ese modelo (sesiones, historial, herramientas, política del sandbox, etc.).
Capa 1: Completado de modelo directo (sin gateway)
- Prueba:
src/agents/models.profiles.live.test.ts - Objetivo:
- Enumerar modelos descubiertos
- Usar
getApiKeyForModelpara seleccionar modelos para los que tienes credenciales - Ejecutar un pequeño completado por modelo (y regresiones específicas donde sea necesario)
- Cómo habilitar:
pnpm test:live(oOPENCLAW_LIVE_TEST=1si invocas Vitest directamente)
- Establece
OPENCLAW_LIVE_MODELS=modern(oall, alias para modern) para ejecutar realmente esta suite; de lo contrario, se omite para mantenerpnpm test:liveenfocado en la prueba de humo del gateway - Cómo seleccionar modelos:
OPENCLAW_LIVE_MODELS=modernpara ejecutar la lista permitida moderna (Opus/Sonnet/Haiku 4.5, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.5, Grok 4)OPENCLAW_LIVE_MODELS=alles un alias para la lista permitida moderna- o
OPENCLAW_LIVE_MODELS="openai/gpt-5.2,anthropic/claude-opus-4-6,..."(lista permitida separada por comas)
- Cómo seleccionar proveedores:
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(lista permitida separada por comas)
- De dónde vienen las claves:
- Por defecto: almacén de perfiles y respaldos de entorno
- Establece
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1para exigir solo el almacén de perfiles
- Por qué existe esto:
- Separa "la API del proveedor está rota / la clave es inválida" de "el pipeline del agente del gateway está roto"
- Contiene regresiones pequeñas y aisladas (ejemplo: reproducción de razonamiento de Respuestas OpenAI/Respuestas Codex + flujos de llamadas a herramientas)
Capa 2: Prueba de humo del Gateway + agente de desarrollo (lo que "@openclaw" realmente hace)
- Prueba:
src/gateway/gateway-models.profiles.live.test.ts - Objetivo:
- Iniciar un gateway en proceso
- Crear/parchear una sesión
agent:dev:*(anulación de modelo por ejecución) - Iterar modelos-con-claves y afirmar:
- respuesta "significativa" (sin herramientas)
- una invocación real de herramienta funciona (sonda de lectura)
- sondas de herramienta adicionales opcionales (sonda de ejecución+lectura)
- las rutas de regresión de OpenAI (solo llamada a herramienta → seguimiento) siguen funcionando
- Detalles de la sonda (para que puedas explicar fallos rápidamente):
- Sonda
read: la prueba escribe un archivo nonce en el espacio de trabajo y le pide al agente que loleay devuelva el nonce. - Sonda
exec+read: la prueba le pide al agente queejecute-escriba un nonce en un archivo temporal, luego lolea. - Sonda de imagen: la prueba adjunta un PNG generado (gato + código aleatorio) y espera que el modelo devuelva
cat <CÓDIGO>. - Referencia de implementación:
src/gateway/gateway-models.profiles.live.test.tsysrc/gateway/live-image-probe.ts.
- Sonda
- Cómo habilitar:
pnpm test:live(oOPENCLAW_LIVE_TEST=1si invocas Vitest directamente)
- Cómo seleccionar modelos:
- Predeterminado: lista permitida moderna (Opus/Sonnet/Haiku 4.5, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.5, Grok 4)
OPENCLAW_LIVE_GATEWAY_MODELS=alles un alias para la lista permitida moderna- O establece
OPENCLAW_LIVE_GATEWAY_MODELS="proveedor/modelo"(o lista separada por comas) para reducir
- Cómo seleccionar proveedores (evitar "todo OpenRouter"):
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(lista permitida separada por comas)
- Las sondas de herramienta e imagen están siempre activas en esta prueba en vivo:
- Sonda
read+ sondaexec+read(estrés de herramienta) - Sonda de imagen se ejecuta cuando el modelo anuncia soporte de entrada de imagen
- Flujo (alto nivel):
- La prueba genera un PNG pequeño con "CAT" + código aleatorio (
src/gateway/live-image-probe.ts) - Lo envía mediante
agentattachments: [{ mimeType: "image/png", content: "" }] - El gateway analiza los adjuntos en
images[](src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - El agente integrado reenvía un mensaje de usuario multimodal al modelo
- Afirmación: la respuesta contiene
cat+ el código (tolerancia OCR: se permiten errores menores)
- La prueba genera un PNG pequeño con "CAT" + código aleatorio (
- Sonda
Consejo: para ver qué puedes probar en tu máquina (y los ids exactos de proveedor/modelo), ejecuta:
openclaw models list
openclaw models list --json
En vivo: Prueba de humo del token de configuración de Anthropic
- Prueba:
src/agents/anthropic.setup-token.live.test.ts - Objetivo: verificar que el token de configuración de Claude Code CLI (o un perfil de token de configuración pegado) pueda completar un prompt de Anthropic.
- Habilitar:
pnpm test:live(oOPENCLAW_LIVE_TEST=1si invocas Vitest directamente)OPENCLAW_LIVE_SETUP_TOKEN=1
- Fuentes del token (elige una):
- Perfil:
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE=anthropic:setup-token-test - Token crudo:
OPENCLAW_LIVE_SETUP_TOKEN_VALUE=sk-ant-oat01-...
- Perfil:
- Anulación de modelo (opcional):
OPENCLAW_LIVE_SETUP_TOKEN_MODEL=anthropic/claude-opus-4-6
Ejemplo de configuración:
openclaw models auth paste-token --provider anthropic --profile-id anthropic:setup-token-test
OPENCLAW_LIVE_SETUP_TOKEN=1 OPENCLAW_LIVE_SETUP_TOKEN_PROFILE=anthropic:setup-token-test pnpm test:live src/agents/anthropic.setup-token.live.test.ts
En vivo: Prueba de humo del backend CLI (Claude Code CLI u otros CLIs locales)
- Prueba:
src/gateway/gateway-cli-backend.live.test.ts - Objetivo: validar el pipeline Gateway + agente usando un backend CLI local, sin tocar tu configuración predeterminada.
- Habilitar:
pnpm test:live(oOPENCLAW_LIVE_TEST=1si invocas Vitest directamente)OPENCLAW_LIVE_CLI_BACKEND=1
- Valores predeterminados:
- Modelo:
claude-cli/claude-sonnet-4-6 - Comando:
claude - Argumentos:
["-p","--output-format","json","--permission-mode","bypassPermissions"]
- Modelo:
- Anulaciones (opcionales):
OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-opus-4-6"OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/claude"OPENCLAW_LIVE_CLI_BACKEND_ARGS='["-p","--output-format","json","--permission-mode","bypassPermissions"]'OPENCLAW_LIVE_CLI_BACKEND_CLEAR_ENV='["ANTHROPIC_API_KEY","ANTHROPIC_API_KEY_OLD"]'OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1para enviar un adjunto de imagen real (las rutas se inyectan en el prompt).OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"para pasar rutas de archivos de imagen como argumentos CLI en lugar de inyección en el prompt.OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(o"list") para controlar cómo se pasan los argumentos de imagen cuandoIMAGE_ARGestá establecido.OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1para enviar un segundo turno y validar el flujo de reanudación.
OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG=0para mantener habilitada la configuración MCP de Claude Code CLI (por defecto deshabilita la configuración MCP con un archivo vacío temporal).
Ejemplo:
OPENCLAW_LIVE_CLI_BACKEND=1 \
OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6" \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
Recetas en vivo recomendadas
Las listas permitidas explícitas y reducidas son las más rápidas y menos frágiles:
- Modelo único, directo (sin gateway):
OPENCLAW_LIVE_MODELS="openai/gpt-5.2" pnpm test:live src/agents/models.profiles.live.test.ts
- Modelo único, prueba de humo del gateway:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Llamadas a herramientas en varios proveedores:
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,zai/glm-4.7,minimax/minimax-m2.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Enfoque en Google (clave API de Gemini + Antigravity):
- Gemini (clave API):
OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts - Antigravity (OAuth):
OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Gemini (clave API):
Notas:
google/...usa la API de Gemini (clave API).google-antigravity/...usa el puente OAuth de Antigravity (endpoint de agente estilo Cloud Code Assist).google-gemini-cli/...usa el CLI de Gemini local en tu máquina (autenticación separada + peculiaridades de herramientas).- API de Gemini vs CLI de Gemini:
- API: OpenClaw llama a la API alojada de Gemini de Google sobre HTTP (autenticación por clave API / perfil); esto es a lo que la mayoría de los usuarios se refieren con "Gemini".
- CLI: OpenClaw ejecuta un binario
geminilocal; tiene su propia autenticación y puede comportarse de manera diferente (soporte de streaming/herramientas/desfase de versión).
En vivo: matriz de modelos (lo que cubrimos)
No hay una "lista de modelos de CI" fija (en vivo es opcional), pero estos son los modelos recomendados para cubrir regularmente en una máquina de desarrollo con claves.