Tests
OpenClaw a trois suites Vitest (unitaire/intégration, e2e, live) et un petit ensemble de lanceurs Docker. Ce document est un guide "comment nous testons" :
- Ce que couvre chaque suite (et ce qu'elle ne couvre délibérément pas)
- Quelles commandes exécuter pour les workflows courants (local, pré-push, débogage)
- Comment les tests live découvrent les identifiants et sélectionnent les modèles/fournisseurs
- Comment ajouter des régressions pour les problèmes réels de modèles/fournisseurs
Démarrage rapide
La plupart du temps :
- Porte complète (attendue avant un push) :
pnpm build && pnpm check && pnpm test
Lorsque vous touchez aux tests ou voulez une confiance supplémentaire :
- Porte de couverture :
pnpm test:coverage - Suite E2E :
pnpm test:e2e
Lors du débogage de fournisseurs/modèles réels (nécessite de vrais identifiants) :
- Suite live (modèles + sondes d'outil/image gateway) :
pnpm test:live
Astuce : lorsque vous n'avez besoin que d'un seul cas en échec, privilégiez le rétrécissement des tests live via les variables d'environnement de liste autorisée décrites ci-dessous.
Suites de tests (ce qui s'exécute où)
Considérez les suites comme une "réalité croissante" (et une instabilité/coût croissants) :
Unitaire / intégration (par défaut)
- Commande :
pnpm test - Configuration :
scripts/test-parallel.mjs(exécutevitest.unit.config.ts,vitest.extensions.config.ts,vitest.gateway.config.ts) - Fichiers :
src/**/*.test.ts,extensions/**/*.test.ts - Portée :
- Tests unitaires purs
- Tests d'intégration en processus (authentification gateway, routage, outils, analyse, configuration)
- Régressions déterministes pour les bogues connus
- Attentes :
- S'exécute en CI
- Aucune clé réelle requise
- Doit être rapide et stable
- Note sur le pool :
- OpenClaw utilise les
vmForksde Vitest sur Node 22/23 pour des shards unitaires plus rapides. - Sur Node 24+, OpenClaw revient automatiquement aux
forksréguliers pour éviter les erreurs de liaison VM Node (ERR_VM_MODULE_LINK_FAILURE/module is already linked). - Remplacez manuellement avec
OPENCLAW_TEST_VM_FORKS=0(forceforks) ouOPENCLAW_TEST_VM_FORKS=1(forcevmForks).
- OpenClaw utilise les
E2E (test de fumée gateway)
- Commande :
pnpm test:e2e - Configuration :
vitest.e2e.config.ts - Fichiers :
src/**/*.e2e.test.ts - Valeurs par défaut d'exécution :
- Utilise les
vmForksde Vitest pour un démarrage de fichier plus rapide. - Utilise des travailleurs adaptatifs (CI : 2-4, local : 4-8).
- S'exécute en mode silencieux par défaut pour réduire la surcharge d'E/S console.
- Utilise les
- Remplacements utiles :
OPENCLAW_E2E_WORKERS=<n>pour forcer le nombre de travailleurs (limité à 16).OPENCLAW_E2E_VERBOSE=1pour réactiver la sortie console verbeuse.
- Portée :
- Comportement de bout en bout de la gateway multi-instances
- Surfaces WebSocket/HTTP, appairage de nœuds et réseau plus lourd
- Attentes :
- S'exécute en CI (lorsqu'activé dans le pipeline)
- Aucune clé réelle requise
- Plus de pièces mobiles que les tests unitaires (peut être plus lent)
Live (fournisseurs réels + modèles réels)
- Commande :
pnpm test:live - Configuration :
vitest.live.config.ts - Fichiers :
src/**/*.live.test.ts - Par défaut : activé par
pnpm test:live(définitOPENCLAW_LIVE_TEST=1) - Portée :
- "Est-ce que ce fournisseur/modèle fonctionne réellement aujourd'hui avec de vrais identifiants ?"
- Détecter les changements de format de fournisseur, les particularités d'appel d'outil, les problèmes d'authentification et le comportement des limites de taux
- Attentes :
- Non stable en CI par conception (réseaux réels, politiques réelles des fournisseurs, quotas, pannes)
- Coûte de l'argent / utilise les limites de taux
- Préférez exécuter des sous-ensembles restreints au lieu de "tout"
- Les exécutions live sourceront
~/.profilepour récupérer les clés API manquantes
- Rotation des clés API (spécifique au fournisseur) : définissez
*_API_KEYSavec un format virgule/point-virgule ou*_API_KEY_1,*_API_KEY_2(par exempleOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) ou remplacement par live viaOPENCLAW_LIVE_*_KEY; les tests réessaient sur les réponses de limite de taux.
Quelle suite dois-je exécuter ?
Utilisez cette table de décision :
- Modification de la logique/des tests : exécutez
pnpm test(etpnpm test:coveragesi vous avez beaucoup changé) - Toucher au réseau gateway / protocole WS / appairage : ajoutez
pnpm test:e2e - Débogage "mon bot est en panne" / échecs spécifiques au fournisseur / appel d'outil : exécutez un
pnpm test:liverestreint
Live : balayage des capacités du nœud Android
- Test :
src/gateway/android-node.capabilities.live.test.ts - Script :
pnpm android:test:integration - Objectif : invoquer chaque commande actuellement annoncée par un nœud Android connecté et vérifier le comportement du contrat de commande.
- Portée :
- Configuration préconditionnée/manuelle (la suite n'installe/exécute/apparie pas l'application).
- Validation
node.invokegateway commande par commande pour le nœud Android sélectionné.
- Pré-configuration requise :
- Application Android déjà connectée + appairée à la gateway.
- Application maintenue au premier plan.
- Permissions/consentement de capture accordé pour les capacités que vous attendez de réussir.
- Remplacements de cible optionnels :
OPENCLAW_ANDROID_NODE_IDouOPENCLAW_ANDROID_NODE_NAME.OPENCLAW_ANDROID_GATEWAY_URL/OPENCLAW_ANDROID_GATEWAY_TOKEN/OPENCLAW_ANDROID_GATEWAY_PASSWORD.
- Détails complets de la configuration Android : Application Android
Live : test de fumée des modèles (clés de profil)
Les tests live sont divisés en deux couches pour isoler les échecs :
- "Modèle direct" nous indique si le fournisseur/modèle peut répondre du tout avec la clé donnée.
- "Test de fumée gateway" nous indique si le pipeline complet gateway+agent fonctionne pour ce modèle (sessions, historique, outils, politique de sandbox, etc.).
Couche 1 : Complétion directe de modèle (sans gateway)
- Test :
src/agents/models.profiles.live.test.ts - Objectif :
- Énumérer les modèles découverts
- Utiliser
getApiKeyForModelpour sélectionner les modèles pour lesquels vous avez des identifiants - Exécuter une petite complétion par modèle (et des régressions ciblées si nécessaire)
- Comment activer :
pnpm test:live(ouOPENCLAW_LIVE_TEST=1si vous invoquez Vitest directement)
- Définissez
OPENCLAW_LIVE_MODELS=modern(ouall, alias pour modern) pour réellement exécuter cette suite ; sinon elle est ignorée pour garderpnpm test:liveconcentré sur le test de fumée gateway - Comment sélectionner les modèles :
OPENCLAW_LIVE_MODELS=modernpour exécuter la liste autorisée moderne (Opus/Sonnet/Haiku 4.5, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.5, Grok 4)OPENCLAW_LIVE_MODELS=allest un alias pour la liste autorisée moderne- ou
OPENCLAW_LIVE_MODELS="openai/gpt-5.2,anthropic/claude-opus-4-6,..."(liste autorisée par virgules)
- Comment sélectionner les fournisseurs :
OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"(liste autorisée par virgules)
- D'où viennent les clés :
- Par défaut : magasin de profil et replis d'environnement
- Définissez
OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1pour imposer uniquement le magasin de profil
- Pourquoi cela existe :
- Sépare "l'API du fournisseur est cassée / la clé est invalide" de "le pipeline d'agent gateway est cassé"
- Contient de petites régressions isolées (exemple : rejeu de raisonnement OpenAI Responses/Codex Responses + flux d'appel d'outil)
Couche 2 : Gateway + test de fumée de l'agent de développement (ce que fait réellement "@openclaw")
- Test :
src/gateway/gateway-models.profiles.live.test.ts - Objectif :
- Démarrer une gateway en processus
- Créer/modifier une session
agent:dev:*(remplacement de modèle par exécution) - Itérer sur les modèles avec clés et vérifier :
- Une réponse "significative" (sans outils)
- Une invocation d'outil réel fonctionne (sonde de lecture)
- Sondes d'outil supplémentaires optionnelles (sonde exec+read)
- Les chemins de régression OpenAI (appel d'outil uniquement → suivi) continuent de fonctionner
- Détails des sondes (pour expliquer rapidement les échecs) :
- Sonde
read: le test écrit un fichier nonce dans l'espace de travail et demande à l'agent de lereadet de renvoyer le nonce. - Sonde
exec+read: le test demande à l'agent d'exec-écrire un nonce dans un fichier temporaire, puis de leread. - Sonde image : le test attache un PNG généré (chat + code randomisé) et attend que le modèle renvoie
cat <CODE>. - Référence d'implémentation :
src/gateway/gateway-models.profiles.live.test.tsetsrc/gateway/live-image-probe.ts.
- Sonde
- Comment activer :
pnpm test:live(ouOPENCLAW_LIVE_TEST=1si vous invoquez Vitest directement)
- Comment sélectionner les modèles :
- Par défaut : liste autorisée moderne (Opus/Sonnet/Haiku 4.5, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.5, Grok 4)
OPENCLAW_LIVE_GATEWAY_MODELS=allest un alias pour la liste autorisée moderne- Ou définissez
OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"(ou liste par virgules) pour restreindre
- Comment sélectionner les fournisseurs (éviter "OpenRouter tout") :
OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"(liste autorisée par virgules)
- Les sondes d'outil et d'image sont toujours activées dans ce test live :
- Sonde
read+ sondeexec+read(stress d'outil) - La sonde image s'exécute lorsque le modèle annonce la prise en charge de l'entrée d'image
- Flux (haut niveau) :
- Le test génère un petit PNG avec "CAT" + un code aléatoire (
src/gateway/live-image-probe.ts) - L'envoie via
agentattachments: [{ mimeType: "image/png", content: "<base64>" }] - La gateway analyse les pièces jointes en
images[](src/gateway/server-methods/agent.ts+src/gateway/chat-attachments.ts) - L'agent intégré transmet un message utilisateur multimodal au modèle
- Assertion : la réponse contient
cat+ le code (tolérance OCR : erreurs mineures autorisées)
- Le test génère un petit PNG avec "CAT" + un code aléatoire (
- Sonde
Astuce : pour voir ce que vous pouvez tester sur votre machine (et les identifiants exacts provider/model), exécutez :
openclaw models list
openclaw models list --json
Live : test de fumée du jeton de configuration Anthropic
- Test :
src/agents/anthropic.setup-token.live.test.ts - Objectif : vérifier que le jeton de configuration CLI Claude Code (ou un profil de jeton de configuration collé) peut compléter une invite Anthropic.
- Activer :
pnpm test:live(ouOPENCLAW_LIVE_TEST=1si vous invoquez Vitest directement)OPENCLAW_LIVE_SETUP_TOKEN=1
- Sources du jeton (choisissez une) :
- Profil :
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE=anthropic:setup-token-test - Jeton brut :
OPENCLAW_LIVE_SETUP_TOKEN_VALUE=sk-ant-oat01-...
- Profil :
- Remplacement de modèle (optionnel) :
OPENCLAW_LIVE_SETUP_TOKEN_MODEL=anthropic/claude-opus-4-6
Exemple de configuration :
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
Live : test de fumée du backend CLI (Claude Code CLI ou autres CLI locaux)
- Test :
src/gateway/gateway-cli-backend.live.test.ts - Objectif : valider le pipeline Gateway + agent en utilisant un backend CLI local, sans toucher à votre configuration par défaut.
- Activer :
pnpm test:live(ouOPENCLAW_LIVE_TEST=1si vous invoquez Vitest directement)OPENCLAW_LIVE_CLI_BACKEND=1
- Valeurs par défaut :
- Modèle :
claude-cli/claude-sonnet-4-6 - Commande :
claude - Arguments :
["-p","--output-format","json","--permission-mode","bypassPermissions"]
- Modèle :
- Remplacements (optionnels) :
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=1pour envoyer une pièce jointe image réelle (les chemins sont injectés dans l'invite).OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"pour passer les chemins de fichiers image comme arguments CLI au lieu d'une injection dans l'invite.OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"(ou"list") pour contrôler comment les arguments image sont passés lorsqueIMAGE_ARGest défini.OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1pour envoyer un deuxième tour et valider le flux de reprise.OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG=0pour garder la configuration MCP de Claude Code CLI activée (par défaut désactive la configuration MCP avec un fichier vide temporaire).
Exemple :
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
Recettes live recommandées
Les listes autorisées explicites et restreintes sont les plus rapides et les moins instables :
- Modèle unique, direct (sans gateway) :
OPENCLAW_LIVE_MODELS="openai/gpt-5.2" pnpm test:live src/agents/models.profiles.live.test.ts
- Modèle unique, test de fumée gateway :
OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
- Appel d'outil sur plusieurs fournisseurs :
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
- Focus Google (clé API Gemini + Antigravity) :
- Gemini (clé 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 (clé API) :
Notes :
google/...utilise l'API Gemini (clé API).google-antigravity/...utilise le pont OAuth Antigravity (point de terminaison d'agent de type Cloud Code Assist).google-gemini-cli/...utilise le CLI Gemini local sur votre machine (authentification distincte + particularités d'outillage).- API Gemini vs CLI Gemini :
- API : OpenClaw appelle l'API Gemini hébergée de Google via HTTP (authentification par clé API / profil) ; c'est ce que la plupart des utilisateurs entendent par "Gemini".
- CLI : OpenClaw exécute un binaire
geminilocal ; il a sa propre authentification et peut se comporter différemment (support du streaming/des outils/décalage de version).
Live : matrice des modèles (ce que nous couvrons)
Il n'y a pas de "liste de modèles CI" fixe (live est optionnel), mais voici les modèles recommandés à couvrir régulièrement sur une machine de développement avec des clés.
Ensemble de test de fumée moderne (appel d'outil + image)
C'est l'exécution "modèles courants" que nous nous attendons à voir fonctionner :
- OpenAI (non-Codex) :
openai/gpt-5.2(optionnel :openai/gpt-5.1) - OpenAI Codex :
openai-codex/gpt-5.4 - Anthropic :
anthropic/claude-opus-4-6(ouanthropic/claude-sonnet-4-5) - Google (API Gemini) :
google/gemini-3-pro-previewetgoogle/gemini-3-flash-preview(évitez les anciens modèles Gemini 2.x) - Google (Antigravity) :
google-antigravity/claude-opus-4-6-thinkingetgoogle-antigravity/gemini-3-flash - Z.AI (GLM) :
zai/glm-4.7 - MiniMax :
minimax/minimax-m2.5
Exécutez le test de fumée gateway avec outils + image : OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.2,openai-codex/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,zai/glm-4.7,minimax/minimax-m2.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts
Base de référence : appel d'outil (Read + optionnel Exec)
Choisissez au moins un par famille de fournisseurs :
- OpenAI :
openai/gpt-5.2(ouopenai/gpt-5-mini) - Anthropic :
anthropic/claude-opus-4-6(ouanthropic/claude-sonnet-4-5) - Google :
google/gemini-3-flash-preview(ougoogle/gemini-3-pro-preview) - Z.AI (GLM) :
zai/glm-4.7 - MiniMax :
minimax/minimax-m2.5
Couverture supplémentaire optionnelle (bon à avoir) :
- xAI :
xai/grok-4(ou le dernier disponible) - Mistral :
mistral/… (choisissez un modèle capable d'"outils" que vous avez activé) - Cerebras :
cerebras/… (si vous y avez accès) - LM Studio :
lmstudio/… (local ; l'appel d'outil dépend du mode API)
Vision : envoi d'image (pièce jointe → message multimodal)
Incluez au moins un modèle capable de traiter les images dans OPENCLAW_LIVE_GATEWAY_MODELS (variantes compatibles vision de Claude/Gemini/OpenAI, etc.) pour exercer la sonde image.
Agrégateurs / gateways alternatives
Si vous avez des clés activées, nous prenons également en charge les tests via :
- OpenRouter :
openrouter/...(des centaines de modèles ; utilisezopenclaw models scanpour trouver des candidats capables d'outils+images) - OpenCode Zen :
opencode/...(authentification viaOPENCODE_API_KEY/OPENCODE_ZEN_API_KEY)
Plus de fournisseurs que vous pouvez inclure dans la matrice live (si vous avez des identifiants/config) :
- Intégrés :
openai,openai-codex,anthropic,google,google-vertex,google-antigravity,google-gemini-cli,zai,openrouter,opencode,xai,groq,cerebras,mistral,github-copilot - Via
models.providers(points de terminaison personnalisés) :minimax(cloud/API), plus tout proxy compatible OpenAI/Anthropique (LM Studio, vLLM, LiteLLM, etc.)
Astuce : n'essayez pas de coder en dur "tous les modèles" dans la documentation. La liste faisant autorité est ce que discoverModels(...) renvoie sur votre machine + toutes les clés disponibles.
Identifiants (ne jamais les commettre)
Les tests live découvrent les identifiants de la même manière que le CLI. Implications pratiques :
- Si le CLI fonctionne, les tests live devraient trouver les mêmes clés.
- Si un test live indique "pas d'identifiants", déboguez de la même manière que vous débogueriez
openclaw models list/ la sélection de modèle. - Magasin de profil :
~/.openclaw/credentials/(préféré ; ce que signifie "clés de profil" dans les tests) - Configuration :
~/.openclaw/openclaw.json(ouOPENCLAW_CONFIG_PATH)
Si vous voulez vous fier aux clés d'environnement (par exemple exportées dans votre ~/.profile), exécutez les tests locaux après source ~/.profile, ou utilisez les lanceurs Docker ci-dessous (ils peuvent monter ~/.profile dans le conteneur).
Deepgram live (transcription audio)
- Test :
src/media-understanding/providers/deepgram/audio.live.test.ts - Activer :
DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts
BytePlus live du plan de codage
- Test :
src/agents/byteplus.live.test.ts - Activer :
BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts - Remplacement de modèle optionnel :
BYTEPLUS_CODING_MODEL=ark-code-latest
Lanceurs Docker (vérifications optionnelles "fonctionne sous Linux")
Ceux-ci exécutent pnpm test:live dans l'image Docker du dépôt, montant votre répertoire de configuration local et l'espace de travail (et sourçant ~/.profile si monté) :
- Modèles directs :
pnpm test:docker:live-models(script :scripts/test-live-models-docker.sh) - Gateway + agent de développement :
pnpm test:docker:live-gateway(script :scripts/test-live-gateway-models-docker.sh) - Assistant d'intégration (TTY, échafaudage complet) :
pnpm test:docker:onboard(script :scripts/e2e/onboard-docker.sh) - Réseau gateway (deux conteneurs, authentification WS + santé) :
pnpm test:docker:gateway-network(script :scripts/e2e/gateway-network-docker.sh) - Plugins (chargement d'extension personnalisé + test de fumée du registre) :
pnpm test:docker:plugins(script :scripts/e2e/plugins-docker.sh)
Test de fumée manuel de fil en langage simple ACP (pas CI) :
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Gardez ce script pour les workflows de régression/débogage. Il pourrait être nécessaire à nouveau pour la validation du routage des fils ACP, donc ne le supprimez pas.
Variables d'environnement utiles :
OPENCLAW_CONFIG_DIR=...(par défaut :~/.openclaw) monté sur/home/node/.openclawOPENCLAW_WORKSPACE_DIR=...(par défaut :~/.openclaw/workspace) monté sur/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...(par défaut :~/.profile) monté sur/home/node/.profileet sourcé avant d'exécuter les testsOPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=...pour restreindre l'exécutionOPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1pour s'assurer que les identifiants proviennent du magasin de profil (pas de l'environnement)
Vérification de la documentation
Exécutez les vérifications de documentation après les modifications de doc : pnpm docs:list.
Régression hors ligne (sûre pour CI)
Ce sont des régressions de "pipeline réel" sans fournisseurs réels :
- Appel d'outil gateway (OpenAI simulé, vraie gateway + boucle d'agent) :
src/gateway/gateway.test.ts(cas : "exécute un appel d'outil OpenAI simulé de bout en bout via la boucle d'agent gateway") - Assistant gateway (WS
wizard.start/wizard.next, écrit la configuration + authentification appliquée) :src/gateway/gateway.test.ts(cas : "exécute l'assistant via ws et écrit la configuration du jeton d'authentification")
Évaluations de fiabilité de l'agent (compétences)
Nous avons déjà quelques tests sûrs pour CI qui se comportent comme des "évaluations de fiabilité de l'agent" :
- Appel d'outil simulé à travers la vraie gateway + boucle d'agent (
src/gateway/gateway.test.ts). - Flux d'assistant de bout en bout qui valident le câblage des sessions et les effets de configuration (
src/gateway/gateway.test.ts).
Ce qui manque encore pour les compétences (voir Compétences) :
- Décision : lorsque les compétences sont listées dans l'invite, l'agent choisit-il la bonne compétence (ou évite-t-il celles qui ne sont pas pertinentes) ?
- Conformité : l'agent lit-il
SKILL.mdavant utilisation et suit-il les étapes/arguments requis ? - Contrats de workflow : scénarios multi-tours qui vérifient l'ordre des outils, la persistance de l'historique des sessions et les limites du sandbox.
Les futures évaluations doivent d'abord rester déterministes :
- Un exécuteur de scénario utilisant des fournisseurs simulés pour vérifier les appels d'outil + l'ordre, les lectures de fichiers de compétences et le câblage des sessions.
- Une petite suite de scénarios axés sur les compétences (utilisation vs évitement, contrôle d'accès, injection d'invite).
- Évaluations live optionnelles (opt-in, conditionnées par l'environnement) uniquement après que la suite sûre pour CI est en place.
Ajout de régressions (guide)
Lorsque vous corrigez un problème de fournisseur/modèle découvert en live :
- Ajoutez une régression sûre pour CI si possible (fournisseur simulé/bouchon, ou capturez la transformation exacte de la forme de requête)
- Si c'est intrinsèquement live uniquement (limites de taux, politiques d'authentification), gardez le test live restreint et optionnel via des variables d'environnement
- Privilégiez le ciblage de la plus petite couche qui détecte le bogue :
- bogue de conversion/rejeu de requête de fournisseur → test de modèles directs
- bogue de pipeline de session/historique/outil gateway → test de fumée gateway live ou test de simulation gateway sûr pour CI