Testing

Test: suite dal vivo

Per l'avvio rapido, i runner QA, le suite unit/integration e i flussi Docker, vedi Testing. Questa pagina copre le suite di test live (che toccano la rete): matrice dei modelli, backend CLI, ACP e test live dei provider multimediali, oltre alla gestione delle credenziali.

Live: comandi smoke locali

Esporta la chiave del provider necessaria nell'ambiente del processo prima dei controlli live ad hoc.

Smoke sicuro dei media:

bash
pnpm openclaw infer tts convert --local --json \  --text "OpenClaw live smoke." \  --output /tmp/openclaw-live-smoke.mp3

Smoke sicuro di preparazione alle chiamate vocali:

bash
pnpm openclaw voicecall setup --jsonpnpm openclaw voicecall smoke --to "+15555550123"

voicecall smoke è un dry run a meno che non sia presente anche --yes. Usa --yes solo quando vuoi intenzionalmente effettuare una vera chiamata di notifica. Per Twilio, Telnyx e Plivo, un controllo di preparazione riuscito richiede un URL Webhook pubblico; i fallback local-only loopback/privati sono rifiutati per progettazione.

Live: sweep delle capacità del nodo Android

  • Test: src/gateway/android-node.capabilities.live.test.ts
  • Script: pnpm android:test:integration
  • Obiettivo: invocare ogni comando attualmente pubblicizzato da un nodo Android connesso e verificare il comportamento del contratto dei comandi.
  • Ambito:
    • Setup manuale/precondizionato (la suite non installa/esegue/abbina l'app).
    • Validazione node.invoke del Gateway comando per comando per il nodo Android selezionato.
  • Pre-setup richiesto:
    • App Android già connessa + abbinata al Gateway.
    • App mantenuta in primo piano.
    • Autorizzazioni/consenso alla cattura concessi per le capacità che ti aspetti superino il test.
  • Override opzionali del target:
    • OPENCLAW_ANDROID_NODE_ID o OPENCLAW_ANDROID_NODE_NAME.
    • OPENCLAW_ANDROID_GATEWAY_URL / OPENCLAW_ANDROID_GATEWAY_TOKEN / OPENCLAW_ANDROID_GATEWAY_PASSWORD.
  • Dettagli completi del setup Android: App Android

Live: smoke dei modelli (chiavi dei profili)

I test live sono divisi in due livelli, così possiamo isolare i guasti:

  • "Modello diretto" ci dice se il provider/modello può rispondere con la chiave indicata.
  • "Gateway smoke" ci dice se l'intera pipeline Gateway+agent funziona per quel modello (sessioni, cronologia, strumenti, policy sandbox, ecc.).

Livello 1: completamento diretto del modello (senza Gateway)

  • Test: src/agents/models.profiles.live.test.ts
  • Obiettivo:
    • Enumerare i modelli rilevati
    • Usare getApiKeyForModel per selezionare i modelli per cui hai credenziali
    • Eseguire un piccolo completamento per modello (e regressioni mirate dove necessario)
  • Come abilitarlo:
    • pnpm test:live (o OPENCLAW_LIVE_TEST=1 se invochi Vitest direttamente)
  • Imposta OPENCLAW_LIVE_MODELS=modern, small o all (alias di modern) per eseguire effettivamente questa suite; altrimenti viene saltata per mantenere pnpm test:live focalizzato sul Gateway smoke
  • Come selezionare i modelli:
    • OPENCLAW_LIVE_MODELS=modern per eseguire l'allowlist moderna (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 5.1, MiniMax M3, Grok 4.3)
    • OPENCLAW_LIVE_MODELS=small per eseguire l'allowlist vincolata dei modelli piccoli (route Qwen 8B/9B compatibili localmente, Ollama Gemma, OpenRouter Qwen/GLM e Z.AI GLM)
    • OPENCLAW_LIVE_MODELS=all è un alias dell'allowlist moderna
    • oppure OPENCLAW_LIVE_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,..." (allowlist separata da virgole)
    • Le esecuzioni locali Ollama per modelli piccoli usano come default http://127.0.0.1:11434; imposta OPENCLAW_LIVE_OLLAMA_BASE_URL solo per endpoint LAN, personalizzati o Ollama Cloud.
    • Gli sweep modern/all e small usano come default i rispettivi limiti curati; imposta OPENCLAW_LIVE_MAX_MODELS=0 per uno sweep esaustivo dei profili selezionati o un numero positivo per un limite più piccolo.
    • Gli sweep esaustivi usano OPENCLAW_LIVE_TEST_TIMEOUT_MS per il timeout dell'intero test diretto del modello. Default: 60 minuti.
    • Le probe dirette del modello vengono eseguite con parallelismo a 20 vie per impostazione predefinita; imposta OPENCLAW_LIVE_MODEL_CONCURRENCY per sovrascriverlo.
  • Come selezionare i provider:
    • OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli" (allowlist separata da virgole)
  • Da dove arrivano le chiavi:
    • Per impostazione predefinita: archivio profili e fallback env
    • Imposta OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 per imporre solo archivio profili
  • Perché esiste:
    • Separa "l'API del provider è rotta / la chiave non è valida" da "la pipeline agent del Gateway è rotta"
    • Contiene regressioni piccole e isolate (esempio: replay del ragionamento OpenAI Responses/Codex Responses + flussi tool-call)

Livello 2: Gateway + smoke dell'agent dev (quello che "@openclaw" fa davvero)

  • Test: src/gateway/gateway-models.profiles.live.test.ts
  • Obiettivo:
    • Avviare un Gateway in-process
    • Creare/applicare patch a una sessione agent:dev:* (override del modello per esecuzione)
    • Iterare sui modelli con chiavi e verificare:
      • risposta "significativa" (senza strumenti)
      • una vera invocazione di strumento funziona (probe di lettura)
      • probe di strumenti extra opzionali (probe exec+read)
      • i percorsi di regressione OpenAI (solo tool-call → follow-up) continuano a funzionare
  • Dettagli delle probe (così puoi spiegare rapidamente i guasti):
    • probe read: il test scrive un file nonce nell'area di lavoro e chiede all'agent di leggerlo con read e ripetere il nonce.
    • probe exec+read: il test chiede all'agent di scrivere con exec un nonce in un file temporaneo, quindi rileggerlo con read.
    • probe immagine: il test allega un PNG generato (gatto + codice casuale) e si aspetta che il modello restituisca cat <CODE>.
    • Riferimento implementativo: src/gateway/gateway-models.profiles.live.test.ts e test/helpers/live-image-probe.ts.
  • Come abilitarlo:
    • pnpm test:live (o OPENCLAW_LIVE_TEST=1 se invochi Vitest direttamente)
  • Come selezionare i modelli:
    • Default: allowlist moderna (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M3, Grok 4.3)
    • OPENCLAW_LIVE_GATEWAY_MODELS=small per eseguire la stessa allowlist vincolata dei modelli piccoli attraverso l'intera pipeline Gateway+agent
    • OPENCLAW_LIVE_GATEWAY_MODELS=all è un alias dell'allowlist moderna
    • Oppure imposta OPENCLAW_LIVE_GATEWAY_MODELS="provider/model" (o lista separata da virgole) per restringere
    • Gli sweep Gateway modern/all e small usano come default i rispettivi limiti curati; imposta OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0 per uno sweep esaustivo selezionato o un numero positivo per un limite più piccolo.
  • Come selezionare i provider (evita "tutto OpenRouter"):
    • OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax" (allowlist separata da virgole)
  • Le probe strumenti + immagini sono sempre attive in questo test live:
    • probe read + probe exec+read (stress degli strumenti)
    • la probe immagine viene eseguita quando il modello pubblicizza il supporto all'input immagine
    • Flusso (ad alto livello):
      • Il test genera un piccolo PNG con "CAT" + codice casuale (test/helpers/live-image-probe.ts)
      • Lo invia tramite agent attachments: [{ mimeType: "image/png", content: "<base64>" }]
      • Il Gateway analizza gli allegati in images[] (src/gateway/server-methods/agent.ts + src/gateway/chat-attachments.ts)
      • L'agent incorporato inoltra al modello un messaggio utente multimodale
      • Asserzione: la risposta contiene cat + il codice (tolleranza OCR: errori minori consentiti)

Live: smoke backend CLI (Claude, Gemini o altre CLI locali)

  • Test: src/gateway/gateway-cli-backend.live.test.ts
  • Obiettivo: validare la pipeline Gateway + agent usando un backend CLI locale, senza toccare la tua config predefinita.
  • I default smoke specifici del backend vivono con la definizione cli-backend.ts dell'estensione proprietaria.
  • Abilita:
    • pnpm test:live (o OPENCLAW_LIVE_TEST=1 se invochi Vitest direttamente)
    • OPENCLAW_LIVE_CLI_BACKEND=1
  • Default:
    • Provider/modello predefinito: claude-cli/claude-sonnet-4-6
    • Comportamento comando/argomenti/immagine proviene dai metadati del Plugin backend CLI proprietario.
  • Override (opzionali):
    • OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6"
    • OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/claude"
    • OPENCLAW_LIVE_CLI_BACKEND_ARGS='["-p","--output-format","json"]'
    • OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1 per inviare un vero allegato immagine (i percorsi vengono iniettati nel prompt). Le ricette Docker lo disattivano per impostazione predefinita salvo richiesta esplicita.
    • OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image" per passare i percorsi dei file immagine come argomenti CLI invece dell'iniezione nel prompt.
    • OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat" (o "list") per controllare come vengono passati gli argomenti immagine quando IMAGE_ARG è impostato.
    • OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1 per inviare un secondo turno e validare il flusso di ripresa.
    • OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1 per aderire alla probe di continuità nella stessa sessione Claude Sonnet -> Opus quando il modello selezionato supporta un target di switch. Le ricette Docker lo disattivano per impostazione predefinita per affidabilità aggregata.
    • OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1 per aderire alla probe MCP/strumento local loopback. Le ricette Docker lo disattivano per impostazione predefinita salvo richiesta esplicita.

Esempio:

bash
  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

Smoke economico della config Gemini MCP:

bash
OPENCLAW_LIVE_TEST=1 \  pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts

Questo non chiede a Gemini di generare una risposta. Scrive le stesse impostazioni di sistema che OpenClaw fornisce a Gemini, quindi esegue gemini --debug mcp list per provare che un server salvato transport: "streamable-http" venga normalizzato nella forma HTTP MCP di Gemini e possa connettersi a un server MCP streamable-HTTP locale.

Ricetta Docker:

bash
pnpm test:docker:live-cli-backend

Ricette Docker per singolo provider:

bash
pnpm test:docker:live-cli-backend:claudepnpm test:docker:live-cli-backend:claude-subscriptionpnpm test:docker:live-cli-backend:gemini

Note:

  • Il runner Docker si trova in scripts/test-live-cli-backend-docker.sh.
  • Esegue lo smoke live del backend CLI dentro l'immagine Docker del repo come utente non-root node.
  • Risolve i metadati smoke della CLI dall'estensione proprietaria, quindi installa il pacchetto CLI Linux corrispondente (@anthropic-ai/claude-code o @google/gemini-cli) in un prefisso scrivibile con cache in OPENCLAW_DOCKER_CLI_TOOLS_DIR (default: ~/.cache/openclaw/docker-cli-tools).
  • pnpm test:docker:live-cli-backend:claude-subscription richiede OAuth portabile della sottoscrizione Claude Code tramite ~/.claude/.credentials.json con claudeAiOauth.subscriptionType oppure CLAUDE_CODE_OAUTH_TOKEN da claude setup-token. Prima prova claude -p diretto in Docker, poi esegue due turni Gateway CLI-backend senza preservare variabili env di chiave API Anthropic. Questa lane di sottoscrizione disabilita per impostazione predefinita le probe Claude MCP/strumento e immagine perché consuma i limiti d'uso della sottoscrizione con accesso effettuato e Anthropic può cambiare il comportamento di fatturazione e rate-limit di Claude Agent SDK / claude -p senza una release OpenClaw.
  • Lo smoke live del backend CLI ora esercita lo stesso flusso end-to-end per Claude e Gemini: turno testuale, turno di classificazione immagine, quindi chiamata allo strumento MCP cron verificata tramite la CLI Gateway.
  • Lo smoke predefinito di Claude applica anche una patch alla sessione da Sonnet a Opus e verifica che la sessione ripresa ricordi ancora una nota precedente.

Live: raggiungibilità proxy APNs HTTP/2

  • Test: src/infra/push-apns-http2.live.test.ts
  • Obiettivo: effettuare un tunnel attraverso un proxy HTTP CONNECT locale verso l'endpoint APNs sandbox di Apple, inviare la richiesta di validazione APNs HTTP/2 e verificare che la vera risposta Apple 403 InvalidProviderToken ritorni attraverso il percorso proxy.
  • Abilita:
    • OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts
  • Timeout opzionale:
    • OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000

Live: smoke bind ACP (/acp spawn ... --bind here)

  • Test: src/gateway/gateway-acp-bind.live.test.ts
  • Obiettivo: convalidare il flusso reale di associazione conversazione ACP con un agent ACP live:
    • inviare /acp spawn <agent> --bind here
    • associare in loco una conversazione sintetica del canale messaggi
    • inviare un normale follow-up nella stessa conversazione
    • verificare che il follow-up arrivi nella trascrizione della sessione ACP associata
  • Abilitazione:
    • pnpm test:live src/gateway/gateway-acp-bind.live.test.ts
    • OPENCLAW_LIVE_ACP_BIND=1
  • Valori predefiniti:
    • agent ACP in Docker: claude,codex,gemini
    • agent ACP per pnpm test:live ... diretto: claude
    • Canale sintetico: contesto di conversazione in stile DM Slack
    • Backend ACP: acpx
  • Override:
    • OPENCLAW_LIVE_ACP_BIND_AGENT=claude
    • OPENCLAW_LIVE_ACP_BIND_AGENT=codex
    • OPENCLAW_LIVE_ACP_BIND_AGENT=droid
    • OPENCLAW_LIVE_ACP_BIND_AGENT=gemini
    • OPENCLAW_LIVE_ACP_BIND_AGENT=opencode
    • OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini
    • OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@<version>'
    • OPENCLAW_LIVE_ACP_BIND_CODEX_MODEL=gpt-5.5
    • OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL=opencode/kimi-k2.6
    • OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1
    • OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1
    • OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5
  • Note:
    • Questa lane usa la superficie gateway chat.send con campi sintetici admin-only per la route di origine, così i test possono collegare il contesto del canale messaggi senza fingere una consegna esterna.
    • Quando OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND non è impostato, il test usa il registro agent integrato del Plugin acpx incorporato per l'agent harness ACP selezionato.
    • La creazione MCP Cron della sessione associata è best-effort per impostazione predefinita perché gli harness ACP esterni possono annullare le chiamate MCP dopo che la prova bind/immagine è passata; imposta OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1 per rendere rigorosa quella sonda Cron post-bind.

Esempio:

bash
OPENCLAW_LIVE_ACP_BIND=1 \  OPENCLAW_LIVE_ACP_BIND_AGENT=claude \  pnpm test:live src/gateway/gateway-acp-bind.live.test.ts

Ricetta Docker:

bash
pnpm test:docker:live-acp-bind

Ricette Docker per singolo agent:

bash
pnpm test:docker:live-acp-bind:claudepnpm test:docker:live-acp-bind:codexpnpm test:docker:live-acp-bind:droidpnpm test:docker:live-acp-bind:geminipnpm test:docker:live-acp-bind:opencode

Note Docker:

  • Il runner Docker si trova in scripts/test-live-acp-bind-docker.sh.
  • Per impostazione predefinita, esegue lo smoke ACP bind contro gli agent CLI live aggregati in sequenza: claude, codex, poi gemini.
  • Usa OPENCLAW_LIVE_ACP_BIND_AGENTS=claude, OPENCLAW_LIVE_ACP_BIND_AGENTS=codex, OPENCLAW_LIVE_ACP_BIND_AGENTS=droid, OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini o OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode per restringere la matrice.
  • Prepara nel container il materiale di autenticazione CLI corrispondente, quindi installa la CLI live richiesta (@anthropic-ai/claude-code, @openai/codex, Factory Droid tramite https://app.factory.ai/cli, @google/gemini-cli o opencode-ai) se mancante. Il backend ACP stesso è il pacchetto acpx/runtime incorporato dal Plugin ufficiale acpx.
  • La variante Docker Droid prepara ~/.factory per le impostazioni, inoltra FACTORY_API_KEY e richiede quella chiave API perché l'autenticazione locale Factory OAuth/keyring non è portabile nel container. Usa la voce di registro integrata di ACPX droid exec --output-format acp.
  • La variante Docker OpenCode è una lane di regressione rigorosa per singolo agent. Scrive un modello predefinito temporaneo OPENCODE_CONFIG_CONTENT da OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL (predefinito opencode/kimi-k2.6) e pnpm test:docker:live-acp-bind:opencode richiede una trascrizione dell'assistant associato invece di accettare lo skip generico post-bind.
  • Le chiamate CLI dirette a acpx sono solo un percorso manuale/di workaround per confrontare il comportamento fuori dal Gateway. Lo smoke ACP bind Docker esercita il backend runtime acpx incorporato in OpenClaw.

Live: smoke dell'harness app-server Codex

  • Obiettivo: convalidare l'harness Codex di proprietà del Plugin tramite il normale metodo gateway agent:
    • caricare il Plugin codex in bundle
    • selezionare openai/gpt-5.5, che instrada per impostazione predefinita i turni agent OpenAI tramite Codex
    • inviare un primo turno agent gateway a openai/gpt-5.5 con l'harness Codex selezionato
    • inviare un secondo turno alla stessa sessione OpenClaw e verificare che il thread app-server possa riprendere
    • eseguire /codex status e /codex models tramite lo stesso percorso di comando gateway
    • facoltativamente eseguire due sonde shell con escalation revisionate da Guardian: un comando innocuo che dovrebbe essere approvato e un caricamento fake-secret che dovrebbe essere negato così l'agent chiede conferma
  • Test: src/gateway/gateway-codex-harness.live.test.ts
  • Abilitazione: OPENCLAW_LIVE_CODEX_HARNESS=1
  • Modello predefinito: openai/gpt-5.5
  • Sonda immagine facoltativa: OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1
  • Sonda MCP/tool facoltativa: OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1
  • Sonda Guardian facoltativa: OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1
  • Lo smoke forza provider/modello agentRuntime.id: "codex" così un harness Codex rotto non può passare tornando silenziosamente a OpenClaw.
  • Autenticazione: autenticazione app-server Codex dal login locale dell'abbonamento Codex. Gli smoke Docker possono anche fornire OPENAI_API_KEY per sonde non Codex quando applicabile, più eventuali ~/.codex/auth.json e ~/.codex/config.toml copiati.

Ricetta locale:

bash
OPENCLAW_LIVE_CODEX_HARNESS=1 \  OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \  OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \  OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \  OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.5 \  pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts

Ricetta Docker:

bash
pnpm test:docker:live-codex-harness

Note Docker:

  • Il runner Docker si trova in scripts/test-live-codex-harness-docker.sh.
  • Passa OPENAI_API_KEY, copia i file di autenticazione della CLI Codex quando presenti, installa @openai/codex in un prefisso npm montato e scrivibile, prepara l'albero sorgente, quindi esegue solo il test live dell'harness Codex.
  • Docker abilita per impostazione predefinita le sonde immagine, MCP/tool e Guardian. Imposta OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 oppure OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 oppure OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 quando serve un'esecuzione di debug più ristretta.
  • Docker usa la stessa configurazione runtime Codex esplicita, quindi alias legacy o fallback OpenClaw non possono nascondere una regressione dell'harness Codex.

Ricette live consigliate

Le allowlist ristrette ed esplicite sono le più veloci e le meno instabili:

  • Singolo modello, diretto (senza gateway):

    • OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts
  • Profilo diretto small-model:

    • OPENCLAW_LIVE_MODELS=small pnpm test:live src/agents/models.profiles.live.test.ts
  • Profilo gateway small-model:

    • OPENCLAW_LIVE_GATEWAY_MODELS=small pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
  • Smoke API Ollama Cloud:

    • OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 OPENCLAW_LIVE_OLLAMA_BASE_URL=https://ollama.com OPENCLAW_LIVE_OLLAMA_MODEL=glm-5.1:cloud OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=0 pnpm test:live -- extensions/ollama/ollama.live.test.ts
  • Singolo modello, smoke gateway:

    • OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
  • Chiamata tool su più provider:

    • OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
  • Smoke diretto Z.AI Coding Plan GLM-5.2:

    • ZAI_CODING_LIVE_TEST=1 pnpm test:live src/agents/zai.live.test.ts
  • Focus Google (chiave API Gemini + Antigravity):

    • Gemini (chiave 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
  • Smoke Google adaptive thinking:

    • Predefinito dinamico Gemini 3: pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000
    • Budget dinamico Gemini 2.5: pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000

Note:

  • google/... usa l'API Gemini (chiave API).
  • google-antigravity/... usa il bridge OAuth Antigravity (endpoint agent in stile Cloud Code Assist).
  • google-gemini-cli/... usa la CLI Gemini locale sulla tua macchina (autenticazione separata + peculiarità degli strumenti).
  • Gemini API rispetto a Gemini CLI:
    • API: OpenClaw chiama l'API Gemini ospitata da Google su HTTP (chiave API / autenticazione profilo); questo è ciò che la maggior parte degli utenti intende per "Gemini".
    • CLI: OpenClaw esegue una shell verso un binario locale gemini; ha la propria autenticazione e può comportarsi diversamente (streaming/supporto tool/disallineamento versioni).

Live: matrice dei modelli (cosa copriamo)

Non esiste un elenco fisso di "modelli CI" (live è opt-in), ma questi sono i modelli consigliati da coprire regolarmente su una macchina di sviluppo con chiavi.

Set smoke moderno (chiamata tool + immagine)

Questa è l'esecuzione dei "modelli comuni" che ci aspettiamo rimanga funzionante:

  • OpenAI (non Codex): openai/gpt-5.5
  • OpenAI ChatGPT/Codex OAuth: openai/gpt-5.5
  • Anthropic: anthropic/claude-opus-4-6 (o anthropic/claude-sonnet-4-6)
  • Google (Gemini API): google/gemini-3.1-pro-preview e google/gemini-3-flash-preview (evita i modelli Gemini 2.x meno recenti)
  • Google (Antigravity): google-antigravity/claude-opus-4-6-thinking e google-antigravity/gemini-3-flash
  • DeepSeek: deepseek/deepseek-v4-flash e deepseek/deepseek-v4-pro
  • Z.AI (GLM): zai/glm-5.1 (API generale) o zai/glm-5.2 (Coding Plan)
  • MiniMax: minimax/MiniMax-M3

Esegui lo smoke gateway con tool + immagine: OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts

Baseline: chiamata tool (Read + Exec facoltativo)

Scegline almeno uno per famiglia di provider:

  • OpenAI: openai/gpt-5.5
  • Anthropic: anthropic/claude-opus-4-6 (o anthropic/claude-sonnet-4-6)
  • Google: google/gemini-3-flash-preview (o google/gemini-3.1-pro-preview)
  • DeepSeek: deepseek/deepseek-v4-flash
  • Z.AI (GLM): zai/glm-5.1 (API generale) o zai/glm-5.2 (Coding Plan)
  • MiniMax: minimax/MiniMax-M3

Copertura aggiuntiva facoltativa (utile da avere):

  • xAI: xai/grok-4.3 (o l'ultimo disponibile)
  • Mistral: mistral/… (scegli un modello compatibile con "tools" che hai abilitato)
  • Cerebras: cerebras/… (se hai accesso)
  • LM Studio: lmstudio/… (locale; la chiamata tool dipende dalla modalità API)

Vision: invio immagine (allegato → messaggio multimodale)

Includi almeno un modello capace di immagini in OPENCLAW_LIVE_GATEWAY_MODELS (varianti Claude/Gemini/OpenAI compatibili con vision, ecc.) per esercitare la sonda immagine.

Aggregatori / gateway alternativi

Se hai chiavi abilitate, supportiamo anche il testing tramite:

  • OpenRouter: openrouter/... (centinaia di modelli; usa openclaw models scan per trovare candidati compatibili con tool+immagine)
  • OpenCode: opencode/... per Zen e opencode-go/... per Go (autenticazione tramite OPENCODE_API_KEY / OPENCODE_ZEN_API_KEY)

Altri provider che puoi includere nella matrice live (se hai credenziali/config):

  • Integrati: openai, anthropic, google, google-vertex, google-antigravity, google-gemini-cli, zai, openrouter, opencode, opencode-go, xai, groq, cerebras, mistral, github-copilot
  • Tramite models.providers (endpoint personalizzati): minimax (cloud/API), più qualsiasi proxy compatibile con OpenAI/Anthropic (LM Studio, vLLM, LiteLLM, ecc.)

Credenziali (non committare mai)

I test live rilevano le credenziali nello stesso modo della CLI. Implicazioni pratiche:

  • Se la CLI funziona, i test live dovrebbero trovare le stesse chiavi.

  • Se un test live dice "no creds", esegui il debug nello stesso modo in cui eseguiresti il debug di openclaw models list / della selezione del modello.

  • Profili di autenticazione per agente: ~/.openclaw/agents/<agentId>/agent/auth-profiles.json (questo è ciò che "profile keys" significa nei test live)

  • Configurazione: ~/.openclaw/openclaw.json (o OPENCLAW_CONFIG_PATH)

  • Directory di stato legacy: ~/.openclaw/credentials/ (copiata nella home live preparata quando presente, ma non nell'archivio principale delle chiavi profilo)

  • Le esecuzioni live locali copiano per impostazione predefinita la configurazione attiva, i file auth-profiles.json per agente, credentials/ legacy e le directory di autenticazione CLI esterne supportate in una home di test temporanea; le home live preparate saltano workspace/ e sandboxes/, e gli override di percorso agents.*.workspace / agentDir vengono rimossi, così le sonde restano fuori dal workspace reale dell'host.

Se vuoi basarti sulle chiavi env, esportale prima dei test locali oppure usa i runner Docker sotto con un OPENCLAW_PROFILE_FILE esplicito.

Deepgram live (trascrizione audio)

  • Test: extensions/deepgram/audio.live.test.ts
  • Abilita: DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts

Piano di coding BytePlus live

  • Test: extensions/byteplus/live.test.ts
  • Abilita: BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts
  • Override opzionale del modello: BYTEPLUS_CODING_MODEL=ark-code-latest

Media workflow ComfyUI live

  • Test: extensions/comfy/comfy.live.test.ts
  • Abilita: OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts
  • Ambito:
    • Esercita i percorsi bundled di immagine, video e music_generate di comfy
    • Salta ogni funzionalità a meno che plugins.entries.comfy.config.<capability> non sia configurato
    • Utile dopo modifiche a invio del workflow comfy, polling, download o registrazione del plugin

Generazione di immagini live

  • Test: test/image-generation.runtime.live.test.ts
  • Comando: pnpm test:live test/image-generation.runtime.live.test.ts
  • Harness: pnpm test:live:media image
  • Ambito:
    • Enumera ogni Plugin provider di generazione di immagini registrato
    • Usa le variabili env del provider già esportate prima delle sonde
    • Usa per impostazione predefinita chiavi API live/env prima dei profili di autenticazione archiviati, così chiavi di test obsolete in auth-profiles.json non mascherano le credenziali reali della shell
    • Salta i provider senza autenticazione/profilo/modello utilizzabile
    • Esegue ogni provider configurato tramite il runtime condiviso di generazione di immagini:
      • <provider>:generate
      • <provider>:edit quando il provider dichiara il supporto alla modifica
  • Provider bundled attualmente coperti:
    • deepinfra
    • fal
    • google
    • minimax
    • openai
    • openrouter
    • vydra
    • xai
  • Restrizione opzionale:
    • OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"
    • OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="deepinfra"
    • OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"
    • OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit,openrouter:generate,xai:default-generate,xai:default-edit"
  • Comportamento di autenticazione opzionale:
    • OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 per forzare l'autenticazione dall'archivio profili e ignorare gli override solo env

Per il percorso CLI distribuito, aggiungi uno smoke infer dopo che il test live provider/runtime è passato:

bash
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.tsopenclaw infer image providers --jsonopenclaw infer image generate \  --model google/gemini-3.1-flash-image-preview \  --prompt "Minimal flat test image: one blue square on a white background, no text." \  --output ./openclaw-infer-image-smoke.png \  --json

Questo copre il parsing degli argomenti CLI, la risoluzione della configurazione/dell'agente predefinito, l'attivazione dei Plugin bundled, il runtime condiviso di generazione di immagini e la richiesta live al provider. Le dipendenze del Plugin devono essere presenti prima del caricamento del runtime.

Generazione di musica live

  • Test: extensions/music-generation-providers.live.test.ts
  • Abilita: OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts
  • Harness: pnpm test:live:media music
  • Ambito:
    • Esercita il percorso provider bundled condiviso di generazione di musica
    • Attualmente copre Google e MiniMax
    • Usa le variabili env del provider già esportate prima delle sonde
    • Usa per impostazione predefinita chiavi API live/env prima dei profili di autenticazione archiviati, così chiavi di test obsolete in auth-profiles.json non mascherano le credenziali reali della shell
    • Salta i provider senza autenticazione/profilo/modello utilizzabile
    • Esegue entrambe le modalità runtime dichiarate quando disponibili:
      • generate con input solo prompt
      • edit quando il provider dichiara capabilities.edit.enabled
    • Copertura attuale della lane condivisa:
      • google: generate, edit
      • minimax: generate
      • comfy: file live Comfy separato, non questo sweep condiviso
  • Restrizione opzionale:
    • OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"
    • OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"
  • Comportamento di autenticazione opzionale:
    • OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 per forzare l'autenticazione dall'archivio profili e ignorare gli override solo env

Generazione di video live

  • Test: extensions/video-generation-providers.live.test.ts
  • Abilita: OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts
  • Harness: pnpm test:live:media video
  • Ambito:
    • Esercita il percorso provider bundled condiviso di generazione di video
    • Per impostazione predefinita usa il percorso smoke sicuro per la release: provider non FAL, una richiesta text-to-video per provider, prompt di un secondo con aragosta e un limite di operazione per provider da OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS (180000 per impostazione predefinita)
    • Salta FAL per impostazione predefinita perché la latenza della coda lato provider può dominare il tempo di release; passa --video-providers fal o OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal" per eseguirlo esplicitamente
    • Usa le variabili env del provider già esportate prima delle sonde
    • Usa per impostazione predefinita chiavi API live/env prima dei profili di autenticazione archiviati, così chiavi di test obsolete in auth-profiles.json non mascherano le credenziali reali della shell
    • Salta i provider senza autenticazione/profilo/modello utilizzabile
    • Esegue solo generate per impostazione predefinita
    • Imposta OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1 per eseguire anche le modalità di trasformazione dichiarate quando disponibili:
      • imageToVideo quando il provider dichiara capabilities.imageToVideo.enabled e il provider/modello selezionato accetta input immagine locale basato su buffer nello sweep condiviso
      • videoToVideo quando il provider dichiara capabilities.videoToVideo.enabled e il provider/modello selezionato accetta input video locale basato su buffer nello sweep condiviso
    • Provider imageToVideo attualmente dichiarati ma saltati nello sweep condiviso:
      • vydra perché veo3 bundled è solo testo e kling bundled richiede un URL immagine remoto
    • Copertura Vydra specifica del provider:
      • OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts
      • quel file esegue veo3 text-to-video più una lane kling che usa per impostazione predefinita una fixture con URL immagine remoto
    • Copertura live videoToVideo attuale:
      • solo runway quando il modello selezionato è runway/gen4_aleph
    • Provider videoToVideo attualmente dichiarati ma saltati nello sweep condiviso:
      • alibaba, qwen, xai perché quei percorsi attualmente richiedono URL di riferimento remoti http(s) / MP4
      • google perché la lane condivisa Gemini/Veo attuale usa input locale basato su buffer e quel percorso non è accettato nello sweep condiviso
      • openai perché alla lane condivisa attuale mancano garanzie di accesso alla modifica video specifiche per l'organizzazione
  • Restrizione opzionale:
    • OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"
    • OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"
    • OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS="" per includere ogni provider nello sweep predefinito, incluso FAL
    • OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000 per ridurre il limite di operazione di ciascun provider per una smoke run aggressiva
  • Comportamento di autenticazione opzionale:
    • OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1 per forzare l'autenticazione dall'archivio profili e ignorare gli override solo env

Harness media live

  • Comando: pnpm test:live:media
  • Scopo:
    • Esegue le suite live condivise di immagine, musica e video tramite un unico entrypoint nativo del repo
    • Usa le variabili env del provider già esportate
    • Restringe automaticamente ogni suite ai provider che attualmente hanno autenticazione utilizzabile per impostazione predefinita
    • Riusa scripts/test-live.mjs, così il comportamento di Heartbeat e modalità quiet resta coerente
  • Esempi:
    • pnpm test:live:media
    • pnpm test:live:media image video --providers openai,google,minimax
    • pnpm test:live:media video --video-providers openai,runway --all-providers
    • pnpm test:live:media music --quiet

Correlati

  • Testing - suite unit, di integrazione, QA e Docker
Was this useful?
On this page

On this page