From 09a558d9e422fd0a77620b16746d3bc2d10d66ac Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 15 Apr 2026 14:48:50 +0000 Subject: [PATCH] chore(i18n): refresh fr translations --- docs/fr/concepts/dreaming.md | 120 +- docs/fr/concepts/experimental-features.md | 54 + docs/fr/concepts/memory-search.md | 62 +- docs/fr/concepts/memory.md | 110 +- docs/fr/gateway/configuration-reference.md | 1587 ++++++++++---------- docs/fr/gateway/local-models.md | 62 +- docs/fr/help/testing.md | 755 +++++----- docs/fr/providers/github-copilot.md | 92 +- docs/fr/providers/ollama.md | 190 +-- docs/fr/reference/memory-config.md | 427 +++--- docs/fr/reference/wizard.md | 158 +- docs/fr/start/wizard-cli-reference.md | 244 +-- 12 files changed, 1971 insertions(+), 1890 deletions(-) create mode 100644 docs/fr/concepts/experimental-features.md diff --git a/docs/fr/concepts/dreaming.md b/docs/fr/concepts/dreaming.md index 6aebd330d..4f39a004d 100644 --- a/docs/fr/concepts/dreaming.md +++ b/docs/fr/concepts/dreaming.md @@ -1,74 +1,74 @@ --- read_when: - Vous souhaitez que la promotion de la mémoire s’exécute automatiquement - - Vous voulez comprendre ce que fait chaque phase de Dreaming - - Vous voulez ajuster la consolidation sans polluer `MEMORY.md` -summary: Consolidation de la mémoire en arrière-plan avec des phases légères, profondes et REM, plus un journal de rêves -title: Dreaming (expérimental) + - Vous souhaitez comprendre le rôle de chaque phase de Dreaming + - Vous souhaitez ajuster la consolidation sans polluer `MEMORY.md` +summary: Consolidation de la mémoire en arrière-plan avec des phases légères, profondes et REM, ainsi qu’un journal des rêves +title: Dreaming x-i18n: - generated_at: "2026-04-15T06:56:37Z" + generated_at: "2026-04-15T14:40:40Z" model: gpt-5.4 provider: openai - source_hash: 5882a5068f2eabe54ca9893184e5385330a432b921870c38626399ce11c31e25 + source_hash: a5bcaec80f62e7611ed533094ef1917bd72c885f57252824db910e1f0496adc6 source_path: concepts/dreaming.md workflow: 15 --- -# Dreaming (expérimental) +# Dreaming Dreaming est le système de consolidation de la mémoire en arrière-plan dans `memory-core`. -Il aide OpenClaw à déplacer les signaux forts à court terme vers une mémoire durable tout en +Il aide OpenClaw à déplacer les signaux forts de mémoire à court terme vers une mémoire durable tout en gardant le processus explicable et révisable. Dreaming est **optionnel** et désactivé par défaut. ## Ce que Dreaming écrit -Dreaming conserve deux types de sortie : +Dreaming conserve deux types de sortie : - **État machine** dans `memory/.dreams/` (magasin de rappel, signaux de phase, points de contrôle d’ingestion, verrous). -- **Sortie lisible par des humains** dans `DREAMS.md` (ou `dreams.md` existant) et des fichiers de rapport de phase facultatifs sous `memory/dreaming//YYYY-MM-DD.md`. +- **Sortie lisible par des humains** dans `DREAMS.md` (ou le `dreams.md` existant) et des fichiers de rapport de phase facultatifs sous `memory/dreaming//YYYY-MM-DD.md`. La promotion à long terme continue d’écrire uniquement dans `MEMORY.md`. ## Modèle de phase -Dreaming utilise trois phases coopératives : +Dreaming utilise trois phases coopératives : | Phase | Objectif | Écriture durable | | ----- | ----------------------------------------- | ----------------- | -| Light | Trier et préparer le matériel récent à court terme | Non | +| Light | Trier et préparer le contenu récent à court terme | Non | | Deep | Évaluer et promouvoir les candidats durables | Oui (`MEMORY.md`) | | REM | Réfléchir aux thèmes et aux idées récurrentes | Non | -Ces phases sont des détails d’implémentation internes, et non des « modes » -distincts configurés par l’utilisateur. +Ces phases sont des détails d’implémentation internes, pas des « modes » +séparés configurés par l’utilisateur. ### Phase Light La phase Light ingère les signaux récents de mémoire quotidienne et les traces de rappel, les déduplique, -et prépare les lignes candidates. +et prépare des lignes candidates. -- Lit l’état de rappel à court terme, les fichiers récents de mémoire quotidienne et les transcriptions de session expurgées lorsqu’elles sont disponibles. +- Lit l’état de rappel à court terme, les fichiers récents de mémoire quotidienne et les transcriptions de session expurgées lorsque disponibles. - Écrit un bloc géré `## Light Sleep` lorsque le stockage inclut une sortie en ligne. - Enregistre des signaux de renforcement pour le classement Deep ultérieur. - N’écrit jamais dans `MEMORY.md`. ### Phase Deep -La phase Deep décide de ce qui devient une mémoire à long terme. +La phase Deep décide de ce qui devient de la mémoire à long terme. - Classe les candidats à l’aide d’un score pondéré et de seuils de validation. - Exige que `minScore`, `minRecallCount` et `minUniqueQueries` soient atteints. -- Réhydrate les extraits à partir des fichiers quotidiens actifs avant l’écriture, de sorte que les extraits obsolètes ou supprimés soient ignorés. +- Réhydrate les extraits à partir des fichiers quotidiens actifs avant l’écriture, afin que les extraits obsolètes/supprimés soient ignorés. - Ajoute les entrées promues à `MEMORY.md`. -- Écrit un résumé `## Deep Sleep` dans `DREAMS.md` et peut aussi écrire `memory/dreaming/deep/YYYY-MM-DD.md`. +- Écrit un résumé `## Deep Sleep` dans `DREAMS.md` et peut éventuellement écrire `memory/dreaming/deep/YYYY-MM-DD.md`. ### Phase REM La phase REM extrait des motifs et des signaux réflexifs. -- Construit des résumés de thèmes et de réflexions à partir des traces récentes à court terme. +- Construit des résumés de thèmes et de réflexions à partir de traces récentes à court terme. - Écrit un bloc géré `## REM Sleep` lorsque le stockage inclut une sortie en ligne. - Enregistre des signaux de renforcement REM utilisés par le classement Deep. - N’écrit jamais dans `MEMORY.md`. @@ -76,58 +76,56 @@ La phase REM extrait des motifs et des signaux réflexifs. ## Ingestion des transcriptions de session Dreaming peut ingérer des transcriptions de session expurgées dans le corpus de Dreaming. Lorsque -des transcriptions sont disponibles, elles sont intégrées à la phase Light en plus des signaux de -mémoire quotidienne et des traces de rappel. Le contenu personnel et sensible est expurgé -avant l’ingestion. +des transcriptions sont disponibles, elles sont injectées dans la phase Light avec les signaux de mémoire quotidienne +et les traces de rappel. Le contenu personnel et sensible est expurgé +avant ingestion. ## Journal des rêves -Dreaming conserve aussi un **journal des rêves** narratif dans `DREAMS.md`. -Après que chaque phase a accumulé suffisamment de matière, `memory-core` exécute un tour -de sous-agent en arrière-plan en mode best-effort (en utilisant le modèle d’exécution par défaut) -et ajoute une courte entrée au journal. +Dreaming conserve également un **journal des rêves** narratif dans `DREAMS.md`. +Après que chaque phase dispose de suffisamment de matière, `memory-core` exécute un tour +de sous-agent en arrière-plan en mode best-effort (en utilisant le modèle d’exécution par défaut) et ajoute une courte entrée de journal. -Ce journal est destiné à la lecture humaine dans l’interface Dreams, et non à servir de source de promotion. +Ce journal est destiné à la lecture humaine dans l’interface Dreams, pas à servir de source de promotion. Les artefacts de journal/rapport générés par Dreaming sont exclus de la -promotion à court terme. Seuls les extraits de mémoire ancrés dans les faits peuvent être promus dans +promotion à court terme. Seuls les extraits de mémoire fondés peuvent être promus dans `MEMORY.md`. -Il existe aussi un circuit de remplissage historique ancré dans les faits pour les travaux de révision et de récupération : +Il existe également une voie de remplissage historique fondée pour les travaux de révision et de récupération : -- `memory rem-harness --path ... --grounded` prévisualise la sortie du journal ancré dans les faits à partir des notes historiques `YYYY-MM-DD.md`. -- `memory rem-backfill --path ...` écrit des entrées réversibles de journal ancré dans les faits dans `DREAMS.md`. -- `memory rem-backfill --path ... --stage-short-term` prépare des candidats durables ancrés dans les faits dans le même magasin de preuves à court terme que la phase Deep normale utilise déjà. -- `memory rem-backfill --rollback` et `--rollback-short-term` suppriment ces artefacts de remplissage préparés sans toucher aux entrées ordinaires du journal ni au rappel actif à court terme. +- `memory rem-harness --path ... --grounded` prévisualise une sortie de journal fondée à partir de notes historiques `YYYY-MM-DD.md`. +- `memory rem-backfill --path ...` écrit des entrées de journal fondées réversibles dans `DREAMS.md`. +- `memory rem-backfill --path ... --stage-short-term` prépare des candidats durables fondés dans le même magasin de preuves à court terme que celui déjà utilisé par la phase Deep normale. +- `memory rem-backfill --rollback` et `--rollback-short-term` suppriment ces artefacts de remplissage préparés sans toucher aux entrées de journal ordinaires ni au rappel actif à court terme. L’interface Control expose le même flux de remplissage/réinitialisation du journal afin que vous puissiez inspecter -les résultats dans la scène Dreams avant de décider si les candidats ancrés dans les faits -méritent une promotion. La scène affiche aussi une voie ancrée distincte pour que vous puissiez voir -quelles entrées préparées à court terme proviennent d’une relecture historique, quels éléments promus -ont été guidés par des données ancrées dans les faits, et effacer uniquement les entrées préparées ancrées +les résultats dans la scène Dreams avant de décider si les candidats fondés +méritent une promotion. La scène affiche également une voie fondée distincte pour que vous puissiez voir +quelles entrées préparées à court terme proviennent de la relecture historique, quels éléments promus +ont été guidés par du contenu fondé, et effacer uniquement les entrées préparées fondées sans toucher à l’état ordinaire actif à court terme. ## Signaux de classement Deep -Le classement Deep utilise six signaux de base pondérés plus le renforcement de phase : +Le classement Deep utilise six signaux de base pondérés ainsi qu’un renforcement par phase : | Signal | Poids | Description | | ------------------- | ----- | ------------------------------------------------- | | Fréquence | 0.24 | Nombre de signaux à court terme accumulés par l’entrée | | Pertinence | 0.30 | Qualité moyenne de récupération pour l’entrée | -| Diversité des requêtes | 0.15 | Contextes distincts de requête/jour qui l’ont fait apparaître | +| Diversité des requêtes | 0.15 | Contextes distincts de requête/jour qui l’ont fait émerger | | Récence | 0.15 | Score de fraîcheur décroissant avec le temps | | Consolidation | 0.10 | Force de récurrence sur plusieurs jours | | Richesse conceptuelle | 0.06 | Densité des balises de concept à partir de l’extrait/du chemin | -Les occurrences des phases Light et REM ajoutent un petit bonus décroissant avec le temps à partir de +Les occurrences des phases Light et REM ajoutent un faible bonus décroissant avec le temps à partir de `memory/.dreams/phase-signals.json`. ## Planification -Lorsqu’il est activé, `memory-core` gère automatiquement une tâche Cron pour un cycle complet -de Dreaming. Chaque cycle exécute les phases dans l’ordre : light -> REM -> deep. +Lorsqu’il est activé, `memory-core` gère automatiquement une tâche Cron pour un balayage Dreaming complet. Chaque balayage exécute les phases dans l’ordre : light -> REM -> deep. -Comportement de cadence par défaut : +Comportement de cadence par défaut : | Paramètre | Par défaut | | -------------------- | ---------- | @@ -135,7 +133,7 @@ Comportement de cadence par défaut : ## Démarrage rapide -Activer Dreaming : +Activer Dreaming : ```json { @@ -153,7 +151,7 @@ Activer Dreaming : } ``` -Activer Dreaming avec une cadence de cycle personnalisée : +Activer Dreaming avec une cadence de balayage personnalisée : ```json { @@ -184,7 +182,7 @@ Activer Dreaming avec une cadence de cycle personnalisée : ## Flux de travail CLI -Utilisez la promotion CLI pour prévisualiser ou appliquer manuellement : +Utilisez la promotion CLI pour prévisualiser ou appliquer manuellement : ```bash openclaw memory promote @@ -193,10 +191,10 @@ openclaw memory promote --limit 5 openclaw memory status --deep ``` -La commande manuelle `memory promote` utilise par défaut les seuils de la phase Deep, sauf en cas de remplacement +La commande manuelle `memory promote` utilise par défaut les seuils de la phase Deep, sauf remplacement par des indicateurs CLI. -Expliquer pourquoi un candidat spécifique serait ou ne serait pas promu : +Expliquer pourquoi un candidat spécifique serait ou ne serait pas promu : ```bash openclaw memory promote-explain "router vlan" @@ -204,7 +202,7 @@ openclaw memory promote-explain "router vlan" --json ``` Prévisualiser les réflexions REM, les vérités candidates et la sortie de promotion Deep sans -rien écrire : +rien écrire : ```bash openclaw memory rem-harness @@ -220,26 +218,26 @@ Tous les paramètres se trouvent sous `plugins.entries.memory-core.config.dreami | `enabled` | `false` | | `frequency` | `0 3 * * *` | -La politique des phases, les seuils et le comportement de stockage sont des détails -d’implémentation internes (et non une configuration destinée aux utilisateurs). +La politique de phase, les seuils et le comportement de stockage sont des détails d’implémentation +internes (pas une configuration destinée à l’utilisateur). -Voir la [référence de configuration Memory](/fr/reference/memory-config#dreaming-experimental) +Voir la [référence de configuration de la mémoire](/fr/reference/memory-config#dreaming) pour la liste complète des clés. ## Interface Dreams -Lorsqu’il est activé, l’onglet **Dreams** du Gateway affiche : +Lorsqu’il est activé, l’onglet **Dreams** de Gateway affiche : - l’état actuel d’activation de Dreaming -- le statut au niveau des phases et la présence d’un cycle géré -- les nombres d’éléments à court terme, ancrés dans les faits, de signaux et promus aujourd’hui +- l’état au niveau des phases et la présence d’un balayage géré +- les nombres d’éléments à court terme, fondés, de signaux et promus aujourd’hui - l’heure de la prochaine exécution planifiée -- une voie ancrée distincte dans la scène pour les entrées préparées issues d’une relecture historique +- une voie de scène fondée distincte pour les entrées de relecture historique préparées - un lecteur de journal des rêves extensible alimenté par `doctor.memory.dreamDiary` -## Lié +## Liens associés -- [Memory](/fr/concepts/memory) -- [Recherche Memory](/fr/concepts/memory-search) +- [Mémoire](/fr/concepts/memory) +- [Recherche en mémoire](/fr/concepts/memory-search) - [CLI memory](/cli/memory) -- [Référence de configuration Memory](/fr/reference/memory-config) +- [Référence de configuration de la mémoire](/fr/reference/memory-config) diff --git a/docs/fr/concepts/experimental-features.md b/docs/fr/concepts/experimental-features.md new file mode 100644 index 000000000..b5f239768 --- /dev/null +++ b/docs/fr/concepts/experimental-features.md @@ -0,0 +1,54 @@ +--- +read_when: + - Vous voyez une clé de configuration `.experimental` et vous voulez savoir si elle est stable. + - Vous voulez essayer des fonctionnalités d’exécution en préversion sans les confondre avec les valeurs par défaut normales. + - Vous voulez un endroit unique pour trouver les indicateurs expérimentaux actuellement documentés. +summary: Que signifient les indicateurs expérimentaux dans OpenClaw et lesquels sont actuellement documentés ? +title: Fonctionnalités expérimentales +x-i18n: + generated_at: "2026-04-15T14:40:32Z" + model: gpt-5.4 + provider: openai + source_hash: 2d1c7b3d4cd56ef8a0bdab1deb9918e9b2c9a33f956d63193246087f8633dcf3 + source_path: concepts/experimental-features.md + workflow: 15 +--- + +# Fonctionnalités expérimentales + +Les fonctionnalités expérimentales dans OpenClaw sont des **surfaces de préversion activées explicitement**. Elles sont +placées derrière des indicateurs explicites parce qu’elles ont encore besoin d’une utilisation réelle avant de +mériter une valeur par défaut stable ou un contrat public durable. + +Traitez-les différemment d’une configuration normale : + +- Laissez-les **désactivées par défaut** à moins que la documentation associée ne vous dise d’en essayer une. +- Attendez-vous à ce que leur **structure et leur comportement changent** plus rapidement que pour une configuration stable. +- Privilégiez d’abord la voie stable lorsqu’elle existe déjà. +- Si vous déployez OpenClaw à grande échelle, testez les indicateurs expérimentaux dans un environnement plus restreint + avant de les intégrer dans une base de référence partagée. + +## Indicateurs actuellement documentés + +| Surface | Key | Use it when | More | +| ------------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| Environnement d’exécution des modèles locaux | `agents.defaults.experimental.localModelLean` | Un backend local plus petit ou plus strict a du mal avec la surface complète des outils par défaut d’OpenClaw | [Modèles locaux](/fr/gateway/local-models) | +| Recherche en mémoire | `agents.defaults.memorySearch.experimental.sessionMemory` | Vous voulez que `memory_search` indexe les transcriptions des sessions précédentes et acceptez le coût supplémentaire de stockage et d’indexation | [Référence de configuration de la mémoire](/fr/reference/memory-config#session-memory-search-experimental) | +| Outil de planification structurée | `tools.experimental.planTool` | Vous voulez que l’outil structuré `update_plan` soit exposé pour le suivi de travaux en plusieurs étapes dans les environnements d’exécution et interfaces compatibles | [Référence de configuration de la Gateway](/fr/gateway/configuration-reference#toolsexperimental) | + +## Mode allégé pour modèles locaux + +`agents.defaults.experimental.localModelLean: true` est une soupape de sécurité +pour les configurations de modèles locaux plus faibles. Il réduit les outils par défaut lourds comme +`browser`, `cron` et `message` afin que la structure du prompt soit plus petite et moins fragile +pour les backends compatibles OpenAI à petit contexte ou plus stricts. + +Ce n’est intentionnellement **pas** la voie normale. Si votre backend gère correctement l’environnement d’exécution +complet, laissez cette option désactivée. + +## Expérimental ne veut pas dire caché + +Si une fonctionnalité est expérimentale, OpenClaw doit l’indiquer clairement dans la documentation et dans le +chemin de configuration lui-même. En revanche, il ne doit **pas** glisser un comportement de préversion dans un +paramètre qui semble stable et prétendre que c’est normal. C’est comme ça que les surfaces de configuration +deviennent désordonnées. diff --git a/docs/fr/concepts/memory-search.md b/docs/fr/concepts/memory-search.md index 0a4d74d74..376ad9d80 100644 --- a/docs/fr/concepts/memory-search.md +++ b/docs/fr/concepts/memory-search.md @@ -3,31 +3,31 @@ read_when: - Vous voulez comprendre comment fonctionne `memory_search` - Vous voulez choisir un fournisseur d’embeddings - Vous voulez ajuster la qualité de la recherche -summary: Comment la recherche en mémoire trouve des notes pertinentes à l’aide des embeddings et de la récupération hybride -title: Recherche en mémoire +summary: Comment la recherche mémoire trouve des notes pertinentes à l’aide d’embeddings et d’une récupération hybride +title: Recherche mémoire x-i18n: - generated_at: "2026-04-12T23:28:10Z" + generated_at: "2026-04-15T14:40:31Z" model: gpt-5.4 provider: openai - source_hash: 71fde251b7d2dc455574aa458e7e09136f30613609ad8dafeafd53b2729a0310 + source_hash: f5757aa8fe8f7fec30ef5c826f72230f591ce4cad591d81a091189d50d4262ed source_path: concepts/memory-search.md workflow: 15 --- -# Recherche en mémoire +# Recherche mémoire -`memory_search` trouve des notes pertinentes à partir de vos fichiers mémoire, même lorsque la formulation diffère du texte d’origine. Elle fonctionne en indexant la mémoire en petits fragments et en les recherchant à l’aide des embeddings, de mots-clés, ou des deux. +`memory_search` trouve des notes pertinentes à partir de vos fichiers mémoire, même lorsque la formulation diffère du texte d’origine. Il fonctionne en indexant la mémoire en petits segments et en les recherchant à l’aide d’embeddings, de mots-clés, ou des deux. ## Démarrage rapide -Si vous avez une clé API OpenAI, Gemini, Voyage ou Mistral configurée, la recherche en mémoire fonctionne automatiquement. Pour définir explicitement un fournisseur : +Si vous avez un abonnement GitHub Copilot, ou une clé API OpenAI, Gemini, Voyage ou Mistral configurée, la recherche mémoire fonctionne automatiquement. Pour définir explicitement un fournisseur : ```json5 { agents: { defaults: { memorySearch: { - provider: "openai", // or "gemini", "local", "ollama", etc. + provider: "openai", // ou "gemini", "local", "ollama", etc. }, }, }, @@ -38,19 +38,20 @@ Pour des embeddings locaux sans clé API, utilisez `provider: "local"` (nécessi ## Fournisseurs pris en charge -| Fournisseur | ID | Nécessite une clé API | Remarques | -| ----------- | --------- | --------------------- | --------------------------------------------------- | -| OpenAI | `openai` | Oui | Détecté automatiquement, rapide | -| Gemini | `gemini` | Oui | Prend en charge l’indexation d’images et d’audio | -| Voyage | `voyage` | Oui | Détecté automatiquement | -| Mistral | `mistral` | Oui | Détecté automatiquement | -| Bedrock | `bedrock` | Non | Détecté automatiquement lorsque la chaîne d’identifiants AWS est résolue | -| Ollama | `ollama` | Non | Local, doit être défini explicitement | -| Local | `local` | Non | Modèle GGUF, téléchargement d’environ 0,6 Go | +| Fournisseur | ID | Nécessite une clé API | Notes | +| -------------- | ---------------- | --------------------- | ----------------------------------------------------- | +| Bedrock | `bedrock` | Non | Détecté automatiquement lorsque la chaîne d’identifiants AWS est résolue | +| Gemini | `gemini` | Oui | Prend en charge l’indexation d’images et d’audio | +| GitHub Copilot | `github-copilot` | Non | Détecté automatiquement, utilise l’abonnement Copilot | +| Local | `local` | Non | Modèle GGUF, téléchargement d’environ 0,6 Go | +| Mistral | `mistral` | Oui | Détecté automatiquement | +| Ollama | `ollama` | Non | Local, doit être défini explicitement | +| OpenAI | `openai` | Oui | Détecté automatiquement, rapide | +| Voyage | `voyage` | Oui | Détecté automatiquement | ## Fonctionnement de la recherche -OpenClaw exécute deux chemins de récupération en parallèle et fusionne les résultats : +OpenClaw exécute deux chemins de récupération en parallèle et fusionne les résultats : ```mermaid flowchart LR @@ -63,21 +64,20 @@ flowchart LR M --> R["Top Results"] ``` -- **La recherche vectorielle** trouve des notes au sens similaire (« gateway host » correspond à « la machine qui exécute OpenClaw »). +- **La recherche vectorielle** trouve des notes au sens similaire ("gateway host" correspond à "the machine running OpenClaw"). - **La recherche par mots-clés BM25** trouve les correspondances exactes (ID, chaînes d’erreur, clés de configuration). Si un seul chemin est disponible (pas d’embeddings ou pas de FTS), l’autre s’exécute seul. -Lorsque les embeddings ne sont pas disponibles, OpenClaw utilise tout de même un classement lexical sur les résultats FTS au lieu de revenir uniquement à un ordre brut par correspondance exacte. Ce mode dégradé favorise les fragments avec une meilleure couverture des termes de la requête et des chemins de fichiers pertinents, ce qui maintient un bon rappel même sans `sqlite-vec` ni fournisseur d’embeddings. +Lorsque les embeddings ne sont pas disponibles, OpenClaw utilise tout de même un classement lexical sur les résultats FTS au lieu de revenir uniquement à un tri brut par correspondance exacte. Ce mode dégradé met en avant les segments avec une meilleure couverture des termes de la requête et des chemins de fichiers pertinents, ce qui permet de conserver un bon rappel même sans `sqlite-vec` ni fournisseur d’embeddings. ## Améliorer la qualité de la recherche -Deux fonctionnalités optionnelles aident lorsque vous avez un long historique de notes : +Deux fonctionnalités optionnelles aident lorsque vous avez un historique de notes volumineux : ### Décroissance temporelle -Les anciennes notes perdent progressivement du poids dans le classement afin que les informations récentes remontent en premier. -Avec la demi-vie par défaut de 30 jours, une note du mois dernier obtient 50 % de son poids d’origine. Les fichiers persistants comme `MEMORY.md` ne sont jamais affectés par cette décroissance. +Les anciennes notes perdent progressivement du poids dans le classement afin que les informations récentes remontent en premier. Avec la demi-vie par défaut de 30 jours, une note du mois dernier obtient un score égal à 50 % de son poids d’origine. Les fichiers pérennes comme `MEMORY.md` ne sont jamais affectés par cette décroissance. Activez la décroissance temporelle si votre agent a plusieurs mois de notes quotidiennes et que des informations obsolètes continuent de dépasser le contexte récent dans le classement. @@ -85,10 +85,10 @@ Activez la décroissance temporelle si votre agent a plusieurs mois de notes quo ### MMR (diversité) -Réduit les résultats redondants. Si cinq notes mentionnent toutes la même configuration de routeur, MMR garantit que les premiers résultats couvrent différents sujets au lieu de se répéter. +Réduit les résultats redondants. Si cinq notes mentionnent toutes la même configuration de routeur, MMR veille à ce que les premiers résultats couvrent différents sujets au lieu de se répéter. -Activez MMR si `memory_search` continue de renvoyer des extraits presque dupliqués provenant de différentes notes quotidiennes. +Activez MMR si `memory_search` continue de renvoyer des extraits quasi identiques provenant de différentes notes quotidiennes. ### Activer les deux @@ -112,21 +112,21 @@ Activez MMR si `memory_search` continue de renvoyer des extraits presque dupliqu ## Mémoire multimodale -Avec Gemini Embedding 2, vous pouvez indexer des images et des fichiers audio en plus du Markdown. Les requêtes de recherche restent textuelles, mais elles correspondent aussi au contenu visuel et audio. Consultez la [référence de configuration de la mémoire](/fr/reference/memory-config) pour la configuration. +Avec Gemini Embedding 2, vous pouvez indexer des images et des fichiers audio en plus du Markdown. Les requêtes de recherche restent textuelles, mais elles correspondent à du contenu visuel et audio. Consultez la [référence de configuration de la mémoire](/fr/reference/memory-config) pour la configuration. ## Recherche dans la mémoire de session -Vous pouvez éventuellement indexer les transcriptions de session afin que `memory_search` puisse rappeler des conversations précédentes. Cette fonctionnalité est activée sur opt-in via `memorySearch.experimental.sessionMemory`. Consultez la [référence de configuration](/fr/reference/memory-config) pour plus de détails. +Vous pouvez éventuellement indexer les transcriptions de session afin que `memory_search` puisse se souvenir de conversations antérieures. Cette fonctionnalité est optionnelle via `memorySearch.experimental.sessionMemory`. Consultez la [référence de configuration](/fr/reference/memory-config) pour plus de détails. ## Dépannage -**Aucun résultat ?** Exécutez `openclaw memory status` pour vérifier l’index. S’il est vide, exécutez `openclaw memory index --force`. +**Aucun résultat ?** Exécutez `openclaw memory status` pour vérifier l’index. S’il est vide, exécutez `openclaw memory index --force`. -**Seulement des correspondances par mots-clés ?** Il se peut que votre fournisseur d’embeddings ne soit pas configuré. Vérifiez avec `openclaw memory status --deep`. +**Uniquement des correspondances par mot-clé ?** Il se peut que votre fournisseur d’embeddings ne soit pas configuré. Vérifiez avec `openclaw memory status --deep`. -**Le texte CJK est introuvable ?** Reconstruisez l’index FTS avec `openclaw memory index --force`. +**Texte CJK introuvable ?** Reconstruisez l’index FTS avec `openclaw memory index --force`. -## Pour aller plus loin +## Lectures complémentaires - [Active Memory](/fr/concepts/active-memory) -- mémoire de sous-agent pour les sessions de chat interactives - [Mémoire](/fr/concepts/memory) -- disposition des fichiers, backends, outils diff --git a/docs/fr/concepts/memory.md b/docs/fr/concepts/memory.md index 63b2a8b64..c567ef5d9 100644 --- a/docs/fr/concepts/memory.md +++ b/docs/fr/concepts/memory.md @@ -2,82 +2,82 @@ read_when: - Vous voulez comprendre comment fonctionne la mémoire - Vous voulez savoir quels fichiers de mémoire écrire -summary: Comment OpenClaw se souvient des choses d'une session à l'autre -title: Vue d'ensemble de la mémoire +summary: Comment OpenClaw se souvient des choses d’une session à l’autre +title: Vue d’ensemble de la mémoire x-i18n: - generated_at: "2026-04-09T01:27:50Z" + generated_at: "2026-04-15T14:40:30Z" model: gpt-5.4 provider: openai - source_hash: 2fe47910f5bf1c44be379e971c605f1cb3a29befcf2a7ee11fb3833cbe3b9059 + source_hash: ad1adafe1d81f1703d24f48a9c9da2b25a0ebbd4aad4f65d8bde5df78195d55b source_path: concepts/memory.md workflow: 15 --- -# Vue d'ensemble de la mémoire +# Vue d’ensemble de la mémoire -OpenClaw se souvient des choses en écrivant des **fichiers Markdown simples** dans l'espace de travail de votre agent. Le modèle ne « se souvient » que de ce qui est enregistré sur le disque -- il n'y a pas d'état caché. +OpenClaw se souvient des choses en écrivant des **fichiers Markdown simples** dans l’espace de travail de votre agent. Le modèle ne « se souvient » que de ce qui est enregistré sur le disque — il n’y a pas d’état caché. ## Fonctionnement Votre agent dispose de trois fichiers liés à la mémoire : -- **`MEMORY.md`** -- mémoire à long terme. Faits durables, préférences et décisions. Chargé au début de chaque session de message direct. -- **`memory/YYYY-MM-DD.md`** -- notes quotidiennes. Contexte courant et observations. Les notes d'aujourd'hui et d'hier sont chargées automatiquement. -- **`DREAMS.md`** (expérimental, facultatif) -- journal des rêves et résumés des passes de rêverie pour relecture humaine, y compris des entrées de rétrospective historique fondée. +- **`MEMORY.md`** — mémoire à long terme. Faits durables, préférences et décisions. Chargé au début de chaque session de message privé. +- **`memory/YYYY-MM-DD.md`** — notes quotidiennes. Contexte courant et observations. Les notes d’aujourd’hui et d’hier sont chargées automatiquement. +- **`DREAMS.md`** (optionnel) — journal des rêves et résumés des phases de Dreaming pour relecture humaine, y compris les entrées de remplissage rétrospectif ancrées dans l’historique. -Ces fichiers se trouvent dans l'espace de travail de l'agent (par défaut `~/.openclaw/workspace`). +Ces fichiers se trouvent dans l’espace de travail de l’agent (par défaut `~/.openclaw/workspace`). -Si vous voulez que votre agent se souvienne de quelque chose, demandez-le-lui simplement : « Souviens-toi que je préfère TypeScript. » Il l'écrira dans le fichier approprié. +Si vous voulez que votre agent se souvienne de quelque chose, demandez-le-lui simplement : « Souviens-toi que je préfère TypeScript. » Il l’écrira dans le fichier approprié. ## Outils de mémoire -L'agent dispose de deux outils pour travailler avec la mémoire : +L’agent dispose de deux outils pour travailler avec la mémoire : -- **`memory_search`** -- trouve les notes pertinentes à l'aide de la recherche sémantique, même lorsque la formulation diffère de l'original. -- **`memory_get`** -- lit un fichier de mémoire spécifique ou une plage de lignes. +- **`memory_search`** — trouve des notes pertinentes à l’aide de la recherche sémantique, même lorsque la formulation diffère de l’original. +- **`memory_get`** — lit un fichier de mémoire spécifique ou une plage de lignes. -Les deux outils sont fournis par le plugin de mémoire actif (par défaut : `memory-core`). +Ces deux outils sont fournis par le Plugin de mémoire actif (par défaut : `memory-core`). ## Plugin compagnon Memory Wiki -Si vous voulez que la mémoire durable se comporte davantage comme une base de connaissances entretenue que comme de simples notes brutes, utilisez le plugin intégré `memory-wiki`. +Si vous voulez que la mémoire durable se comporte davantage comme une base de connaissances maintenue que comme de simples notes brutes, utilisez le Plugin intégré `memory-wiki`. `memory-wiki` compile les connaissances durables dans un coffre wiki avec : -- une structure de page déterministe +- une structure de pages déterministe - des affirmations et preuves structurées - le suivi des contradictions et de la fraîcheur - des tableaux de bord générés -- des synthèses compilées pour les consommateurs agent/runtime +- des condensés compilés pour les consommateurs agent/runtime - des outils natifs du wiki comme `wiki_search`, `wiki_get`, `wiki_apply` et `wiki_lint` -Il ne remplace pas le plugin de mémoire actif. Le plugin de mémoire actif reste responsable du rappel, de la promotion et de la rêverie. `memory-wiki` ajoute à côté une couche de connaissances riche en provenance. +Il ne remplace pas le Plugin de mémoire actif. Le Plugin de mémoire actif reste responsable du rappel, de la promotion et de Dreaming. `memory-wiki` ajoute à côté une couche de connaissances riche en provenance. Voir [Memory Wiki](/fr/plugins/memory-wiki). -## Recherche dans la mémoire +## Recherche mémoire -Lorsqu'un fournisseur d'embeddings est configuré, `memory_search` utilise une **recherche hybride** -- combinant la similarité vectorielle (sens sémantique) avec la correspondance par mots-clés (termes exacts comme les identifiants et les symboles de code). Cela fonctionne immédiatement dès que vous avez une clé API pour n'importe quel fournisseur pris en charge. +Lorsqu’un fournisseur d’embeddings est configuré, `memory_search` utilise une **recherche hybride** — en combinant similarité vectorielle (sens sémantique) et correspondance par mots-clés (termes exacts comme les ID et les symboles de code). Cela fonctionne immédiatement dès que vous avez une clé API pour n’importe quel fournisseur pris en charge. -OpenClaw détecte automatiquement votre fournisseur d'embeddings à partir des clés API disponibles. Si vous avez configuré une clé OpenAI, Gemini, Voyage ou Mistral, la recherche dans la mémoire est activée automatiquement. +OpenClaw détecte automatiquement votre fournisseur d’embeddings à partir des clés API disponibles. Si vous avez configuré une clé OpenAI, Gemini, Voyage ou Mistral, la recherche mémoire est activée automatiquement. Pour plus de détails sur le fonctionnement de la recherche, les options de réglage et la configuration du fournisseur, voir [Memory Search](/fr/concepts/memory-search). -## Backends de mémoire +## Backends mémoire Basé sur SQLite. Fonctionne immédiatement avec la recherche par mots-clés, la similarité vectorielle et la recherche hybride. Aucune dépendance supplémentaire. -Sidecar local-first avec reranking, expansion de requête et capacité d'indexer des répertoires en dehors de l'espace de travail. +Sidecar local-first avec reranking, expansion de requête et possibilité d’indexer des répertoires en dehors de l’espace de travail. -Mémoire intersession native IA avec modélisation utilisateur, recherche sémantique et prise en compte de plusieurs agents. Installation par plugin. +Mémoire intersession native IA avec modélisation utilisateur, recherche sémantique et conscience multi-agent. Installation par Plugin. @@ -85,53 +85,53 @@ Mémoire intersession native IA avec modélisation utilisateur, recherche séman -Compile la mémoire durable dans un coffre wiki riche en provenance avec affirmations, tableaux de bord, mode pont et workflows compatibles avec Obsidian. +Compile la mémoire durable dans un coffre wiki riche en provenance avec affirmations, tableaux de bord, mode bridge et workflows compatibles avec Obsidian. -## Flush automatique de la mémoire +## Vidage automatique de la mémoire -Avant que la [compaction](/fr/concepts/compaction) résume votre conversation, OpenClaw exécute un tour silencieux qui rappelle à l'agent d'enregistrer le contexte important dans les fichiers de mémoire. Cette option est activée par défaut -- vous n'avez rien à configurer. +Avant que la [Compaction](/fr/concepts/compaction) ne résume votre conversation, OpenClaw exécute un tour silencieux qui rappelle à l’agent d’enregistrer le contexte important dans les fichiers de mémoire. Cette fonctionnalité est activée par défaut — vous n’avez rien à configurer. -Le flush de la mémoire évite la perte de contexte pendant la compaction. Si votre agent a dans la conversation des faits importants qui ne sont pas encore écrits dans un fichier, ils seront enregistrés automatiquement avant que le résumé n'ait lieu. +Le vidage de la mémoire évite la perte de contexte pendant la compaction. Si votre agent a dans la conversation des faits importants qui ne sont pas encore écrits dans un fichier, ils seront enregistrés automatiquement avant que le résumé n’ait lieu. -## Rêverie (expérimental) +## Dreaming -La rêverie est une passe de consolidation en arrière-plan facultative pour la mémoire. Elle collecte des signaux à court terme, évalue les candidats et ne promeut que les éléments qualifiés dans la mémoire à long terme (`MEMORY.md`). +Dreaming est une passe optionnelle de consolidation en arrière-plan pour la mémoire. Elle collecte les signaux à court terme, évalue les candidats et ne promeut dans la mémoire à long terme (`MEMORY.md`) que les éléments qualifiés. Elle est conçue pour maintenir un signal élevé dans la mémoire à long terme : -- **Option d'activation** : désactivée par défaut. -- **Planifiée** : lorsqu'elle est activée, `memory-core` gère automatiquement une tâche cron récurrente pour une passe complète de rêverie. -- **Avec seuils** : les promotions doivent franchir des seuils de score, de fréquence de rappel et de diversité des requêtes. +- **Opt-in** : désactivée par défaut. +- **Planifiée** : lorsqu’elle est activée, `memory-core` gère automatiquement une tâche Cron récurrente pour une phase complète de Dreaming. +- **À seuil** : les promotions doivent franchir des seuils de score, de fréquence de rappel et de diversité des requêtes. - **Révisable** : les résumés de phase et les entrées du journal sont écrits dans `DREAMS.md` pour relecture humaine. -Pour le comportement des phases, les signaux de score et les détails du journal des rêves, voir [Dreaming (experimental)](/fr/concepts/dreaming). +Pour le comportement des phases, les signaux de score et les détails du journal des rêves, voir [Dreaming](/fr/concepts/dreaming). -## Rétrospective fondée et promotion en direct +## Remplissage rétrospectif ancré dans l’historique et promotion en direct -Le système de rêverie possède désormais deux voies de relecture étroitement liées : +Le système de Dreaming dispose désormais de deux voies de relecture étroitement liées : -- **La rêverie en direct** fonctionne à partir du stockage de rêverie à court terme sous `memory/.dreams/` et c'est ce que la phase profonde normale utilise pour décider ce qui peut être promu dans `MEMORY.md`. -- **La rétrospective fondée** lit les notes historiques `memory/YYYY-MM-DD.md` comme des fichiers de jour autonomes et écrit une sortie de relecture structurée dans `DREAMS.md`. +- **Le Dreaming en direct** fonctionne à partir du magasin de Dreaming à court terme situé dans `memory/.dreams/` et correspond à ce que la phase profonde normale utilise pour décider de ce qui peut être promu dans `MEMORY.md`. +- **Le remplissage rétrospectif ancré dans l’historique** lit les anciennes notes `memory/YYYY-MM-DD.md` comme des fichiers journaliers autonomes et écrit une sortie de relecture structurée dans `DREAMS.md`. -La rétrospective fondée est utile lorsque vous voulez rejouer d'anciennes notes et examiner ce que le système considère comme durable sans modifier manuellement `MEMORY.md`. +Le remplissage rétrospectif ancré dans l’historique est utile lorsque vous voulez rejouer d’anciennes notes et examiner ce que le système considère comme durable sans modifier manuellement `MEMORY.md`. -Lorsque vous utilisez : +Quand vous utilisez : ```bash openclaw memory rem-backfill --path ./memory --stage-short-term ``` -les candidats durables fondés ne sont pas promus directement. Ils sont préparés dans le même stockage de rêverie à court terme que la phase profonde normale utilise déjà. Cela signifie : +les candidats durables ancrés dans l’historique ne sont pas promus directement. Ils sont placés dans le même magasin de Dreaming à court terme que celui déjà utilisé par la phase profonde normale. Cela signifie que : - `DREAMS.md` reste la surface de relecture humaine. -- le stockage à court terme reste la surface de classement orientée machine. -- `MEMORY.md` n'est toujours écrit que par la promotion profonde. +- le magasin à court terme reste la surface de classement orientée machine. +- `MEMORY.md` n’est toujours écrit que par la promotion profonde. -Si vous décidez que la relecture n'était pas utile, vous pouvez supprimer les artefacts préparés sans toucher aux entrées de journal ordinaires ni à l'état normal de rappel : +Si vous décidez que la relecture n’était pas utile, vous pouvez supprimer les artefacts mis en attente sans toucher aux entrées ordinaires du journal ni à l’état normal de rappel : ```bash openclaw memory rem-backfill --rollback @@ -141,19 +141,19 @@ openclaw memory rem-backfill --rollback-short-term ## CLI ```bash -openclaw memory status # Vérifier l'état de l'index et le fournisseur +openclaw memory status # Vérifier l’état de l’index et le fournisseur openclaw memory search "query" # Rechercher depuis la ligne de commande -openclaw memory index --force # Reconstruire l'index +openclaw memory index --force # Reconstruire l’index ``` ## Pour aller plus loin -- [Builtin Memory Engine](/fr/concepts/memory-builtin) -- backend SQLite par défaut -- [QMD Memory Engine](/fr/concepts/memory-qmd) -- sidecar local-first avancé -- [Honcho Memory](/fr/concepts/memory-honcho) -- mémoire intersession native IA -- [Memory Wiki](/fr/plugins/memory-wiki) -- coffre de connaissances compilé et outils natifs du wiki -- [Memory Search](/fr/concepts/memory-search) -- pipeline de recherche, fournisseurs et réglages -- [Dreaming (experimental)](/fr/concepts/dreaming) -- promotion en arrière-plan +- [Builtin Memory Engine](/fr/concepts/memory-builtin) — backend SQLite par défaut +- [QMD Memory Engine](/fr/concepts/memory-qmd) — sidecar avancé local-first +- [Honcho Memory](/fr/concepts/memory-honcho) — mémoire intersession native IA +- [Memory Wiki](/fr/plugins/memory-wiki) — coffre de connaissances compilé et outils natifs du wiki +- [Memory Search](/fr/concepts/memory-search) — pipeline de recherche, fournisseurs et réglages +- [Dreaming](/fr/concepts/dreaming) — promotion en arrière-plan du rappel à court terme vers la mémoire à long terme -- [Référence de configuration de la mémoire](/fr/reference/memory-config) -- tous les paramètres de configuration -- [Compaction](/fr/concepts/compaction) -- comment la compaction interagit avec la mémoire +- [Référence de configuration de la mémoire](/fr/reference/memory-config) — tous les paramètres de configuration +- [Compaction](/fr/concepts/compaction) — comment la compaction interagit avec la mémoire diff --git a/docs/fr/gateway/configuration-reference.md b/docs/fr/gateway/configuration-reference.md index b542e2b47..b57c7e9b9 100644 --- a/docs/fr/gateway/configuration-reference.md +++ b/docs/fr/gateway/configuration-reference.md @@ -1,35 +1,35 @@ --- read_when: - - Vous avez besoin de la sémantique exacte de la configuration au niveau des champs ou des valeurs par défaut - - Vous validez des blocs de configuration de canal, de modèle, de passerelle ou d’outil -summary: Référence de configuration de la passerelle pour les clés, les valeurs par défaut et les liens vers les références dédiées des sous-systèmes principaux d’OpenClaw + - Vous avez besoin de la sémantique exacte de la configuration au niveau des champs ou des valeurs par défaut. + - Vous validez des blocs de configuration de canal, de modèle, de Gateway ou d’outil. +summary: Référence de configuration du Gateway pour les clés principales d’OpenClaw, les valeurs par défaut et les liens vers les références dédiées des sous-systèmes title: Référence de configuration x-i18n: - generated_at: "2026-04-11T15:16:00Z" + generated_at: "2026-04-15T14:40:31Z" model: gpt-5.4 provider: openai - source_hash: 351a245bed59d852ea8582e4e9fec5017a5c623cd6f0034766cdea1b5330be3c + source_hash: 7a4da3b41d0304389bd6359aac1185c231e529781b607656ab352f8a8104bdba source_path: gateway/configuration-reference.md workflow: 15 --- # Référence de configuration -Référence de configuration principale pour `~/.openclaw/openclaw.json`. Pour une vue d’ensemble orientée tâches, consultez [Configuration](/fr/gateway/configuration). +Référence de configuration principale pour `~/.openclaw/openclaw.json`. Pour une vue d’ensemble orientée tâches, voir [Configuration](/fr/gateway/configuration). -Cette page couvre les principales surfaces de configuration d’OpenClaw et renvoie vers d’autres pages lorsqu’un sous-système dispose de sa propre référence plus détaillée. Elle **n’essaie pas** d’inclure sur une seule page chaque catalogue de commandes détenu par un canal/plugin ni chaque paramètre avancé de mémoire/QMD. +Cette page couvre les principales surfaces de configuration d’OpenClaw et renvoie vers d’autres pages lorsqu’un sous-système dispose de sa propre référence plus détaillée. Elle **n’essaie pas** d’intégrer sur une seule page l’intégralité du catalogue de commandes propre à chaque canal/Plugin, ni tous les réglages avancés de mémoire/QMD. -Source de vérité du code : +Source de vérité du code : -- `openclaw config schema` affiche le schéma JSON actif utilisé pour la validation et l’interface de contrôle, avec les métadonnées fusionnées des bundles/plugins/canaux lorsqu’elles sont disponibles +- `openclaw config schema` affiche le schéma JSON actif utilisé pour la validation et l’interface de contrôle, avec les métadonnées fusionnées des bundles/Plugins/canaux lorsqu’elles sont disponibles - `config.schema.lookup` renvoie un nœud de schéma limité à un chemin pour les outils d’exploration détaillée -- `pnpm config:docs:check` / `pnpm config:docs:gen` valident le hash de référence de la documentation de configuration par rapport à la surface actuelle du schéma +- `pnpm config:docs:check` / `pnpm config:docs:gen` valident le hash de référence des docs de configuration par rapport à la surface de schéma actuelle -Références détaillées dédiées : +Références détaillées dédiées : -- [Référence de configuration de la mémoire](/fr/reference/memory-config) pour `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` et la configuration de rêverie sous `plugins.entries.memory-core.config.dreaming` -- [Commandes slash](/fr/tools/slash-commands) pour le catalogue actuel des commandes intégrées + groupées -- pages du canal/plugin propriétaire pour les surfaces de commandes spécifiques aux canaux +- [Référence de configuration de la mémoire](/fr/reference/memory-config) pour `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` et la configuration de Dreaming sous `plugins.entries.memory-core.config.dreaming` +- [Commandes slash](/fr/tools/slash-commands) pour le catalogue actuel des commandes intégrées + bundle +- pages du canal/Plugin propriétaire pour les surfaces de commandes spécifiques à un canal Le format de configuration est **JSON5** (commentaires + virgules finales autorisés). Tous les champs sont facultatifs — OpenClaw utilise des valeurs par défaut sûres lorsqu’ils sont omis. @@ -39,16 +39,16 @@ Le format de configuration est **JSON5** (commentaires + virgules finales autori Chaque canal démarre automatiquement lorsque sa section de configuration existe (sauf si `enabled: false`). -### Accès aux messages privés et aux groupes +### Accès DM et groupe -Tous les canaux prennent en charge des politiques de messages privés et des politiques de groupe : +Tous les canaux prennent en charge des politiques pour les DM et des politiques pour les groupes : | Politique DM | Comportement | | -------------------- | -------------------------------------------------------------- | -| `pairing` (par défaut) | Les expéditeurs inconnus reçoivent un code d’appairage à usage unique ; le propriétaire doit approuver | +| `pairing` (par défaut) | Les expéditeurs inconnus reçoivent un code d’appairage à usage unique ; le propriétaire doit approuver | | `allowlist` | Uniquement les expéditeurs dans `allowFrom` (ou le stockage d’autorisations appairées) | -| `open` | Autoriser tous les messages privés entrants (nécessite `allowFrom: ["*"]`) | -| `disabled` | Ignorer tous les messages privés entrants | +| `open` | Autoriser tous les DM entrants (nécessite `allowFrom: ["*"]`) | +| `disabled` | Ignorer tous les DM entrants | | Politique de groupe | Comportement | | ---------------------- | ------------------------------------------------------ | @@ -59,12 +59,12 @@ Tous les canaux prennent en charge des politiques de messages privés et des pol `channels.defaults.groupPolicy` définit la valeur par défaut lorsque le `groupPolicy` d’un fournisseur n’est pas défini. Les codes d’appairage expirent après 1 heure. Les demandes d’appairage DM en attente sont limitées à **3 par canal**. -Si un bloc de fournisseur est entièrement absent (`channels.` absent), la politique de groupe à l’exécution revient à `allowlist` (échec fermé) avec un avertissement au démarrage. +Si un bloc de fournisseur est entièrement absent (`channels.` absent), la politique de groupe d’exécution revient à `allowlist` (échec fermé) avec un avertissement au démarrage. ### Remplacements de modèle par canal -Utilisez `channels.modelByChannel` pour épingler des ID de canal spécifiques à un modèle. Les valeurs acceptent `provider/model` ou des alias de modèles configurés. Le mappage de canal s’applique lorsqu’une session n’a pas déjà un remplacement de modèle (par exemple, défini via `/model`). +Utilisez `channels.modelByChannel` pour épingler des ID de canal spécifiques à un modèle. Les valeurs acceptent `provider/model` ou des alias de modèle configurés. Le mapping de canal s’applique lorsqu’une session n’a pas déjà de remplacement de modèle (par exemple défini via `/model`). ```json5 { @@ -85,9 +85,9 @@ Utilisez `channels.modelByChannel` pour épingler des ID de canal spécifiques } ``` -### Valeurs par défaut des canaux et heartbeat +### Valeurs par défaut des canaux et Heartbeat -Utilisez `channels.defaults` pour le comportement partagé de politique de groupe et de heartbeat entre les fournisseurs : +Utilisez `channels.defaults` pour le comportement partagé de politique de groupe et de Heartbeat entre les fournisseurs : ```json5 { @@ -105,15 +105,15 @@ Utilisez `channels.defaults` pour le comportement partagé de politique de group } ``` -- `channels.defaults.groupPolicy` : politique de groupe de secours lorsqu’un `groupPolicy` au niveau du fournisseur n’est pas défini. -- `channels.defaults.contextVisibility` : mode de visibilité du contexte supplémentaire par défaut pour tous les canaux. Valeurs : `all` (par défaut, inclure tout le contexte cité/de fil/d’historique), `allowlist` (inclure uniquement le contexte provenant d’expéditeurs autorisés), `allowlist_quote` (identique à allowlist mais conserve le contexte explicite de citation/réponse). Remplacement par canal : `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk` : inclure les états des canaux en bonne santé dans la sortie de heartbeat. -- `channels.defaults.heartbeat.showAlerts` : inclure les états dégradés/en erreur dans la sortie de heartbeat. -- `channels.defaults.heartbeat.useIndicator` : afficher une sortie de heartbeat compacte de type indicateur. +- `channels.defaults.groupPolicy` : politique de groupe de repli lorsqu’un `groupPolicy` au niveau du fournisseur n’est pas défini. +- `channels.defaults.contextVisibility` : mode par défaut de visibilité du contexte supplémentaire pour tous les canaux. Valeurs : `all` (par défaut, inclure tout le contexte cité/de fil/d’historique), `allowlist` (inclure uniquement le contexte des expéditeurs autorisés), `allowlist_quote` (identique à allowlist mais conserve le contexte explicite de citation/réponse). Remplacement par canal : `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk` : inclure les statuts de canaux sains dans la sortie du Heartbeat. +- `channels.defaults.heartbeat.showAlerts` : inclure les statuts dégradés/en erreur dans la sortie du Heartbeat. +- `channels.defaults.heartbeat.useIndicator` : afficher une sortie de Heartbeat compacte de type indicateur. ### WhatsApp -WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre automatiquement lorsqu’une session liée existe. +WhatsApp s’exécute via le canal web du Gateway (Baileys Web). Il démarre automatiquement lorsqu’une session liée existe. ```json5 { @@ -164,10 +164,10 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre } ``` -- Les commandes sortantes utilisent par défaut le compte `default` s’il est présent ; sinon, le premier ID de compte configuré (trié). -- `channels.whatsapp.defaultAccount` facultatif remplace cette sélection de compte par défaut de secours lorsqu’il correspond à un ID de compte configuré. -- L’ancien répertoire d’authentification Baileys mono-compte est migré par `openclaw doctor` vers `whatsapp/default`. -- Remplacements par compte : `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Les commandes sortantes utilisent par défaut le compte `default` s’il est présent ; sinon, le premier ID de compte configuré (trié). +- `channels.whatsapp.defaultAccount` facultatif remplace cette sélection du compte par défaut de repli lorsqu’il correspond à un ID de compte configuré. +- L’ancien répertoire d’authentification Baileys à compte unique est migré par `openclaw doctor` vers `whatsapp/default`. +- Remplacements par compte : `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -225,13 +225,13 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre } ``` -- Jeton du bot : `channels.telegram.botToken` ou `channels.telegram.tokenFile` (fichier standard uniquement ; les liens symboliques sont refusés), avec `TELEGRAM_BOT_TOKEN` comme solution de secours pour le compte par défaut. +- Jeton du bot : `channels.telegram.botToken` ou `channels.telegram.tokenFile` (fichier classique uniquement ; les liens symboliques sont rejetés), avec `TELEGRAM_BOT_TOKEN` comme repli pour le compte par défaut. - `channels.telegram.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. -- Dans les configurations multi-comptes (2 ID de compte ou plus), définissez une valeur par défaut explicite (`channels.telegram.defaultAccount` ou `channels.telegram.accounts.default`) pour éviter le routage de secours ; `openclaw doctor` avertit lorsque cette valeur manque ou est invalide. -- `configWrites: false` bloque les écritures de configuration initiées depuis Telegram (migrations d’ID de supergroupe, `/config set|unset`). -- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` configurent des liaisons ACP persistantes pour les sujets de forum (utilisez le `chatId:topic:topicId` canonique dans `match.peer.id`). La sémantique des champs est partagée dans [Agents ACP](/fr/tools/acp-agents#channel-specific-settings). +- Dans les configurations multi-comptes (2 ID de compte ou plus), définissez une valeur par défaut explicite (`channels.telegram.defaultAccount` ou `channels.telegram.accounts.default`) pour éviter le routage de repli ; `openclaw doctor` émet un avertissement lorsque cela est manquant ou invalide. +- `configWrites: false` bloque les écritures de configuration initiées par Telegram (migrations d’ID de supergroupe, `/config set|unset`). +- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` configurent des liaisons ACP persistantes pour les sujets de forum (utilisez le format canonique `chatId:topic:topicId` dans `match.peer.id`). La sémantique des champs est partagée dans [ACP Agents](/fr/tools/acp-agents#channel-specific-settings). - Les aperçus de flux Telegram utilisent `sendMessage` + `editMessageText` (fonctionne dans les discussions directes et de groupe). -- Politique de nouvelle tentative : voir [Politique de nouvelle tentative](/fr/concepts/retry). +- Politique de nouvelle tentative : voir [Politique de nouvelle tentative](/fr/concepts/retry). ### Discord @@ -333,36 +333,36 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre } ``` -- Jeton : `channels.discord.token`, avec `DISCORD_BOT_TOKEN` comme solution de secours pour le compte par défaut. -- Les appels sortants directs qui fournissent un `token` Discord explicite utilisent ce jeton pour l’appel ; les paramètres de nouvelle tentative/politique du compte proviennent toujours du compte sélectionné dans l’instantané actif à l’exécution. +- Jeton : `channels.discord.token`, avec `DISCORD_BOT_TOKEN` comme repli pour le compte par défaut. +- Les appels sortants directs qui fournissent un `token` Discord explicite utilisent ce jeton pour l’appel ; les paramètres de nouvelle tentative/politique du compte proviennent toujours du compte sélectionné dans l’instantané d’exécution actif. - `channels.discord.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. -- Utilisez `user:` (DM) ou `channel:` (canal de serveur) pour les cibles de livraison ; les ID numériques seuls sont refusés. -- Les slugs de serveur sont en minuscules avec les espaces remplacés par `-` ; les clés de canal utilisent le nom converti en slug (sans `#`). Préférez les ID de serveur. -- Les messages rédigés par des bots sont ignorés par défaut. `allowBots: true` les active ; utilisez `allowBots: "mentions"` pour n’accepter que les messages de bots qui mentionnent le bot (les propres messages restent filtrés). -- `channels.discord.guilds..ignoreOtherMentions` (et les remplacements au niveau du canal) ignore les messages qui mentionnent un autre utilisateur ou rôle mais pas le bot (à l’exclusion de @everyone/@here). -- `maxLinesPerMessage` (17 par défaut) découpe les messages hauts même lorsqu’ils sont inférieurs à 2000 caractères. -- `channels.discord.threadBindings` contrôle le routage lié aux fils Discord : - - `enabled` : remplacement Discord pour les fonctionnalités de session liées aux fils (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` et la livraison/le routage liés) - - `idleHours` : remplacement Discord pour le retrait automatique du focus après inactivité en heures (`0` désactive) - - `maxAgeHours` : remplacement Discord pour l’âge maximal strict en heures (`0` désactive) - - `spawnSubagentSessions` : option d’activation pour la création/liaison automatique de fil par `sessions_spawn({ thread: true })` -- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` configurent des liaisons ACP persistantes pour les canaux et les fils (utilisez l’ID du canal/fil dans `match.peer.id`). La sémantique des champs est partagée dans [Agents ACP](/fr/tools/acp-agents#channel-specific-settings). -- `channels.discord.ui.components.accentColor` définit la couleur d’accent pour les conteneurs de composants v2 Discord. -- `channels.discord.voice` active les conversations dans les canaux vocaux Discord ainsi que les remplacements facultatifs d’auto-jonction + TTS. +- Utilisez `user:` (DM) ou `channel:` (canal de guilde) pour les cibles de livraison ; les ID numériques bruts sont rejetés. +- Les slugs de guilde sont en minuscules avec les espaces remplacés par `-` ; les clés de canal utilisent le nom slugifié (sans `#`). Préférez les ID de guilde. +- Les messages rédigés par des bots sont ignorés par défaut. `allowBots: true` les active ; utilisez `allowBots: "mentions"` pour n’accepter que les messages de bot qui mentionnent le bot (les propres messages restent filtrés). +- `channels.discord.guilds..ignoreOtherMentions` (et les remplacements au niveau du canal) supprime les messages qui mentionnent un autre utilisateur ou rôle mais pas le bot (à l’exclusion de @everyone/@here). +- `maxLinesPerMessage` (17 par défaut) découpe les messages hauts même lorsqu’ils font moins de 2000 caractères. +- `channels.discord.threadBindings` contrôle le routage lié aux fils Discord : + - `enabled` : remplacement Discord pour les fonctionnalités de session liées aux fils (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, ainsi que la livraison/le routage liés) + - `idleHours` : remplacement Discord pour le retrait automatique du focus après inactivité, en heures (`0` désactive) + - `maxAgeHours` : remplacement Discord pour l’âge maximal strict en heures (`0` désactive) + - `spawnSubagentSessions` : option d’activation pour la création/la liaison automatiques de fils avec `sessions_spawn({ thread: true })` +- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` configurent des liaisons ACP persistantes pour les canaux et les fils (utilisez l’ID du canal/fil dans `match.peer.id`). La sémantique des champs est partagée dans [ACP Agents](/fr/tools/acp-agents#channel-specific-settings). +- `channels.discord.ui.components.accentColor` définit la couleur d’accentuation pour les conteneurs Discord components v2. +- `channels.discord.voice` active les conversations dans les canaux vocaux Discord ainsi que les remplacements facultatifs d’auto-jonction et de TTS. - `channels.discord.voice.daveEncryption` et `channels.discord.voice.decryptionFailureTolerance` sont transmis aux options DAVE de `@discordjs/voice` (`true` et `24` par défaut). -- OpenClaw tente en plus une récupération de réception vocale en quittant/rejoignant une session vocale après des échecs répétés de déchiffrement. +- OpenClaw tente également une récupération de la réception vocale en quittant puis en rejoignant à nouveau une session vocale après des échecs répétés de déchiffrement. - `channels.discord.streaming` est la clé canonique du mode de flux. Les anciennes valeurs `streamMode` et booléennes `streaming` sont migrées automatiquement. -- `channels.discord.autoPresence` mappe la disponibilité d’exécution sur la présence du bot (sain => online, dégradé => idle, épuisé => dnd) et autorise des remplacements facultatifs du texte d’état. -- `channels.discord.dangerouslyAllowNameMatching` réactive la correspondance par nom/tag modifiable (mode de compatibilité de secours). -- `channels.discord.execApprovals` : livraison native Discord des approbations d’exécution et autorisation des approbateurs. - - `enabled` : `true`, `false` ou `"auto"` (par défaut). En mode auto, les approbations d’exécution s’activent lorsque les approbateurs peuvent être résolus à partir de `approvers` ou `commands.ownerAllowFrom`. - - `approvers` : ID d’utilisateurs Discord autorisés à approuver les demandes d’exécution. Revient à `commands.ownerAllowFrom` lorsqu’il est omis. - - `agentFilter` : liste d’autorisations facultative d’ID d’agent. Omettez-la pour transférer les approbations pour tous les agents. - - `sessionFilter` : motifs facultatifs de clé de session (sous-chaîne ou regex). - - `target` : emplacement d’envoi des invites d’approbation. `"dm"` (par défaut) envoie vers les DM des approbateurs, `"channel"` envoie vers le canal d’origine, `"both"` envoie vers les deux. Lorsque la cible inclut `"channel"`, les boutons ne sont utilisables que par les approbateurs résolus. - - `cleanupAfterResolve` : lorsque défini à `true`, supprime les DM d’approbation après approbation, refus ou expiration. +- `channels.discord.autoPresence` mappe la disponibilité d’exécution à la présence du bot (healthy => online, degraded => idle, exhausted => dnd) et autorise des remplacements facultatifs du texte de statut. +- `channels.discord.dangerouslyAllowNameMatching` réactive la correspondance par nom/tag mutable (mode de compatibilité d’urgence). +- `channels.discord.execApprovals` : livraison d’approbation exec native à Discord et autorisation des approbateurs. + - `enabled` : `true`, `false` ou `"auto"` (par défaut). En mode auto, les approbations exec s’activent lorsque les approbateurs peuvent être résolus à partir de `approvers` ou `commands.ownerAllowFrom`. + - `approvers` : ID d’utilisateurs Discord autorisés à approuver les requêtes exec. Revient à `commands.ownerAllowFrom` lorsqu’il est omis. + - `agentFilter` : liste d’autorisations facultative d’ID d’agents. Omettez-le pour transférer les approbations pour tous les agents. + - `sessionFilter` : motifs facultatifs de clé de session (sous-chaîne ou regex). + - `target` : emplacement d’envoi des invites d’approbation. `"dm"` (par défaut) les envoie aux DM des approbateurs, `"channel"` les envoie au canal d’origine, `"both"` les envoie aux deux. Lorsque la cible inclut `"channel"`, les boutons ne peuvent être utilisés que par les approbateurs résolus. + - `cleanupAfterResolve` : lorsqu’il vaut `true`, supprime les DM d’approbation après approbation, refus ou expiration. -**Modes de notification des réactions :** `off` (aucun), `own` (messages du bot, par défaut), `all` (tous les messages), `allowlist` (depuis `guilds..users` sur tous les messages). +**Modes de notification de réaction :** `off` (aucun), `own` (messages du bot, par défaut), `all` (tous les messages), `allowlist` (depuis `guilds..users` sur tous les messages). ### Google Chat @@ -393,11 +393,11 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre } ``` -- JSON du compte de service : en ligne (`serviceAccount`) ou via fichier (`serviceAccountFile`). -- SecretRef de compte de service également pris en charge (`serviceAccountRef`). -- Solutions de secours d’environnement : `GOOGLE_CHAT_SERVICE_ACCOUNT` ou `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- JSON du compte de service : inline (`serviceAccount`) ou basé sur un fichier (`serviceAccountFile`). +- Le SecretRef du compte de service est également pris en charge (`serviceAccountRef`). +- Variables d’environnement de repli : `GOOGLE_CHAT_SERVICE_ACCOUNT` ou `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Utilisez `spaces/` ou `users/` pour les cibles de livraison. -- `channels.googlechat.dangerouslyAllowNameMatching` réactive la correspondance par principal d’e-mail modifiable (mode de compatibilité de secours). +- `channels.googlechat.dangerouslyAllowNameMatching` réactive la correspondance mutable du principal d’e-mail (mode de compatibilité d’urgence). ### Slack @@ -464,34 +464,34 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre } ``` -- Le **mode socket** nécessite à la fois `botToken` et `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` comme solutions de secours d’environnement du compte par défaut). +- Le **mode Socket** nécessite à la fois `botToken` et `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` pour le repli d’environnement du compte par défaut). - Le **mode HTTP** nécessite `botToken` plus `signingSecret` (à la racine ou par compte). - `botToken`, `appToken`, `signingSecret` et `userToken` acceptent des chaînes en texte brut ou des objets SecretRef. -- Les instantanés de compte Slack exposent des champs par identifiant d’authentification tels que `botTokenSource`, `botTokenStatus`, `appTokenStatus` et, en mode HTTP, `signingSecretStatus`. `configured_unavailable` signifie que le compte est configuré via SecretRef mais que le chemin actuel de commande/d’exécution n’a pas pu résoudre la valeur du secret. -- `configWrites: false` bloque les écritures de configuration initiées depuis Slack. +- Les instantanés de compte Slack exposent des champs de source/statut par identifiant, tels que `botTokenSource`, `botTokenStatus`, `appTokenStatus` et, en mode HTTP, `signingSecretStatus`. `configured_unavailable` signifie que le compte est configuré via SecretRef, mais que le chemin actuel de commande/d’exécution n’a pas pu résoudre la valeur du secret. +- `configWrites: false` bloque les écritures de configuration initiées par Slack. - `channels.slack.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. -- `channels.slack.streaming.mode` est la clé canonique du mode de flux Slack. `channels.slack.streaming.nativeTransport` contrôle le transport natif de flux de Slack. Les anciennes valeurs `streamMode`, booléennes `streaming` et `nativeStreaming` sont migrées automatiquement. +- `channels.slack.streaming.mode` est la clé canonique du mode de flux Slack. `channels.slack.streaming.nativeTransport` contrôle le transport de streaming natif de Slack. Les anciennes valeurs `streamMode`, booléennes `streaming` et `nativeStreaming` sont migrées automatiquement. - Utilisez `user:` (DM) ou `channel:` pour les cibles de livraison. -**Modes de notification des réactions :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). +**Modes de notification de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). -**Isolation des sessions de fil :** `thread.historyScope` est par fil (par défaut) ou partagé sur le canal. `thread.inheritParent` copie la transcription du canal parent vers les nouveaux fils. +**Isolation de session de fil :** `thread.historyScope` est par fil (par défaut) ou partagé à l’échelle du canal. `thread.inheritParent` copie la transcription du canal parent dans les nouveaux fils. -- Le flux natif Slack ainsi que l’état de fil Slack de type assistant « is typing... » nécessitent une cible de réponse dans un fil. Les DM de niveau supérieur restent hors fil par défaut ; ils utilisent donc `typingReaction` ou la livraison normale au lieu de l’aperçu de type fil. -- `typingReaction` ajoute une réaction temporaire au message Slack entrant pendant l’exécution d’une réponse, puis la supprime à la fin. Utilisez un shortcode d’emoji Slack tel que `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals` : livraison native Slack des approbations d’exécution et autorisation des approbateurs. Même schéma que Discord : `enabled` (`true`/`false`/`"auto"`), `approvers` (ID d’utilisateurs Slack), `agentFilter`, `sessionFilter` et `target` (`"dm"`, `"channel"` ou `"both"`). +- Le streaming natif Slack ainsi que le statut de fil Slack de type assistant « is typing... » nécessitent une cible de réponse en fil. Les DM de niveau supérieur restent hors fil par défaut ; ils utilisent donc `typingReaction` ou la livraison normale au lieu de l’aperçu de type fil. +- `typingReaction` ajoute une réaction temporaire au message Slack entrant pendant qu’une réponse est en cours, puis la supprime à la fin. Utilisez un shortcode d’emoji Slack tel que `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals` : livraison d’approbation exec native à Slack et autorisation des approbateurs. Même schéma que Discord : `enabled` (`true`/`false`/`"auto"`), `approvers` (ID d’utilisateurs Slack), `agentFilter`, `sessionFilter` et `target` (`"dm"`, `"channel"` ou `"both"`). | Groupe d’actions | Par défaut | Notes | | ---------------- | ---------- | ------------------------ | | reactions | activé | Réagir + lister les réactions | | messages | activé | Lire/envoyer/modifier/supprimer | | pins | activé | Épingler/désépingler/lister | -| memberInfo | activé | Informations sur les membres | -| emojiList | activé | Liste des emoji personnalisés | +| memberInfo | activé | Informations de membre | +| emojiList | activé | Liste d’emoji personnalisés | ### Mattermost -Mattermost est fourni comme plugin : `openclaw plugins install @openclaw/mattermost`. +Mattermost est fourni comme Plugin : `openclaw plugins install @openclaw/mattermost`. ```json5 { @@ -521,17 +521,17 @@ Mattermost est fourni comme plugin : `openclaw plugins install @openclaw/matterm } ``` -Modes de discussion : `oncall` (répond sur @-mention, par défaut), `onmessage` (chaque message), `onchar` (messages commençant par un préfixe déclencheur). +Modes de chat : `oncall` (répond sur @-mention, par défaut), `onmessage` (chaque message), `onchar` (messages commençant par un préfixe de déclenchement). -Lorsque les commandes natives Mattermost sont activées : +Lorsque les commandes natives Mattermost sont activées : -- `commands.callbackPath` doit être un chemin (par exemple `/api/channels/mattermost/command`), et non une URL complète. -- `commands.callbackUrl` doit résoudre vers le point de terminaison de la passerelle OpenClaw et être accessible depuis le serveur Mattermost. -- Les rappels slash natifs sont authentifiés avec les jetons par commande renvoyés par Mattermost lors de l’enregistrement des commandes slash. Si l’enregistrement échoue ou si aucune commande n’est activée, OpenClaw rejette les rappels avec `Unauthorized: invalid command token.` -- Pour les hôtes de rappel privés/tailnet/internes, Mattermost peut exiger que `ServiceSettings.AllowedUntrustedInternalConnections` inclue l’hôte/domaine de rappel. Utilisez des valeurs d’hôte/domaine, pas des URL complètes. -- `channels.mattermost.configWrites` : autoriser ou refuser les écritures de configuration initiées depuis Mattermost. -- `channels.mattermost.requireMention` : exiger une `@mention` avant de répondre dans les canaux. -- `channels.mattermost.groups..requireMention` : remplacement par canal du filtrage par mention (`"*"` pour la valeur par défaut). +- `commands.callbackPath` doit être un chemin (par exemple `/api/channels/mattermost/command`), pas une URL complète. +- `commands.callbackUrl` doit se résoudre vers le point de terminaison du Gateway OpenClaw et être accessible depuis le serveur Mattermost. +- Les callbacks slash natifs sont authentifiés avec les jetons par commande renvoyés par Mattermost lors de l’enregistrement de la commande slash. Si l’enregistrement échoue ou si aucune commande n’est activée, OpenClaw rejette les callbacks avec `Unauthorized: invalid command token.` +- Pour les hôtes de callback privés/tailnet/internes, Mattermost peut exiger que `ServiceSettings.AllowedUntrustedInternalConnections` inclue l’hôte/le domaine du callback. Utilisez des valeurs d’hôte/domaine, pas des URL complètes. +- `channels.mattermost.configWrites` : autorise ou refuse les écritures de configuration initiées par Mattermost. +- `channels.mattermost.requireMention` : exige `@mention` avant de répondre dans les canaux. +- `channels.mattermost.groups..requireMention` : remplacement du filtrage par mention par canal (`"*"` pour la valeur par défaut). - `channels.mattermost.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. ### Signal @@ -553,15 +553,15 @@ Lorsque les commandes natives Mattermost sont activées : } ``` -**Modes de notification des réactions :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). +**Modes de notification de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). -- `channels.signal.account` : épingler le démarrage du canal à une identité de compte Signal spécifique. -- `channels.signal.configWrites` : autoriser ou refuser les écritures de configuration initiées depuis Signal. +- `channels.signal.account` : épingle le démarrage du canal à une identité de compte Signal spécifique. +- `channels.signal.configWrites` : autorise ou refuse les écritures de configuration initiées par Signal. - `channels.signal.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. ### BlueBubbles -BlueBubbles est le chemin iMessage recommandé (pris en charge par plugin, configuré sous `channels.bluebubbles`). +BlueBubbles est le chemin iMessage recommandé (pris en charge par Plugin, configuré sous `channels.bluebubbles`). ```json5 { @@ -576,14 +576,14 @@ BlueBubbles est le chemin iMessage recommandé (pris en charge par plugin, confi } ``` -- Chemins de clés principaux couverts ici : `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- Chemins de clés principaux couverts ici : `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. - `channels.bluebubbles.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. -- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` peuvent lier des conversations BlueBubbles à des sessions ACP persistantes. Utilisez un handle ou une chaîne cible BlueBubbles (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) dans `match.peer.id`. Sémantique partagée des champs : [Agents ACP](/fr/tools/acp-agents#channel-specific-settings). +- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` peuvent lier des conversations BlueBubbles à des sessions ACP persistantes. Utilisez un handle BlueBubbles ou une chaîne cible (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) dans `match.peer.id`. Sémantique de champ partagée : [ACP Agents](/fr/tools/acp-agents#channel-specific-settings). - La configuration complète du canal BlueBubbles est documentée dans [BlueBubbles](/fr/channels/bluebubbles). ### iMessage -OpenClaw lance `imsg rpc` (JSON-RPC sur stdio). Aucun démon ni port n’est requis. +OpenClaw lance `imsg rpc` (JSON-RPC sur stdio). Aucun daemon ni port n’est requis. ```json5 { @@ -611,11 +611,11 @@ OpenClaw lance `imsg rpc` (JSON-RPC sur stdio). Aucun démon ni port n’est req - Nécessite un accès complet au disque pour la base de données Messages. - Préférez les cibles `chat_id:`. Utilisez `imsg chats --limit 20` pour lister les discussions. -- `cliPath` peut pointer vers un wrapper SSH ; définissez `remoteHost` (`host` ou `user@host`) pour la récupération SCP des pièces jointes. -- `attachmentRoots` et `remoteAttachmentRoots` restreignent les chemins des pièces jointes entrantes (par défaut : `/Users/*/Library/Messages/Attachments`). -- SCP utilise une vérification stricte des clés d’hôte ; assurez-vous donc que la clé d’hôte du relais existe déjà dans `~/.ssh/known_hosts`. -- `channels.imessage.configWrites` : autoriser ou refuser les écritures de configuration initiées depuis iMessage. -- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` peuvent lier des conversations iMessage à des sessions ACP persistantes. Utilisez un handle normalisé ou une cible de discussion explicite (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) dans `match.peer.id`. Sémantique partagée des champs : [Agents ACP](/fr/tools/acp-agents#channel-specific-settings). +- `cliPath` peut pointer vers un wrapper SSH ; définissez `remoteHost` (`host` ou `user@host`) pour la récupération des pièces jointes via SCP. +- `attachmentRoots` et `remoteAttachmentRoots` restreignent les chemins des pièces jointes entrantes (par défaut : `/Users/*/Library/Messages/Attachments`). +- SCP utilise une vérification stricte de la clé d’hôte ; assurez-vous donc que la clé d’hôte du relais existe déjà dans `~/.ssh/known_hosts`. +- `channels.imessage.configWrites` : autorise ou refuse les écritures de configuration initiées par iMessage. +- Les entrées `bindings[]` de niveau supérieur avec `type: "acp"` peuvent lier des conversations iMessage à des sessions ACP persistantes. Utilisez un handle normalisé ou une cible de discussion explicite (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) dans `match.peer.id`. Sémantique de champ partagée : [ACP Agents](/fr/tools/acp-agents#channel-specific-settings). @@ -658,21 +658,21 @@ Matrix est pris en charge par extension et configuré sous `channels.matrix`. } ``` -- L’authentification par jeton utilise `accessToken` ; l’authentification par mot de passe utilise `userId` + `password`. -- `channels.matrix.proxy` fait passer le trafic HTTP Matrix par un proxy HTTP(S) explicite. Les comptes nommés peuvent le remplacer avec `channels.matrix.accounts..proxy`. +- L’authentification par jeton utilise `accessToken` ; l’authentification par mot de passe utilise `userId` + `password`. +- `channels.matrix.proxy` route le trafic HTTP Matrix via un proxy HTTP(S) explicite. Les comptes nommés peuvent le remplacer avec `channels.matrix.accounts..proxy`. - `channels.matrix.network.dangerouslyAllowPrivateNetwork` autorise les homeservers privés/internes. `proxy` et cette activation réseau sont des contrôles indépendants. - `channels.matrix.defaultAccount` sélectionne le compte préféré dans les configurations multi-comptes. -- `channels.matrix.autoJoin` vaut `off` par défaut ; les salons invités et les nouvelles invitations de type DM sont donc ignorés jusqu’à ce que vous définissiez `autoJoin: "allowlist"` avec `autoJoinAllowlist` ou `autoJoin: "always"`. -- `channels.matrix.execApprovals` : livraison native Matrix des approbations d’exécution et autorisation des approbateurs. - - `enabled` : `true`, `false` ou `"auto"` (par défaut). En mode auto, les approbations d’exécution s’activent lorsque les approbateurs peuvent être résolus à partir de `approvers` ou `commands.ownerAllowFrom`. - - `approvers` : ID d’utilisateurs Matrix (par ex. `@owner:example.org`) autorisés à approuver les demandes d’exécution. - - `agentFilter` : liste d’autorisations facultative d’ID d’agent. Omettez-la pour transférer les approbations pour tous les agents. - - `sessionFilter` : motifs facultatifs de clé de session (sous-chaîne ou regex). - - `target` : emplacement d’envoi des invites d’approbation. `"dm"` (par défaut), `"channel"` (salon d’origine) ou `"both"`. - - Remplacements par compte : `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` contrôle comment les DM Matrix sont regroupés en sessions : `per-user` (par défaut) partage par pair routé, tandis que `per-room` isole chaque salon DM. -- Les sondes d’état Matrix et les recherches en direct dans l’annuaire utilisent la même politique de proxy que le trafic d’exécution. -- La configuration complète de Matrix, les règles de ciblage et les exemples de configuration sont documentés dans [Matrix](/fr/channels/matrix). +- `channels.matrix.autoJoin` vaut par défaut `off`, donc les salons invités et les nouvelles invitations de type DM sont ignorés tant que vous ne définissez pas `autoJoin: "allowlist"` avec `autoJoinAllowlist` ou `autoJoin: "always"`. +- `channels.matrix.execApprovals` : livraison d’approbation exec native à Matrix et autorisation des approbateurs. + - `enabled` : `true`, `false` ou `"auto"` (par défaut). En mode auto, les approbations exec s’activent lorsque les approbateurs peuvent être résolus à partir de `approvers` ou `commands.ownerAllowFrom`. + - `approvers` : ID d’utilisateurs Matrix (par exemple `@owner:example.org`) autorisés à approuver les requêtes exec. + - `agentFilter` : liste d’autorisations facultative d’ID d’agents. Omettez-le pour transférer les approbations pour tous les agents. + - `sessionFilter` : motifs facultatifs de clé de session (sous-chaîne ou regex). + - `target` : emplacement d’envoi des invites d’approbation. `"dm"` (par défaut), `"channel"` (salon d’origine) ou `"both"`. + - Remplacements par compte : `channels.matrix.accounts..execApprovals`. +- `channels.matrix.dm.sessionScope` contrôle la manière dont les DM Matrix sont groupés en sessions : `per-user` (par défaut) partage par pair routé, tandis que `per-room` isole chaque salon DM. +- Les sondes d’état Matrix et les recherches de répertoire en direct utilisent la même politique de proxy que le trafic d’exécution. +- La configuration complète de Matrix, les règles de ciblage et des exemples d’installation sont documentés dans [Matrix](/fr/channels/matrix). ### Microsoft Teams @@ -691,7 +691,7 @@ Microsoft Teams est pris en charge par extension et configuré sous `channels.ms } ``` -- Chemins de clés principaux couverts ici : `channels.msteams`, `channels.msteams.configWrites`. +- Chemins de clés principaux couverts ici : `channels.msteams`, `channels.msteams.configWrites`. - La configuration complète de Teams (identifiants, webhook, politique DM/groupe, remplacements par équipe/par canal) est documentée dans [Microsoft Teams](/fr/channels/msteams). ### IRC @@ -717,13 +717,13 @@ IRC est pris en charge par extension et configuré sous `channels.irc`. } ``` -- Chemins de clés principaux couverts ici : `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- Chemins de clés principaux couverts ici : `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. - `channels.irc.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. - La configuration complète du canal IRC (hôte/port/TLS/canaux/listes d’autorisations/filtrage par mention) est documentée dans [IRC](/fr/channels/irc). -### Multi-compte (tous les canaux) +### Multi-comptes (tous les canaux) -Exécutez plusieurs comptes par canal (chacun avec son propre `accountId`) : +Exécutez plusieurs comptes par canal (chacun avec son propre `accountId`) : ```json5 { @@ -746,25 +746,25 @@ Exécutez plusieurs comptes par canal (chacun avec son propre `accountId`) : - `default` est utilisé lorsque `accountId` est omis (CLI + routage). - Les jetons d’environnement s’appliquent uniquement au compte **default**. -- Les paramètres de base du canal s’appliquent à tous les comptes sauf remplacement par compte. +- Les paramètres de canal de base s’appliquent à tous les comptes sauf remplacement par compte. - Utilisez `bindings[].match.accountId` pour router chaque compte vers un agent différent. -- Si vous ajoutez un compte non par défaut via `openclaw channels add` (ou l’onboarding de canal) alors que vous utilisez encore une configuration de canal mono-compte au niveau supérieur, OpenClaw promeut d’abord les valeurs mono-compte de niveau supérieur portées par le compte dans la carte des comptes du canal afin que le compte d’origine continue de fonctionner. La plupart des canaux les déplacent dans `channels..accounts.default` ; Matrix peut à la place préserver une cible nommée/par défaut existante correspondante. -- Les liaisons existantes limitées au canal (sans `accountId`) continuent de correspondre au compte par défaut ; les liaisons limitées au compte restent facultatives. -- `openclaw doctor --fix` répare également les formes mixtes en déplaçant les valeurs mono-compte de niveau supérieur portées par le compte dans le compte promu choisi pour ce canal. La plupart des canaux utilisent `accounts.default` ; Matrix peut à la place préserver une cible nommée/par défaut existante correspondante. +- Si vous ajoutez un compte non par défaut via `openclaw channels add` (ou l’onboarding de canal) tout en étant encore sur une configuration de canal à compte unique de niveau supérieur, OpenClaw promeut d’abord les valeurs à compte unique de niveau supérieur à portée de compte dans le mapping de comptes du canal afin que le compte d’origine continue de fonctionner. La plupart des canaux les déplacent vers `channels..accounts.default` ; Matrix peut à la place conserver une cible nommée/par défaut existante correspondante. +- Les liaisons existantes au niveau canal uniquement (sans `accountId`) continuent de correspondre au compte par défaut ; les liaisons à portée de compte restent facultatives. +- `openclaw doctor --fix` répare également les formes mixtes en déplaçant les valeurs à compte unique de niveau supérieur à portée de compte vers le compte promu choisi pour ce canal. La plupart des canaux utilisent `accounts.default` ; Matrix peut à la place conserver une cible nommée/par défaut existante correspondante. ### Autres canaux d’extension -De nombreux canaux d’extension sont configurés comme `channels.` et documentés dans leurs pages de canal dédiées (par exemple Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat et Twitch). -Consultez l’index complet des canaux : [Canaux](/fr/channels). +De nombreux canaux d’extension sont configurés sous la forme `channels.` et documentés dans leurs pages de canal dédiées (par exemple Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat et Twitch). +Voir l’index complet des canaux : [Canaux](/fr/channels). ### Filtrage par mention dans les discussions de groupe -Les messages de groupe exigent par défaut **une mention requise** (mention de métadonnées ou motifs regex sûrs). Cela s’applique aux discussions de groupe WhatsApp, Telegram, Discord, Google Chat et iMessage. +Les messages de groupe exigent par défaut une **mention requise** (mention de métadonnées ou motifs regex sûrs). S’applique aux discussions de groupe WhatsApp, Telegram, Discord, Google Chat et iMessage. -**Types de mention :** +**Types de mention :** -- **Mentions de métadonnées** : @-mentions natives de la plateforme. Ignorées en mode auto-discussion WhatsApp. -- **Motifs textuels** : motifs regex sûrs dans `agents.list[].groupChat.mentionPatterns`. Les motifs invalides et les répétitions imbriquées non sûres sont ignorés. +- **Mentions de métadonnées** : @-mentions natives de la plateforme. Ignorées en mode self-chat WhatsApp. +- **Motifs de texte** : motifs regex sûrs dans `agents.list[].groupChat.mentionPatterns`. Les motifs invalides et les répétitions imbriquées non sûres sont ignorés. - Le filtrage par mention n’est appliqué que lorsque la détection est possible (mentions natives ou au moins un motif). ```json5 @@ -778,9 +778,9 @@ Les messages de groupe exigent par défaut **une mention requise** (mention de m } ``` -`messages.groupChat.historyLimit` définit la valeur globale par défaut. Les canaux peuvent la remplacer avec `channels..historyLimit` (ou par compte). Définissez `0` pour désactiver. +`messages.groupChat.historyLimit` définit la valeur par défaut globale. Les canaux peuvent la remplacer avec `channels..historyLimit` (ou par compte). Définissez `0` pour désactiver. -#### Limites d’historique DM +#### Limites d’historique des DM ```json5 { @@ -795,13 +795,13 @@ Les messages de groupe exigent par défaut **une mention requise** (mention de m } ``` -Résolution : remplacement par DM → valeur par défaut du fournisseur → aucune limite (tout est conservé). +Résolution : remplacement par DM → valeur par défaut du fournisseur → aucune limite (tout est conservé). -Pris en charge : `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. +Pris en charge : `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. -#### Mode auto-discussion +#### Mode self-chat -Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-discussion (ignore les @-mentions natives, répond uniquement aux motifs textuels) : +Incluez votre propre numéro dans `allowFrom` pour activer le mode self-chat (ignore les @-mentions natives, répond uniquement aux motifs de texte) : ```json5 { @@ -822,7 +822,7 @@ Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-discussi } ``` -### Commandes (gestion des commandes de discussion) +### Commandes (gestion des commandes de chat) ```json5 { @@ -851,42 +851,42 @@ Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-discussi -- Ce bloc configure les surfaces de commandes. Pour le catalogue actuel des commandes intégrées + groupées, consultez [Commandes slash](/fr/tools/slash-commands). -- Cette page est une **référence des clés de configuration**, et non le catalogue complet des commandes. Les commandes détenues par des canaux/plugins comme QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` et Talk `/voice` sont documentées dans leurs pages de canal/plugin ainsi que dans [Commandes slash](/fr/tools/slash-commands). -- Les commandes textuelles doivent être des messages **autonomes** commençant par `/`. -- `native: "auto"` active les commandes natives pour Discord/Telegram et laisse Slack désactivé. -- `nativeSkills: "auto"` active les commandes natives Skills pour Discord/Telegram et laisse Slack désactivé. -- Remplacement par canal : `channels.discord.commands.native` (booléen ou `"auto"`). `false` efface les commandes précédemment enregistrées. -- Remplacez l’enregistrement natif des Skills par canal avec `channels..commands.nativeSkills`. +- Ce bloc configure les surfaces de commande. Pour le catalogue actuel des commandes intégrées + bundle, voir [Commandes slash](/fr/tools/slash-commands). +- Cette page est une **référence des clés de configuration**, pas le catalogue complet des commandes. Les commandes propres à un canal/Plugin comme QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` et Talk `/voice` sont documentées dans leurs pages de canal/Plugin ainsi que dans [Commandes slash](/fr/tools/slash-commands). +- Les commandes textuelles doivent être des messages **autonomes** avec un `/` en tête. +- `native: "auto"` active les commandes natives pour Discord/Telegram, et laisse Slack désactivé. +- `nativeSkills: "auto"` active les commandes natives de Skills pour Discord/Telegram, et laisse Slack désactivé. +- Remplacement par canal : `channels.discord.commands.native` (booléen ou `"auto"`). `false` efface les commandes précédemment enregistrées. +- Remplacez l’enregistrement des Skills natives par canal avec `channels..commands.nativeSkills`. - `channels.telegram.customCommands` ajoute des entrées supplémentaires au menu du bot Telegram. -- `bash: true` active `! ` pour le shell hôte. Nécessite `tools.elevated.enabled` et un expéditeur présent dans `tools.elevated.allowFrom.`. -- `config: true` active `/config` (lit/écrit `openclaw.json`). Pour les clients de passerelle `chat.send`, les écritures persistantes `/config set|unset` exigent également `operator.admin` ; la commande en lecture seule `/config show` reste disponible pour les clients opérateur normaux avec portée d’écriture. -- `mcp: true` active `/mcp` pour la configuration de serveur MCP gérée par OpenClaw sous `mcp.servers`. -- `plugins: true` active `/plugins` pour la découverte, l’installation et les contrôles d’activation/désactivation des plugins. -- `channels..configWrites` contrôle les mutations de configuration par canal (par défaut : true). -- Pour les canaux multi-comptes, `channels..accounts..configWrites` contrôle également les écritures ciblant ce compte (par exemple `/allowlist --config --account ` ou `/config set channels..accounts....`). -- `restart: false` désactive `/restart` et les actions d’outil de redémarrage de la passerelle. Par défaut : `true`. +- `bash: true` active `! ` pour le shell hôte. Nécessite `tools.elevated.enabled` et que l’expéditeur figure dans `tools.elevated.allowFrom.`. +- `config: true` active `/config` (lit/écrit `openclaw.json`). Pour les clients Gateway `chat.send`, les écritures persistantes `/config set|unset` nécessitent également `operator.admin` ; la commande en lecture seule `/config show` reste disponible pour les clients opérateur normaux avec portée d’écriture. +- `mcp: true` active `/mcp` pour la configuration du serveur MCP gérée par OpenClaw sous `mcp.servers`. +- `plugins: true` active `/plugins` pour la découverte de Plugin, l’installation et les contrôles d’activation/désactivation. +- `channels..configWrites` contrôle les mutations de configuration par canal (par défaut : true). +- Pour les canaux multi-comptes, `channels..accounts..configWrites` contrôle également les écritures qui ciblent ce compte (par exemple `/allowlist --config --account ` ou `/config set channels..accounts....`). +- `restart: false` désactive `/restart` et les actions d’outil de redémarrage du Gateway. Par défaut : `true`. - `ownerAllowFrom` est la liste d’autorisations explicite du propriétaire pour les commandes/outils réservés au propriétaire. Elle est distincte de `allowFrom`. -- `ownerDisplay: "hash"` hache les ID de propriétaire dans le prompt système. Définissez `ownerDisplaySecret` pour contrôler le hachage. -- `allowFrom` est défini par fournisseur. Lorsqu’il est défini, c’est l’**unique** source d’autorisation (les listes d’autorisations/appairages de canal et `useAccessGroups` sont ignorés). -- `useAccessGroups: false` permet aux commandes de contourner les politiques des groupes d’accès lorsque `allowFrom` n’est pas défini. -- Carte de la documentation des commandes : - - catalogue intégré + groupé : [Commandes slash](/fr/tools/slash-commands) - - surfaces de commandes spécifiques aux canaux : [Canaux](/fr/channels) - - commandes QQ Bot : [QQ Bot](/fr/channels/qqbot) - - commandes d’appairage : [Appairage](/fr/channels/pairing) - - commande de carte LINE : [LINE](/fr/channels/line) - - rêverie mémoire : [Dreaming](/fr/concepts/dreaming) +- `ownerDisplay: "hash"` hache les ID du propriétaire dans le prompt système. Définissez `ownerDisplaySecret` pour contrôler le hachage. +- `allowFrom` est par fournisseur. Lorsqu’il est défini, c’est la **seule** source d’autorisation (les listes d’autorisations/appairages de canal et `useAccessGroups` sont ignorés). +- `useAccessGroups: false` permet aux commandes de contourner les politiques de groupes d’accès lorsque `allowFrom` n’est pas défini. +- Cartographie de la documentation des commandes : + - catalogue intégré + bundle : [Commandes slash](/fr/tools/slash-commands) + - surfaces de commande spécifiques à un canal : [Canaux](/fr/channels) + - commandes QQ Bot : [QQ Bot](/fr/channels/qqbot) + - commandes d’appairage : [Appairage](/fr/channels/pairing) + - commande de carte LINE : [LINE](/fr/channels/line) + - dreaming de memory : [Dreaming](/fr/concepts/dreaming) --- -## Valeurs par défaut de l’agent +## Valeurs par défaut des agents ### `agents.defaults.workspace` -Par défaut : `~/.openclaw/workspace`. +Par défaut : `~/.openclaw/workspace`. ```json5 { @@ -896,7 +896,7 @@ Par défaut : `~/.openclaw/workspace`. ### `agents.defaults.repoRoot` -Racine de dépôt facultative affichée dans la ligne Runtime du prompt système. Si elle n’est pas définie, OpenClaw la détecte automatiquement en remontant depuis l’espace de travail. +Racine de dépôt facultative affichée dans la ligne Runtime du prompt système. Si elle n’est pas définie, OpenClaw la détecte automatiquement en remontant depuis le workspace. ```json5 { @@ -906,7 +906,7 @@ Racine de dépôt facultative affichée dans la ligne Runtime du prompt système ### `agents.defaults.skills` -Liste d’autorisations Skills par défaut facultative pour les agents qui ne définissent pas +Liste d’autorisations par défaut facultative de Skills pour les agents qui ne définissent pas `agents.list[].skills`. ```json5 @@ -914,23 +914,23 @@ Liste d’autorisations Skills par défaut facultative pour les agents qui ne d agents: { defaults: { skills: ["github", "weather"] }, list: [ - { id: "writer" }, // hérite de github, weather - { id: "docs", skills: ["docs-search"] }, // remplace les valeurs par défaut - { id: "locked-down", skills: [] }, // aucun skill + { id: "writer" }, // inherits github, weather + { id: "docs", skills: ["docs-search"] }, // replaces defaults + { id: "locked-down", skills: [] }, // no skills ], }, } ``` -- Omettez `agents.defaults.skills` pour des Skills non restreints par défaut. +- Omettez `agents.defaults.skills` pour des Skills non restreintes par défaut. - Omettez `agents.list[].skills` pour hériter des valeurs par défaut. -- Définissez `agents.list[].skills: []` pour n’avoir aucun Skills. -- Une liste `agents.list[].skills` non vide constitue l’ensemble final pour cet agent ; elle - n’est pas fusionnée avec les valeurs par défaut. +- Définissez `agents.list[].skills: []` pour n’avoir aucune Skills. +- Une liste `agents.list[].skills` non vide constitue l’ensemble final pour cet agent ; elle + ne fusionne pas avec les valeurs par défaut. ### `agents.defaults.skipBootstrap` -Désactive la création automatique des fichiers bootstrap de l’espace de travail (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`). +Désactive la création automatique des fichiers bootstrap du workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`). ```json5 { @@ -940,9 +940,9 @@ Désactive la création automatique des fichiers bootstrap de l’espace de trav ### `agents.defaults.contextInjection` -Contrôle quand les fichiers bootstrap de l’espace de travail sont injectés dans le prompt système. Valeur par défaut : `"always"`. +Contrôle quand les fichiers bootstrap du workspace sont injectés dans le prompt système. Valeur par défaut : `"always"`. -- `"continuation-skip"` : les tours de continuation sûrs (après une réponse assistant terminée) ignorent la réinjection du bootstrap de l’espace de travail, ce qui réduit la taille du prompt. Les exécutions de heartbeat et les nouvelles tentatives après compactage reconstruisent toujours le contexte. +- `"continuation-skip"` : les tours de continuation sûrs (après une réponse d’assistant terminée) ignorent la réinjection du bootstrap du workspace, ce qui réduit la taille du prompt. Les exécutions Heartbeat et les nouvelles tentatives après Compaction reconstruisent toujours le contexte. ```json5 { @@ -952,7 +952,7 @@ Contrôle quand les fichiers bootstrap de l’espace de travail sont injectés d ### `agents.defaults.bootstrapMaxChars` -Nombre maximal de caractères par fichier bootstrap de l’espace de travail avant troncature. Par défaut : `20000`. +Nombre maximal de caractères par fichier bootstrap du workspace avant troncature. Valeur par défaut : `20000`. ```json5 { @@ -962,7 +962,7 @@ Nombre maximal de caractères par fichier bootstrap de l’espace de travail ava ### `agents.defaults.bootstrapTotalMaxChars` -Nombre maximal total de caractères injectés dans l’ensemble des fichiers bootstrap de l’espace de travail. Par défaut : `150000`. +Nombre total maximal de caractères injectés dans l’ensemble des fichiers bootstrap du workspace. Valeur par défaut : `150000`. ```json5 { @@ -973,11 +973,11 @@ Nombre maximal total de caractères injectés dans l’ensemble des fichiers boo ### `agents.defaults.bootstrapPromptTruncationWarning` Contrôle le texte d’avertissement visible par l’agent lorsque le contexte bootstrap est tronqué. -Par défaut : `"once"`. +Valeur par défaut : `"once"`. -- `"off"` : ne jamais injecter de texte d’avertissement dans le prompt système. -- `"once"` : injecter l’avertissement une fois par signature de troncature unique (recommandé). -- `"always"` : injecter l’avertissement à chaque exécution lorsqu’une troncature existe. +- `"off"` : ne jamais injecter de texte d’avertissement dans le prompt système. +- `"once"` : injecter l’avertissement une fois par signature de troncature unique (recommandé). +- `"always"` : injecter l’avertissement à chaque exécution lorsqu’une troncature existe. ```json5 { @@ -987,11 +987,11 @@ Par défaut : `"once"`. ### `agents.defaults.imageMaxDimensionPx` -Taille maximale en pixels du côté le plus long d’une image dans les blocs image de transcription/outil avant les appels au fournisseur. -Par défaut : `1200`. +Taille maximale en pixels du côté le plus long d’une image dans les blocs d’image de transcription/d’outil avant les appels au fournisseur. +Valeur par défaut : `1200`. -Des valeurs plus faibles réduisent généralement l’usage des jetons de vision et la taille de la charge utile pour les exécutions riches en captures d’écran. -Des valeurs plus élevées conservent davantage de détails visuels. +Des valeurs plus faibles réduisent généralement l’utilisation de jetons de vision et la taille de la charge utile des requêtes pour les exécutions riches en captures d’écran. +Des valeurs plus élevées préservent davantage de détails visuels. ```json5 { @@ -1001,7 +1001,7 @@ Des valeurs plus élevées conservent davantage de détails visuels. ### `agents.defaults.userTimezone` -Fuseau horaire pour le contexte du prompt système (pas pour les horodatages des messages). Revient au fuseau horaire de l’hôte par défaut. +Fuseau horaire pour le contexte du prompt système (pas pour les horodatages des messages). Revient au fuseau horaire de l’hôte. ```json5 { @@ -1011,7 +1011,7 @@ Fuseau horaire pour le contexte du prompt système (pas pour les horodatages des ### `agents.defaults.timeFormat` -Format de l’heure dans le prompt système. Par défaut : `auto` (préférence du système d’exploitation). +Format d’heure dans le prompt système. Valeur par défaut : `auto` (préférence de l’OS). ```json5 { @@ -1049,7 +1049,7 @@ Format de l’heure dans le prompt système. Par défaut : `auto` (préférence primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // paramètres globaux par défaut du fournisseur + params: { cacheRetention: "long" }, // global default provider params embeddedHarness: { runtime: "auto", // auto | pi | registered harness id, e.g. codex fallback: "pi", // pi | none @@ -1068,48 +1068,48 @@ Format de l’heure dans le prompt système. Par défaut : `auto` (préférence } ``` -- `model` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). +- `model` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - La forme chaîne définit uniquement le modèle principal. - - La forme objet définit le modèle principal ainsi que des modèles de basculement ordonnés. -- `imageModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). + - La forme objet définit le modèle principal ainsi que les modèles de basculement ordonnés. +- `imageModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - Utilisé par le chemin d’outil `image` comme configuration de modèle de vision. - - Également utilisé comme routage de secours lorsque le modèle sélectionné/par défaut ne peut pas accepter une entrée image. -- `imageGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - - Utilisé par la capacité partagée de génération d’images ainsi que par toute future surface d’outil/plugin qui génère des images. - - Valeurs typiques : `google/gemini-3.1-flash-image-preview` pour la génération d’images Gemini native, `fal/fal-ai/flux/dev` pour fal, ou `openai/gpt-image-1` pour OpenAI Images. + - Également utilisé comme routage de repli lorsque le modèle sélectionné/par défaut ne peut pas accepter d’entrée image. +- `imageGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). + - Utilisé par la capacité partagée de génération d’images et toute future surface d’outil/Plugin qui génère des images. + - Valeurs typiques : `google/gemini-3.1-flash-image-preview` pour la génération d’images Gemini native, `fal/fal-ai/flux/dev` pour fal, ou `openai/gpt-image-1` pour OpenAI Images. - Si vous sélectionnez directement un provider/model, configurez aussi l’authentification/la clé API du fournisseur correspondant (par exemple `GEMINI_API_KEY` ou `GOOGLE_API_KEY` pour `google/*`, `OPENAI_API_KEY` pour `openai/*`, `FAL_KEY` pour `fal/*`). - - Si omis, `image_generate` peut toujours déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération d’images enregistrés dans l’ordre des ID de fournisseur. -- `musicGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). + - S’il est omis, `image_generate` peut quand même déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération d’images enregistrés, dans l’ordre des ID de fournisseur. +- `musicGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - Utilisé par la capacité partagée de génération musicale et l’outil intégré `music_generate`. - - Valeurs typiques : `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` ou `minimax/music-2.5+`. - - Si omis, `music_generate` peut toujours déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération musicale enregistrés dans l’ordre des ID de fournisseur. + - Valeurs typiques : `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` ou `minimax/music-2.5+`. + - S’il est omis, `music_generate` peut quand même déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération musicale enregistrés, dans l’ordre des ID de fournisseur. - Si vous sélectionnez directement un provider/model, configurez aussi l’authentification/la clé API du fournisseur correspondant. -- `videoGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). +- `videoGenerationModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - Utilisé par la capacité partagée de génération vidéo et l’outil intégré `video_generate`. - - Valeurs typiques : `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` ou `qwen/wan2.7-r2v`. - - Si omis, `video_generate` peut toujours déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération vidéo enregistrés dans l’ordre des ID de fournisseur. + - Valeurs typiques : `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` ou `qwen/wan2.7-r2v`. + - S’il est omis, `video_generate` peut quand même déduire une valeur par défaut de fournisseur avec authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération vidéo enregistrés, dans l’ordre des ID de fournisseur. - Si vous sélectionnez directement un provider/model, configurez aussi l’authentification/la clé API du fournisseur correspondant. - - Le fournisseur groupé de génération vidéo Qwen prend en charge jusqu’à 1 vidéo de sortie, 1 image d’entrée, 4 vidéos d’entrée, 10 secondes de durée, ainsi que les options de niveau fournisseur `size`, `aspectRatio`, `resolution`, `audio` et `watermark`. -- `pdfModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). + - Le fournisseur groupé de génération vidéo Qwen prend en charge jusqu’à 1 vidéo de sortie, 1 image d’entrée, 4 vidéos d’entrée, 10 secondes de durée, ainsi que les options au niveau fournisseur `size`, `aspectRatio`, `resolution`, `audio` et `watermark`. +- `pdfModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - Utilisé par l’outil `pdf` pour le routage du modèle. - - Si omis, l’outil PDF revient à `imageModel`, puis au modèle de session/par défaut résolu. -- `pdfMaxBytesMb` : limite de taille PDF par défaut pour l’outil `pdf` lorsque `maxBytesMb` n’est pas passé à l’appel. -- `pdfMaxPages` : nombre maximal de pages pris en compte par défaut par le mode d’extraction de secours dans l’outil `pdf`. -- `verboseDefault` : niveau verbose par défaut pour les agents. Valeurs : `"off"`, `"on"`, `"full"`. Par défaut : `"off"`. -- `elevatedDefault` : niveau de sortie élevée par défaut pour les agents. Valeurs : `"off"`, `"on"`, `"ask"`, `"full"`. Par défaut : `"on"`. -- `model.primary` : format `provider/model` (par ex. `openai/gpt-5.4`). Si vous omettez le fournisseur, OpenClaw essaie d’abord un alias, puis une correspondance unique avec un fournisseur configuré pour cet ID de modèle exact, et seulement ensuite revient au fournisseur par défaut configuré (comportement de compatibilité déprécié, donc préférez `provider/model` explicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw revient au premier provider/model configuré au lieu d’exposer une valeur par défaut obsolète d’un fournisseur supprimé. -- `models` : le catalogue de modèles configuré et la liste d’autorisations pour `/model`. Chaque entrée peut inclure `alias` (raccourci) et `params` (spécifiques au fournisseur, par exemple `temperature`, `maxTokens`, `cacheRetention`, `context1m`). -- `params` : paramètres globaux par défaut du fournisseur appliqués à tous les modèles. Définissez-les dans `agents.defaults.params` (par ex. `{ cacheRetention: "long" }`). -- Priorité de fusion de `params` (configuration) : `agents.defaults.params` (base globale) est remplacé par `agents.defaults.models["provider/model"].params` (par modèle), puis `agents.list[].params` (ID d’agent correspondant) remplace clé par clé. Voir [Prompt Caching](/fr/reference/prompt-caching) pour plus de détails. -- `embeddedHarness` : politique par défaut du runtime agent embarqué de bas niveau. Utilisez `runtime: "auto"` pour laisser les harnesses de plugin enregistrés réclamer les modèles pris en charge, `runtime: "pi"` pour forcer le harness PI intégré, ou un ID de harness enregistré tel que `runtime: "codex"`. Définissez `fallback: "none"` pour désactiver le retour automatique vers PI. -- Les écrivains de configuration qui modifient ces champs (par exemple `/models set`, `/models set-image` et les commandes d’ajout/suppression de secours) enregistrent la forme objet canonique et préservent autant que possible les listes de basculement existantes. -- `maxConcurrent` : nombre maximal d’exécutions parallèles d’agents entre les sessions (chaque session reste sérialisée). Par défaut : 4. + - S’il est omis, l’outil PDF revient à `imageModel`, puis au modèle de session/par défaut résolu. +- `pdfMaxBytesMb` : limite de taille PDF par défaut pour l’outil `pdf` lorsque `maxBytesMb` n’est pas transmis au moment de l’appel. +- `pdfMaxPages` : nombre maximal de pages par défaut prises en compte par le mode de repli d’extraction dans l’outil `pdf`. +- `verboseDefault` : niveau verbose par défaut pour les agents. Valeurs : `"off"`, `"on"`, `"full"`. Par défaut : `"off"`. +- `elevatedDefault` : niveau de sortie élevée par défaut pour les agents. Valeurs : `"off"`, `"on"`, `"ask"`, `"full"`. Par défaut : `"on"`. +- `model.primary` : format `provider/model` (par ex. `openai/gpt-5.4`). Si vous omettez le fournisseur, OpenClaw essaie d’abord un alias, puis un fournisseur configuré unique correspondant exactement à cet ID de modèle, et seulement ensuite revient au fournisseur par défaut configuré (comportement de compatibilité obsolète, donc préférez `provider/model` explicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw revient au premier provider/model configuré au lieu d’exposer une valeur par défaut obsolète d’un fournisseur supprimé. +- `models` : le catalogue de modèles configuré et la liste d’autorisations pour `/model`. Chaque entrée peut inclure `alias` (raccourci) et `params` (spécifiques au fournisseur, par exemple `temperature`, `maxTokens`, `cacheRetention`, `context1m`). +- `params` : paramètres globaux par défaut du fournisseur appliqués à tous les modèles. Définis dans `agents.defaults.params` (par ex. `{ cacheRetention: "long" }`). +- Priorité de fusion de `params` (configuration) : `agents.defaults.params` (base globale) est remplacé par `agents.defaults.models["provider/model"].params` (par modèle), puis `agents.list[].params` (ID d’agent correspondant) remplace par clé. Voir [Prompt Caching](/fr/reference/prompt-caching) pour les détails. +- `embeddedHarness` : politique par défaut d’exécution d’agent embarqué de bas niveau. Utilisez `runtime: "auto"` pour laisser les harness de Plugin enregistrés revendiquer les modèles pris en charge, `runtime: "pi"` pour forcer le harness PI intégré, ou un ID de harness enregistré tel que `runtime: "codex"`. Définissez `fallback: "none"` pour désactiver le repli automatique vers PI. +- Les auteurs de configuration qui modifient ces champs (par exemple `/models set`, `/models set-image` et les commandes d’ajout/suppression de repli) enregistrent la forme canonique objet et préservent les listes de repli existantes lorsque c’est possible. +- `maxConcurrent` : nombre maximal d’exécutions parallèles d’agents entre les sessions (chaque session reste sérialisée). Par défaut : 4. ### `agents.defaults.embeddedHarness` `embeddedHarness` contrôle quel exécuteur de bas niveau exécute les tours d’agent embarqués. La plupart des déploiements devraient conserver la valeur par défaut `{ runtime: "auto", fallback: "pi" }`. -Utilisez-le lorsqu’un plugin approuvé fournit un harness natif, comme le harness app-server Codex groupé. +Utilisez-le lorsqu’un Plugin de confiance fournit un harness natif, comme le harness d’app-server Codex groupé. ```json5 { @@ -1125,34 +1125,34 @@ Utilisez-le lorsqu’un plugin approuvé fournit un harness natif, comme le harn } ``` -- `runtime` : `"auto"`, `"pi"` ou un ID de harness de plugin enregistré. Le plugin Codex groupé enregistre `codex`. -- `fallback` : `"pi"` ou `"none"`. `"pi"` conserve le harness PI intégré comme solution de compatibilité de secours. `"none"` fait échouer la sélection d’un harness de plugin manquant ou non pris en charge au lieu d’utiliser PI silencieusement. -- Remplacements par variable d’environnement : `OPENCLAW_AGENT_RUNTIME=` remplace `runtime` ; `OPENCLAW_AGENT_HARNESS_FALLBACK=none` désactive le retour vers PI pour ce processus. +- `runtime` : `"auto"`, `"pi"` ou un ID de harness de Plugin enregistré. Le Plugin Codex groupé enregistre `codex`. +- `fallback` : `"pi"` ou `"none"`. `"pi"` conserve le harness PI intégré comme repli de compatibilité. `"none"` fait échouer une sélection de harness de Plugin manquante ou non prise en charge au lieu d’utiliser PI silencieusement. +- Remplacements par variables d’environnement : `OPENCLAW_AGENT_RUNTIME=` remplace `runtime` ; `OPENCLAW_AGENT_HARNESS_FALLBACK=none` désactive le repli PI pour ce processus. - Pour les déploiements Codex uniquement, définissez `model: "codex/gpt-5.4"`, `embeddedHarness.runtime: "codex"` et `embeddedHarness.fallback: "none"`. -- Cela contrôle uniquement le harness de discussion embarqué. La génération de médias, la vision, le PDF, la musique, la vidéo et le TTS utilisent toujours leurs paramètres de provider/model. +- Cela contrôle uniquement le harness de chat embarqué. La génération de médias, la vision, PDF, la musique, la vidéo et TTS utilisent toujours leurs paramètres provider/model. -**Raccourcis d’alias intégrés** (s’appliquent uniquement lorsque le modèle est dans `agents.defaults.models`) : +**Raccourcis d’alias intégrés** (ne s’appliquent que lorsque le modèle est dans `agents.defaults.models`) : -| Alias | Modèle | -| ------------------- | -------------------------------------- | -| `opus` | `anthropic/claude-opus-4-6` | -| `sonnet` | `anthropic/claude-sonnet-4-6` | -| `gpt` | `openai/gpt-5.4` | -| `gpt-mini` | `openai/gpt-5.4-mini` | -| `gpt-nano` | `openai/gpt-5.4-nano` | -| `gemini` | `google/gemini-3.1-pro-preview` | -| `gemini-flash` | `google/gemini-3-flash-preview` | +| Alias | Modèle | +| ------------------- | ------------------------------------- | +| `opus` | `anthropic/claude-opus-4-6` | +| `sonnet` | `anthropic/claude-sonnet-4-6` | +| `gpt` | `openai/gpt-5.4` | +| `gpt-mini` | `openai/gpt-5.4-mini` | +| `gpt-nano` | `openai/gpt-5.4-nano` | +| `gemini` | `google/gemini-3.1-pro-preview` | +| `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | Vos alias configurés ont toujours priorité sur les valeurs par défaut. -Les modèles Z.AI GLM-4.x activent automatiquement le mode thinking sauf si vous définissez `--thinking off` ou si vous définissez vous-même `agents.defaults.models["zai/"].params.thinking`. +Les modèles Z.AI GLM-4.x activent automatiquement le mode thinking sauf si vous définissez `--thinking off` ou définissez vous-même `agents.defaults.models["zai/"].params.thinking`. Les modèles Z.AI activent `tool_stream` par défaut pour le streaming des appels d’outil. Définissez `agents.defaults.models["zai/"].params.tool_stream` sur `false` pour le désactiver. -Les modèles Anthropic Claude 4.6 utilisent par défaut le mode thinking `adaptive` lorsqu’aucun niveau de réflexion explicite n’est défini. +Les modèles Anthropic Claude 4.6 utilisent par défaut le mode thinking `adaptive` lorsqu’aucun niveau de thinking explicite n’est défini. ### `agents.defaults.cliBackends` -Backends CLI facultatifs pour les exécutions de secours texte seul (sans appels d’outil). Utile comme solution de repli lorsque les fournisseurs d’API échouent. +Backends CLI facultatifs pour les exécutions de repli en mode texte uniquement (sans appels d’outil). Utiles comme solution de secours lorsque les fournisseurs d’API échouent. ```json5 { @@ -1180,13 +1180,13 @@ Backends CLI facultatifs pour les exécutions de secours texte seul (sans appels } ``` -- Les backends CLI sont orientés texte ; les outils sont toujours désactivés. +- Les backends CLI sont d’abord orientés texte ; les outils sont toujours désactivés. - Les sessions sont prises en charge lorsque `sessionArg` est défini. -- Le passage d’images est pris en charge lorsque `imageArg` accepte des chemins de fichiers. +- Le passage direct des images est pris en charge lorsque `imageArg` accepte des chemins de fichiers. ### `agents.defaults.systemPromptOverride` -Remplace l’intégralité du prompt système assemblé par OpenClaw par une chaîne fixe. Définissez-le au niveau par défaut (`agents.defaults.systemPromptOverride`) ou par agent (`agents.list[].systemPromptOverride`). Les valeurs par agent ont priorité ; une valeur vide ou ne contenant que des espaces est ignorée. Utile pour des expériences contrôlées sur les prompts. +Remplace tout le prompt système assemblé par OpenClaw par une chaîne fixe. À définir au niveau par défaut (`agents.defaults.systemPromptOverride`) ou par agent (`agents.list[].systemPromptOverride`). Les valeurs par agent ont priorité ; une valeur vide ou composée uniquement d’espaces est ignorée. Utile pour des expériences contrôlées sur les prompts. ```json5 { @@ -1200,7 +1200,7 @@ Remplace l’intégralité du prompt système assemblé par OpenClaw par une cha ### `agents.defaults.heartbeat` -Exécutions périodiques de heartbeat. +Exécutions périodiques de Heartbeat. ```json5 { @@ -1227,15 +1227,15 @@ Exécutions périodiques de heartbeat. } ``` -- `every` : chaîne de durée (ms/s/m/h). Par défaut : `30m` (authentification par clé API) ou `1h` (authentification OAuth). Définissez `0m` pour désactiver. -- `includeSystemPromptSection` : lorsque défini à false, omet la section Heartbeat du prompt système et ignore l’injection de `HEARTBEAT.md` dans le contexte bootstrap. Par défaut : `true`. -- `suppressToolErrorWarnings` : lorsque défini à true, supprime les charges utiles d’avertissement d’erreur d’outil pendant les exécutions de heartbeat. -- `timeoutSeconds` : durée maximale en secondes autorisée pour un tour d’agent heartbeat avant son interruption. Laissez non défini pour utiliser `agents.defaults.timeoutSeconds`. -- `directPolicy` : politique de livraison directe/DM. `allow` (par défaut) autorise la livraison vers une cible directe. `block` supprime la livraison vers une cible directe et émet `reason=dm-blocked`. -- `lightContext` : lorsque défini à true, les exécutions de heartbeat utilisent un contexte bootstrap léger et conservent uniquement `HEARTBEAT.md` parmi les fichiers bootstrap de l’espace de travail. -- `isolatedSession` : lorsque défini à true, chaque heartbeat s’exécute dans une session fraîche sans historique de conversation antérieur. Même schéma d’isolation que cron `sessionTarget: "isolated"`. Réduit le coût en jetons par heartbeat d’environ ~100K à ~2-5K jetons. -- Par agent : définissez `agents.list[].heartbeat`. Lorsqu’un agent quelconque définit `heartbeat`, **seuls ces agents** exécutent des heartbeats. -- Les heartbeats exécutent des tours d’agent complets — des intervalles plus courts consomment plus de jetons. +- `every` : chaîne de durée (ms/s/m/h). Par défaut : `30m` (authentification par clé API) ou `1h` (authentification OAuth). Définissez `0m` pour désactiver. +- `includeSystemPromptSection` : lorsqu’il vaut false, omet la section Heartbeat du prompt système et ignore l’injection de `HEARTBEAT.md` dans le contexte bootstrap. Par défaut : `true`. +- `suppressToolErrorWarnings` : lorsqu’il vaut true, supprime les charges utiles d’avertissement d’erreur d’outil pendant les exécutions Heartbeat. +- `timeoutSeconds` : durée maximale en secondes autorisée pour un tour d’agent Heartbeat avant interruption. Laissez non défini pour utiliser `agents.defaults.timeoutSeconds`. +- `directPolicy` : politique de livraison directe/DM. `allow` (par défaut) autorise la livraison vers une cible directe. `block` supprime la livraison vers une cible directe et émet `reason=dm-blocked`. +- `lightContext` : lorsqu’il vaut true, les exécutions Heartbeat utilisent un contexte bootstrap léger et ne conservent que `HEARTBEAT.md` parmi les fichiers bootstrap du workspace. +- `isolatedSession` : lorsqu’il vaut true, chaque exécution Heartbeat s’exécute dans une session fraîche sans historique de conversation antérieur. Même schéma d’isolation que Cron `sessionTarget: "isolated"`. Réduit le coût en jetons par Heartbeat d’environ 100K à environ 2–5K jetons. +- Par agent : définissez `agents.list[].heartbeat`. Lorsqu’un agent quelconque définit `heartbeat`, **seuls ces agents** exécutent des Heartbeat. +- Les Heartbeat exécutent des tours d’agent complets — des intervalles plus courts consomment davantage de jetons. ### `agents.defaults.compaction` @@ -1265,19 +1265,19 @@ Exécutions périodiques de heartbeat. } ``` -- `mode` : `default` ou `safeguard` (résumé par morceaux pour les longs historiques). Voir [Compaction](/fr/concepts/compaction). -- `provider` : ID d’un plugin fournisseur de compaction enregistré. Lorsqu’il est défini, le `summarize()` du fournisseur est appelé à la place du résumé LLM intégré. Revient à l’implémentation intégrée en cas d’échec. Définir un fournisseur force `mode: "safeguard"`. Voir [Compaction](/fr/concepts/compaction). -- `timeoutSeconds` : nombre maximal de secondes autorisé pour une opération unique de compaction avant qu’OpenClaw ne l’interrompe. Par défaut : `900`. -- `identifierPolicy` : `strict` (par défaut), `off` ou `custom`. `strict` préfixe des consignes intégrées de conservation des identifiants opaques pendant le résumé de compaction. -- `identifierInstructions` : texte facultatif personnalisé de préservation des identifiants utilisé lorsque `identifierPolicy=custom`. -- `postCompactionSections` : noms facultatifs de sections H2/H3 d’AGENTS.md à réinjecter après compaction. Valeur par défaut : `["Session Startup", "Red Lines"]` ; définissez `[]` pour désactiver la réinjection. Lorsqu’il est non défini ou explicitement défini à cette paire par défaut, les anciens en-têtes `Every Session`/`Safety` sont également acceptés comme solution de secours héritée. -- `model` : remplacement facultatif `provider/model-id` utilisé uniquement pour le résumé de compaction. Utilisez-le lorsque la session principale doit conserver un modèle mais que les résumés de compaction doivent s’exécuter sur un autre ; lorsqu’il n’est pas défini, la compaction utilise le modèle principal de la session. -- `notifyUser` : lorsque défini à `true`, envoie un bref avis à l’utilisateur au démarrage de la compaction (par exemple, « Compacting context... »). Désactivé par défaut pour garder la compaction silencieuse. -- `memoryFlush` : tour agentique silencieux avant la compaction automatique afin de stocker les souvenirs durables. Ignoré lorsque l’espace de travail est en lecture seule. +- `mode` : `default` ou `safeguard` (résumé par morceaux pour les historiques longs). Voir [Compaction](/fr/concepts/compaction). +- `provider` : ID d’un Plugin fournisseur de Compaction enregistré. Lorsqu’il est défini, la fonction `summarize()` du fournisseur est appelée au lieu du résumé LLM intégré. Revient au mode intégré en cas d’échec. Définir un fournisseur force `mode: "safeguard"`. Voir [Compaction](/fr/concepts/compaction). +- `timeoutSeconds` : nombre maximal de secondes autorisé pour une seule opération de Compaction avant qu’OpenClaw ne l’interrompe. Par défaut : `900`. +- `identifierPolicy` : `strict` (par défaut), `off` ou `custom`. `strict` préfixe les instructions intégrées de conservation des identifiants opaques pendant le résumé de Compaction. +- `identifierInstructions` : texte facultatif personnalisé de préservation des identifiants utilisé lorsque `identifierPolicy=custom`. +- `postCompactionSections` : noms facultatifs de sections H2/H3 d’AGENTS.md à réinjecter après Compaction. Valeur par défaut : `["Session Startup", "Red Lines"]` ; définissez `[]` pour désactiver la réinjection. Lorsqu’il n’est pas défini ou est explicitement défini sur cette paire par défaut, les anciens titres `Every Session`/`Safety` sont également acceptés comme solution de repli héritée. +- `model` : remplacement facultatif `provider/model-id` pour le résumé de Compaction uniquement. Utilisez-le lorsque la session principale doit conserver un modèle mais que les résumés de Compaction doivent s’exécuter sur un autre ; lorsqu’il n’est pas défini, la Compaction utilise le modèle principal de la session. +- `notifyUser` : lorsque `true`, envoie un bref avis à l’utilisateur lorsque la Compaction démarre (par exemple, « Compacting context... »). Désactivé par défaut pour garder la Compaction silencieuse. +- `memoryFlush` : tour agentique silencieux avant l’auto-Compaction pour stocker des mémoires durables. Ignoré lorsque le workspace est en lecture seule. ### `agents.defaults.contextPruning` -Épure les **anciens résultats d’outil** du contexte en mémoire avant envoi au LLM. Ne **modifie pas** l’historique de session sur disque. +Élague les **anciens résultats d’outils** du contexte en mémoire avant l’envoi au LLM. **Ne modifie pas** l’historique de session sur disque. ```json5 { @@ -1301,23 +1301,23 @@ Exécutions périodiques de heartbeat. -- `mode: "cache-ttl"` active les passes d’épuration. -- `ttl` contrôle à quelle fréquence l’épuration peut être relancée (après le dernier accès au cache). -- L’épuration tronque légèrement d’abord les résultats d’outil surdimensionnés, puis efface complètement les anciens résultats d’outil si nécessaire. +- `mode: "cache-ttl"` active les passes d’élagage. +- `ttl` contrôle la fréquence à laquelle l’élagage peut de nouveau s’exécuter (après la dernière mise à jour du cache). +- L’élagage tronque d’abord légèrement les résultats d’outils surdimensionnés, puis efface complètement les anciens résultats d’outils si nécessaire. -**Troncature légère** conserve le début + la fin et insère `...` au milieu. +**Le tronquage léger** conserve le début + la fin et insère `...` au milieu. -**Effacement complet** remplace l’intégralité du résultat d’outil par l’espace réservé. +**L’effacement complet** remplace l’intégralité du résultat de l’outil par l’espace réservé. -Remarques : +Remarques : -- Les blocs image ne sont jamais tronqués/effacés. -- Les ratios sont basés sur les caractères (approximatifs), pas sur des comptages exacts de jetons. -- Si moins de `keepLastAssistants` messages assistant existent, l’épuration est ignorée. +- Les blocs d’image ne sont jamais tronqués/effacés. +- Les ratios sont basés sur les caractères (approximatifs), pas sur des comptes exacts de jetons. +- Si le nombre de messages d’assistant est inférieur à `keepLastAssistants`, l’élagage est ignoré. -Voir [Épuration de session](/fr/concepts/session-pruning) pour les détails de comportement. +Voir [Élagage de session](/fr/concepts/session-pruning) pour les détails du comportement. ### Streaming par blocs @@ -1336,10 +1336,10 @@ Voir [Épuration de session](/fr/concepts/session-pruning) pour les détails de ``` - Les canaux autres que Telegram nécessitent `*.blockStreaming: true` explicite pour activer les réponses par blocs. -- Remplacements par canal : `channels..blockStreamingCoalesce` (et variantes par compte). Signal/Slack/Discord/Google Chat utilisent par défaut `minChars: 1500`. -- `humanDelay` : pause aléatoire entre les réponses par blocs. `natural` = 800–2500 ms. Remplacement par agent : `agents.list[].humanDelay`. +- Remplacements par canal : `channels..blockStreamingCoalesce` (et variantes par compte). Signal/Slack/Discord/Google Chat utilisent par défaut `minChars: 1500`. +- `humanDelay` : pause aléatoire entre les réponses par blocs. `natural` = 800–2500ms. Remplacement par agent : `agents.list[].humanDelay`. -Voir [Streaming](/fr/concepts/streaming) pour les détails de comportement + découpage. +Voir [Streaming](/fr/concepts/streaming) pour le comportement + les détails de découpage. ### Indicateurs de saisie @@ -1354,8 +1354,8 @@ Voir [Streaming](/fr/concepts/streaming) pour les détails de comportement + dé } ``` -- Valeurs par défaut : `instant` pour les discussions directes/mentions, `message` pour les discussions de groupe sans mention. -- Remplacements par session : `session.typingMode`, `session.typingIntervalSeconds`. +- Valeurs par défaut : `instant` pour les discussions directes/mentions, `message` pour les discussions de groupe sans mention. +- Remplacements par session : `session.typingMode`, `session.typingIntervalSeconds`. Voir [Indicateurs de saisie](/fr/concepts/typing-indicators). @@ -1460,52 +1460,52 @@ Sandboxing facultatif pour l’agent embarqué. Voir [Sandboxing](/fr/gateway/sa -**Backend :** +**Backend :** -- `docker` : runtime Docker local (par défaut) -- `ssh` : runtime distant générique pris en charge par SSH -- `openshell` : runtime OpenShell +- `docker` : environnement Docker local (par défaut) +- `ssh` : environnement distant générique basé sur SSH +- `openshell` : environnement OpenShell -Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques au runtime sont déplacés vers +Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques à l’environnement sont déplacés vers `plugins.entries.openshell.config`. -**Configuration du backend SSH :** +**Configuration du backend SSH :** -- `target` : cible SSH au format `user@host[:port]` -- `command` : commande client SSH (par défaut : `ssh`) -- `workspaceRoot` : racine distante absolue utilisée pour les espaces de travail selon la portée -- `identityFile` / `certificateFile` / `knownHostsFile` : fichiers locaux existants transmis à OpenSSH -- `identityData` / `certificateData` / `knownHostsData` : contenus en ligne ou SecretRefs qu’OpenClaw matérialise en fichiers temporaires à l’exécution -- `strictHostKeyChecking` / `updateHostKeys` : paramètres de politique de clé d’hôte OpenSSH +- `target` : cible SSH au format `user@host[:port]` +- `command` : commande client SSH (par défaut : `ssh`) +- `workspaceRoot` : racine distante absolue utilisée pour les workspaces par portée +- `identityFile` / `certificateFile` / `knownHostsFile` : fichiers locaux existants transmis à OpenSSH +- `identityData` / `certificateData` / `knownHostsData` : contenus inline ou SecretRefs qu’OpenClaw matérialise en fichiers temporaires à l’exécution +- `strictHostKeyChecking` / `updateHostKeys` : options de politique de clé d’hôte OpenSSH -**Priorité d’authentification SSH :** +**Priorité d’authentification SSH :** - `identityData` a priorité sur `identityFile` - `certificateData` a priorité sur `certificateFile` - `knownHostsData` a priorité sur `knownHostsFile` -- Les valeurs `*Data` basées sur SecretRef sont résolues depuis l’instantané actif du runtime des secrets avant le démarrage de la session sandbox +- Les valeurs `*Data` appuyées sur SecretRef sont résolues à partir de l’instantané actif du runtime des secrets avant le démarrage de la session sandbox -**Comportement du backend SSH :** +**Comportement du backend SSH :** -- initialise l’espace de travail distant une fois après création ou recréation -- conserve ensuite l’espace de travail SSH distant comme canonique +- initialise le workspace distant une fois après création ou recréation +- conserve ensuite le workspace SSH distant comme canonique - route `exec`, les outils de fichiers et les chemins média via SSH - ne resynchronise pas automatiquement les modifications distantes vers l’hôte - ne prend pas en charge les conteneurs de navigateur sandbox -**Accès à l’espace de travail :** +**Accès au workspace :** -- `none` : espace de travail sandbox selon la portée sous `~/.openclaw/sandboxes` -- `ro` : espace de travail sandbox à `/workspace`, espace de travail agent monté en lecture seule à `/agent` -- `rw` : espace de travail agent monté en lecture/écriture à `/workspace` +- `none` : workspace sandbox par portée sous `~/.openclaw/sandboxes` +- `ro` : workspace sandbox sur `/workspace`, workspace agent monté en lecture seule sur `/agent` +- `rw` : workspace agent monté en lecture/écriture sur `/workspace` -**Portée :** +**Portée :** -- `session` : conteneur + espace de travail par session -- `agent` : un conteneur + espace de travail par agent (par défaut) -- `shared` : conteneur et espace de travail partagés (pas d’isolation inter-sessions) +- `session` : conteneur + workspace par session +- `agent` : un conteneur + workspace par agent (par défaut) +- `shared` : conteneur et workspace partagés (aucune isolation entre sessions) -**Configuration du plugin OpenShell :** +**Configuration du Plugin OpenShell :** ```json5 { @@ -1531,32 +1531,32 @@ Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques a } ``` -**Mode OpenShell :** +**Mode OpenShell :** -- `mirror` : initialise le distant depuis le local avant `exec`, puis resynchronise après `exec` ; l’espace de travail local reste canonique -- `remote` : initialise le distant une fois lors de la création du sandbox, puis conserve l’espace de travail distant comme canonique +- `mirror` : initialise le distant depuis le local avant `exec`, resynchronise après `exec` ; le workspace local reste canonique +- `remote` : initialise le distant une seule fois lors de la création du sandbox, puis conserve le workspace distant comme canonique -En mode `remote`, les modifications locales sur l’hôte effectuées hors d’OpenClaw ne sont pas automatiquement synchronisées dans le sandbox après l’étape d’initialisation. -Le transport se fait via SSH dans le sandbox OpenShell, mais le plugin possède le cycle de vie du sandbox et la synchronisation miroir facultative. +En mode `remote`, les modifications locales sur l’hôte effectuées en dehors d’OpenClaw ne sont pas synchronisées automatiquement dans le sandbox après l’étape d’initialisation. +Le transport se fait via SSH vers le sandbox OpenShell, mais le Plugin possède le cycle de vie du sandbox et la synchronisation miroir facultative. -**`setupCommand`** s’exécute une fois après la création du conteneur (via `sh -lc`). Nécessite une sortie réseau, une racine accessible en écriture et l’utilisateur root. +**`setupCommand`** s’exécute une fois après la création du conteneur (via `sh -lc`). Nécessite une sortie réseau, une racine inscriptible et l’utilisateur root. **Les conteneurs utilisent par défaut `network: "none"`** — définissez `"bridge"` (ou un réseau bridge personnalisé) si l’agent a besoin d’un accès sortant. `"host"` est bloqué. `"container:"` est bloqué par défaut sauf si vous définissez explicitement -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (solution de secours). +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (mesure d’urgence). -**Les pièces jointes entrantes** sont placées dans `media/inbound/*` dans l’espace de travail actif. +**Les pièces jointes entrantes** sont placées dans `media/inbound/*` dans le workspace actif. -**`docker.binds`** monte des répertoires hôte supplémentaires ; les montages globaux et par agent sont fusionnés. +**`docker.binds`** monte des répertoires d’hôte supplémentaires ; les montages globaux et par agent sont fusionnés. -**Navigateur sandboxé** (`sandbox.browser.enabled`) : Chromium + CDP dans un conteneur. L’URL noVNC est injectée dans le prompt système. Ne nécessite pas `browser.enabled` dans `openclaw.json`. +**Navigateur sandboxé** (`sandbox.browser.enabled`) : Chromium + CDP dans un conteneur. L’URL noVNC est injectée dans le prompt système. Ne nécessite pas `browser.enabled` dans `openclaw.json`. L’accès observateur noVNC utilise l’authentification VNC par défaut et OpenClaw émet une URL à jeton de courte durée (au lieu d’exposer le mot de passe dans l’URL partagée). -- `allowHostControl: false` (par défaut) empêche les sessions sandboxées de cibler le navigateur hôte. +- `allowHostControl: false` (par défaut) empêche les sessions sandboxées de cibler le navigateur de l’hôte. - `network` vaut par défaut `openclaw-sandbox-browser` (réseau bridge dédié). Définissez `bridge` uniquement lorsque vous souhaitez explicitement une connectivité bridge globale. -- `cdpSourceRange` restreint facultativement l’entrée CDP à la bordure du conteneur à une plage CIDR (par exemple `172.21.0.1/32`). -- `sandbox.browser.binds` monte des répertoires hôte supplémentaires uniquement dans le conteneur du navigateur sandboxé. Lorsqu’il est défini (y compris `[]`), il remplace `docker.binds` pour le conteneur du navigateur. -- Les valeurs par défaut de lancement sont définies dans `scripts/sandbox-browser-entrypoint.sh` et ajustées pour les hôtes conteneurisés : +- `cdpSourceRange` restreint éventuellement l’entrée CDP à la périphérie du conteneur à une plage CIDR (par exemple `172.21.0.1/32`). +- `sandbox.browser.binds` monte des répertoires d’hôte supplémentaires uniquement dans le conteneur du navigateur sandboxé. Lorsqu’il est défini (y compris `[]`), il remplace `docker.binds` pour le conteneur du navigateur. +- Les valeurs par défaut de lancement sont définies dans `scripts/sandbox-browser-entrypoint.sh` et ajustées pour les hôtes conteneurisés : - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1576,24 +1576,24 @@ L’accès observateur noVNC utilise l’authentification VNC par défaut et Ope - `--disable-extensions` (activé par défaut) - `--disable-3d-apis`, `--disable-software-rasterizer` et `--disable-gpu` sont activés par défaut et peuvent être désactivés avec - `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` si l’usage de WebGL/3D l’exige. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` réactive les extensions si votre flux de travail + `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` si l’usage WebGL/3D l’exige. + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` réactive les extensions si votre workflow en dépend. - `--renderer-process-limit=2` peut être modifié avec - `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=` ; définissez `0` pour utiliser la + `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=` ; définissez `0` pour utiliser la limite de processus par défaut de Chromium. - - plus `--no-sandbox` et `--disable-setuid-sandbox` lorsque `noSandbox` est activé. - - Les valeurs par défaut sont la base de l’image du conteneur ; utilisez une image de navigateur personnalisée avec un point d’entrée personnalisé pour modifier les valeurs par défaut du conteneur. + - ainsi que `--no-sandbox` et `--disable-setuid-sandbox` lorsque `noSandbox` est activé. + - Les valeurs par défaut sont la base de l’image conteneur ; utilisez une image de navigateur personnalisée avec un point d’entrée personnalisé pour modifier les valeurs par défaut du conteneur. Le sandboxing du navigateur et `sandbox.docker.binds` sont disponibles uniquement avec Docker. -Construire les images : +Construire les images : ```bash -scripts/sandbox-setup.sh # image sandbox principale -scripts/sandbox-browser-setup.sh # image de navigateur facultative +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` ### `agents.list` (remplacements par agent) @@ -1645,27 +1645,27 @@ scripts/sandbox-browser-setup.sh # image de navigateur facultative } ``` -- `id` : ID d’agent stable (obligatoire). -- `default` : lorsque plusieurs sont définis, le premier l’emporte (un avertissement est enregistré). Si aucun n’est défini, la première entrée de la liste est l’agent par défaut. -- `model` : la forme chaîne remplace uniquement `primary` ; la forme objet `{ primary, fallbacks }` remplace les deux (`[]` désactive les basculements globaux). Les tâches cron qui ne remplacent que `primary` héritent toujours des basculements par défaut sauf si vous définissez `fallbacks: []`. -- `params` : paramètres de flux par agent fusionnés au-dessus de l’entrée de modèle sélectionnée dans `agents.defaults.models`. Utilisez-les pour des remplacements propres à l’agent comme `cacheRetention`, `temperature` ou `maxTokens` sans dupliquer tout le catalogue de modèles. -- `skills` : liste d’autorisations Skills facultative par agent. Si elle est omise, l’agent hérite de `agents.defaults.skills` lorsqu’il est défini ; une liste explicite remplace les valeurs par défaut au lieu d’être fusionnée, et `[]` signifie aucun Skills. -- `thinkingDefault` : niveau thinking par défaut facultatif par agent (`off | minimal | low | medium | high | xhigh | adaptive`). Remplace `agents.defaults.thinkingDefault` pour cet agent lorsqu’aucun remplacement par message ou session n’est défini. -- `reasoningDefault` : visibilité reasoning par défaut facultative par agent (`on | off | stream`). S’applique lorsqu’aucun remplacement reasoning par message ou session n’est défini. -- `fastModeDefault` : valeur par défaut facultative par agent pour le mode rapide (`true | false`). S’applique lorsqu’aucun remplacement du mode rapide par message ou session n’est défini. -- `embeddedHarness` : remplacement facultatif par agent de la politique de harness de bas niveau. Utilisez `{ runtime: "codex", fallback: "none" }` pour rendre un agent uniquement Codex tandis que les autres agents conservent le retour PI par défaut. -- `runtime` : descripteur de runtime facultatif par agent. Utilisez `type: "acp"` avec les valeurs par défaut `runtime.acp` (`agent`, `backend`, `mode`, `cwd`) lorsque l’agent doit utiliser par défaut des sessions de harness ACP. -- `identity.avatar` : chemin relatif à l’espace de travail, URL `http(s)` ou URI `data:`. -- `identity` dérive des valeurs par défaut : `ackReaction` à partir de `emoji`, `mentionPatterns` à partir de `name`/`emoji`. -- `subagents.allowAgents` : liste d’autorisations des ID d’agent pour `sessions_spawn` (`["*"]` = n’importe lequel ; par défaut : même agent uniquement). -- Garde d’héritage du sandbox : si la session demandeuse est sandboxée, `sessions_spawn` rejette les cibles qui s’exécuteraient sans sandbox. -- `subagents.requireAgentId` : lorsque défini à true, bloque les appels `sessions_spawn` qui omettent `agentId` (force une sélection explicite du profil ; par défaut : false). +- `id` : ID d’agent stable (obligatoire). +- `default` : lorsque plusieurs valeurs sont définies, la première gagne (avertissement journalisé). Si aucune n’est définie, la première entrée de la liste est la valeur par défaut. +- `model` : la forme chaîne remplace uniquement `primary` ; la forme objet `{ primary, fallbacks }` remplace les deux (`[]` désactive les replis globaux). Les tâches Cron qui ne remplacent que `primary` héritent toujours des replis par défaut sauf si vous définissez `fallbacks: []`. +- `params` : paramètres de flux par agent fusionnés au-dessus de l’entrée de modèle sélectionnée dans `agents.defaults.models`. Utilisez-les pour des remplacements spécifiques à l’agent comme `cacheRetention`, `temperature` ou `maxTokens` sans dupliquer tout le catalogue de modèles. +- `skills` : liste d’autorisations facultative de Skills par agent. Si elle est omise, l’agent hérite de `agents.defaults.skills` lorsqu’il est défini ; une liste explicite remplace les valeurs par défaut au lieu de fusionner, et `[]` signifie aucune Skills. +- `thinkingDefault` : niveau de thinking facultatif par défaut par agent (`off | minimal | low | medium | high | xhigh | adaptive`). Remplace `agents.defaults.thinkingDefault` pour cet agent lorsqu’aucun remplacement par message ou par session n’est défini. +- `reasoningDefault` : visibilité de reasoning facultative par défaut par agent (`on | off | stream`). S’applique lorsqu’aucun remplacement de reasoning par message ou par session n’est défini. +- `fastModeDefault` : valeur par défaut facultative par agent pour le mode rapide (`true | false`). S’applique lorsqu’aucun remplacement de mode rapide par message ou par session n’est défini. +- `embeddedHarness` : remplacement facultatif par agent de la politique de harness de bas niveau. Utilisez `{ runtime: "codex", fallback: "none" }` pour rendre un agent Codex-only tandis que les autres agents conservent le repli PI par défaut. +- `runtime` : descripteur de runtime facultatif par agent. Utilisez `type: "acp"` avec les valeurs par défaut `runtime.acp` (`agent`, `backend`, `mode`, `cwd`) lorsque l’agent doit utiliser par défaut des sessions de harness ACP. +- `identity.avatar` : chemin relatif au workspace, URL `http(s)` ou URI `data:`. +- `identity` dérive les valeurs par défaut : `ackReaction` depuis `emoji`, `mentionPatterns` depuis `name`/`emoji`. +- `subagents.allowAgents` : liste d’autorisations des ID d’agent pour `sessions_spawn` (`["*"]` = tous ; par défaut : même agent uniquement). +- Garde-fou d’héritage sandbox : si la session demandeuse est sandboxée, `sessions_spawn` rejette les cibles qui s’exécuteraient sans sandbox. +- `subagents.requireAgentId` : lorsqu’il vaut true, bloque les appels `sessions_spawn` qui omettent `agentId` (force la sélection explicite du profil ; par défaut : false). --- -## Routage multi-agent +## Routage multi-agents -Exécutez plusieurs agents isolés dans une seule passerelle. Voir [Multi-Agent](/fr/concepts/multi-agent). +Exécutez plusieurs agents isolés à l’intérieur d’un seul Gateway. Voir [Multi-Agent](/fr/concepts/multi-agent). ```json5 { @@ -1684,25 +1684,25 @@ Exécutez plusieurs agents isolés dans une seule passerelle. Voir [Multi-Agent] ### Champs de correspondance des liaisons -- `type` (facultatif) : `route` pour le routage normal (type manquant = route par défaut), `acp` pour les liaisons persistantes de conversation ACP. +- `type` (facultatif) : `route` pour le routage normal (l’absence de type vaut route par défaut), `acp` pour les liaisons de conversation ACP persistantes. - `match.channel` (obligatoire) -- `match.accountId` (facultatif ; `*` = n’importe quel compte ; omis = compte par défaut) -- `match.peer` (facultatif ; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (facultatif ; spécifique au canal) -- `acp` (facultatif ; uniquement pour `type: "acp"`) : `{ mode, label, cwd, backend }` +- `match.accountId` (facultatif ; `*` = tout compte ; omis = compte par défaut) +- `match.peer` (facultatif ; `{ kind: direct|group|channel, id }`) +- `match.guildId` / `match.teamId` (facultatif ; spécifique au canal) +- `acp` (facultatif ; uniquement pour `type: "acp"`) : `{ mode, label, cwd, backend }` -**Ordre de correspondance déterministe :** +**Ordre de correspondance déterministe :** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` -4. `match.accountId` (exact, sans pair/serveur/équipe) +4. `match.accountId` (exact, sans pair/guilde/équipe) 5. `match.accountId: "*"` (à l’échelle du canal) 6. Agent par défaut -Dans chaque niveau, la première entrée `bindings` correspondante l’emporte. +À l’intérieur de chaque niveau, la première entrée `bindings` correspondante gagne. -Pour les entrées `type: "acp"`, OpenClaw résout par identité exacte de conversation (`match.channel` + compte + `match.peer.id`) et n’utilise pas l’ordre de niveaux de routage ci-dessus. +Pour les entrées `type: "acp"`, OpenClaw résout par identité exacte de conversation (`match.channel` + compte + `match.peer.id`) et n’utilise pas l’ordre de niveau des liaisons de routage ci-dessus. ### Profils d’accès par agent @@ -1724,7 +1724,7 @@ Pour les entrées `type: "acp"`, OpenClaw résout par identité exacte de conver - + ```json5 { @@ -1799,7 +1799,7 @@ Pour les entrées `type: "acp"`, OpenClaw résout par identité exacte de conver -Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour les détails de priorité. +Voir [Sandbox et outils multi-agents](/fr/tools/multi-agent-sandbox-tools) pour les détails de priorité. --- @@ -1852,35 +1852,35 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l -- **`scope`** : stratégie de regroupement de session de base pour les contextes de discussion de groupe. - - `per-sender` (par défaut) : chaque expéditeur obtient une session isolée dans un contexte de canal. - - `global` : tous les participants d’un contexte de canal partagent une seule session (à utiliser uniquement lorsqu’un contexte partagé est souhaité). -- **`dmScope`** : comment les DM sont regroupés. - - `main` : tous les DM partagent la session principale. - - `per-peer` : isole par ID d’expéditeur entre les canaux. - - `per-channel-peer` : isole par canal + expéditeur (recommandé pour les boîtes de réception multi-utilisateurs). - - `per-account-channel-peer` : isole par compte + canal + expéditeur (recommandé pour le multi-compte). -- **`identityLinks`** : mappe des ID canoniques vers des pairs préfixés par fournisseur pour le partage de session inter-canaux. -- **`reset`** : politique principale de réinitialisation. `daily` réinitialise à `atHour` heure locale ; `idle` réinitialise après `idleMinutes`. Lorsque les deux sont configurés, celui qui expire en premier l’emporte. -- **`resetByType`** : remplacements par type (`direct`, `group`, `thread`). L’ancien alias `dm` est accepté pour `direct`. -- **`parentForkMaxTokens`** : nombre maximal de `totalTokens` de session parente autorisé lors de la création d’une session de fil forkée (par défaut `100000`). - - Si `totalTokens` du parent est supérieur à cette valeur, OpenClaw démarre une nouvelle session de fil au lieu d’hériter de l’historique de transcription du parent. - - Définissez `0` pour désactiver cette protection et toujours autoriser le fork de la session parente. -- **`mainKey`** : champ hérité. Le runtime utilise toujours `"main"` pour le compartiment principal de discussion directe. -- **`agentToAgent.maxPingPongTurns`** : nombre maximal de tours de réponse aller-retour entre agents pendant les échanges agent-à-agent (entier, plage : `0`–`5`). `0` désactive l’enchaînement ping-pong. -- **`sendPolicy`** : correspondance par `channel`, `chatType` (`direct|group|channel`, avec l’ancien alias `dm`), `keyPrefix` ou `rawKeyPrefix`. Le premier refus l’emporte. -- **`maintenance`** : contrôles de nettoyage + de rétention du stockage de sessions. - - `mode` : `warn` émet uniquement des avertissements ; `enforce` applique le nettoyage. - - `pruneAfter` : seuil d’ancienneté pour les entrées obsolètes (par défaut `30d`). - - `maxEntries` : nombre maximal d’entrées dans `sessions.json` (par défaut `500`). - - `rotateBytes` : fait pivoter `sessions.json` lorsqu’il dépasse cette taille (par défaut `10mb`). - - `resetArchiveRetention` : rétention des archives de transcription `*.reset.`. Par défaut, utilise `pruneAfter` ; définissez `false` pour désactiver. - - `maxDiskBytes` : budget disque facultatif pour le répertoire de sessions. En mode `warn`, il journalise des avertissements ; en mode `enforce`, il supprime d’abord les artefacts/sessions les plus anciens. - - `highWaterBytes` : cible facultative après nettoyage du budget. Par défaut, `80%` de `maxDiskBytes`. -- **`threadBindings`** : valeurs globales par défaut pour les fonctionnalités de session liées aux fils. - - `enabled` : interrupteur maître par défaut (les fournisseurs peuvent remplacer ; Discord utilise `channels.discord.threadBindings.enabled`) - - `idleHours` : retrait automatique du focus par défaut après inactivité en heures (`0` désactive ; les fournisseurs peuvent remplacer) - - `maxAgeHours` : âge maximal strict par défaut en heures (`0` désactive ; les fournisseurs peuvent remplacer) +- **`scope`** : stratégie de groupement de session de base pour les contextes de discussion de groupe. + - `per-sender` (par défaut) : chaque expéditeur obtient une session isolée dans un contexte de canal. + - `global` : tous les participants d’un contexte de canal partagent une seule session (à utiliser uniquement lorsqu’un contexte partagé est souhaité). +- **`dmScope`** : manière dont les DM sont groupés. + - `main` : tous les DM partagent la session principale. + - `per-peer` : isole par ID d’expéditeur entre les canaux. + - `per-channel-peer` : isole par canal + expéditeur (recommandé pour les boîtes de réception multi-utilisateurs). + - `per-account-channel-peer` : isole par compte + canal + expéditeur (recommandé pour le multi-compte). +- **`identityLinks`** : mappe les ID canoniques vers des pairs préfixés par fournisseur pour le partage de session inter-canaux. +- **`reset`** : politique de réinitialisation principale. `daily` réinitialise à `atHour` heure locale ; `idle` réinitialise après `idleMinutes`. Lorsque les deux sont configurés, celui qui expire en premier l’emporte. +- **`resetByType`** : remplacements par type (`direct`, `group`, `thread`). L’ancien `dm` est accepté comme alias de `direct`. +- **`parentForkMaxTokens`** : `totalTokens` maximal de la session parente autorisé lors de la création d’une session de fil forkée (par défaut `100000`). + - Si le `totalTokens` parent est supérieur à cette valeur, OpenClaw démarre une nouvelle session de fil au lieu d’hériter de l’historique de transcription parent. + - Définissez `0` pour désactiver cette protection et toujours autoriser le fork parent. +- **`mainKey`** : champ hérité. Le runtime utilise toujours `"main"` pour le compartiment principal de discussion directe. +- **`agentToAgent.maxPingPongTurns`** : nombre maximal de tours de réponse réciproque entre agents lors des échanges agent-à-agent (entier, plage : `0`–`5`). `0` désactive l’enchaînement ping-pong. +- **`sendPolicy`** : correspondance par `channel`, `chatType` (`direct|group|channel`, avec l’ancien alias `dm`), `keyPrefix` ou `rawKeyPrefix`. Le premier refus l’emporte. +- **`maintenance`** : contrôles de nettoyage + rétention du stockage de session. + - `mode` : `warn` émet uniquement des avertissements ; `enforce` applique le nettoyage. + - `pruneAfter` : seuil d’ancienneté pour les entrées obsolètes (par défaut `30d`). + - `maxEntries` : nombre maximal d’entrées dans `sessions.json` (par défaut `500`). + - `rotateBytes` : fait tourner `sessions.json` lorsqu’il dépasse cette taille (par défaut `10mb`). + - `resetArchiveRetention` : rétention des archives de transcription `*.reset.`. Par défaut, prend `pruneAfter` ; définissez `false` pour désactiver. + - `maxDiskBytes` : budget disque facultatif pour le répertoire des sessions. En mode `warn`, cela journalise des avertissements ; en mode `enforce`, cela supprime d’abord les artefacts/sessions les plus anciens. + - `highWaterBytes` : cible facultative après nettoyage du budget. Par défaut, vaut `80%` de `maxDiskBytes`. +- **`threadBindings`** : valeurs par défaut globales pour les fonctionnalités de session liées aux fils. + - `enabled` : interrupteur maître par défaut (les fournisseurs peuvent remplacer ; Discord utilise `channels.discord.threadBindings.enabled`) + - `idleHours` : valeur par défaut du retrait automatique du focus après inactivité, en heures (`0` désactive ; les fournisseurs peuvent remplacer) + - `maxAgeHours` : valeur par défaut de l’âge maximal strict en heures (`0` désactive ; les fournisseurs peuvent remplacer) @@ -1918,36 +1918,36 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l ### Préfixe de réponse -Remplacements par canal/compte : `channels..responsePrefix`, `channels..accounts..responsePrefix`. +Remplacements par canal/compte : `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Résolution (la plus spécifique l’emporte) : compte → canal → global. `""` désactive et arrête la cascade. `"auto"` dérive `[{identity.name}]`. +Résolution (le plus spécifique l’emporte) : compte → canal → global. `""` désactive et arrête la cascade. `"auto"` dérive `[{identity.name}]`. -**Variables de modèle :** +**Variables de modèle :** -| Variable | Description | Exemple | -| ----------------- | ----------------------- | --------------------------- | -| `{model}` | Nom court du modèle | `claude-opus-4-6` | +| Variable | Description | Exemple | +| ----------------- | ---------------------- | --------------------------- | +| `{model}` | Nom court du modèle | `claude-opus-4-6` | | `{modelFull}` | Identifiant complet du modèle | `anthropic/claude-opus-4-6` | -| `{provider}` | Nom du fournisseur | `anthropic` | -| `{thinkingLevel}` | Niveau de réflexion actuel | `high`, `low`, `off` | +| `{provider}` | Nom du fournisseur | `anthropic` | +| `{thinkingLevel}` | Niveau de thinking actuel | `high`, `low`, `off` | | `{identity.name}` | Nom d’identité de l’agent | (identique à `"auto"`) | Les variables sont insensibles à la casse. `{think}` est un alias de `{thinkingLevel}`. ### Réaction d’accusé -- Utilise par défaut `identity.emoji` de l’agent actif, sinon `"👀"`. Définissez `""` pour désactiver. -- Remplacements par canal : `channels..ackReaction`, `channels..accounts..ackReaction`. -- Ordre de résolution : compte → canal → `messages.ackReaction` → secours via identity. -- Portée : `group-mentions` (par défaut), `group-all`, `direct`, `all`. -- `removeAckAfterReply` supprime l’accusé après réponse sur Slack, Discord et Telegram. -- `messages.statusReactions.enabled` active les réactions d’état de cycle de vie sur Slack, Discord et Telegram. - Sur Slack et Discord, une valeur non définie conserve les réactions d’état activées lorsque les réactions d’accusé sont actives. - Sur Telegram, définissez-le explicitement sur `true` pour activer les réactions d’état de cycle de vie. +- Vaut par défaut l’`identity.emoji` de l’agent actif, sinon `"👀"`. Définissez `""` pour désactiver. +- Remplacements par canal : `channels..ackReaction`, `channels..accounts..ackReaction`. +- Ordre de résolution : compte → canal → `messages.ackReaction` → repli d’identité. +- Portée : `group-mentions` (par défaut), `group-all`, `direct`, `all`. +- `removeAckAfterReply` : supprime l’accusé après la réponse sur Slack, Discord et Telegram. +- `messages.statusReactions.enabled` : active les réactions de statut de cycle de vie sur Slack, Discord et Telegram. + Sur Slack et Discord, lorsque non défini, les réactions de statut restent activées lorsque les réactions d’accusé sont actives. + Sur Telegram, définissez-le explicitement sur `true` pour activer les réactions de statut de cycle de vie. ### Debounce entrant -Regroupe les messages textuels rapides du même expéditeur en un seul tour d’agent. Les médias/pièces jointes déclenchent immédiatement l’envoi. Les commandes de contrôle contournent le debounce. +Regroupe les messages rapides en texte seul d’un même expéditeur en un seul tour d’agent. Les médias/pièces jointes déclenchent immédiatement l’envoi. Les commandes de contrôle contournent le debounce. ### TTS (synthèse vocale) @@ -1990,12 +1990,12 @@ Regroupe les messages textuels rapides du même expéditeur en un seul tour d’ } ``` -- `auto` contrôle le mode auto-TTS par défaut : `off`, `always`, `inbound` ou `tagged`. `/tts on|off` peut remplacer les préférences locales, et `/tts status` affiche l’état effectif. +- `auto` contrôle le mode auto-TTS par défaut : `off`, `always`, `inbound` ou `tagged`. `/tts on|off` peut remplacer les préférences locales, et `/tts status` affiche l’état effectif. - `summaryModel` remplace `agents.defaults.model.primary` pour le résumé automatique. -- `modelOverrides` est activé par défaut ; `modelOverrides.allowProvider` vaut `false` par défaut (activation explicite requise). -- Les clés API utilisent `ELEVENLABS_API_KEY`/`XI_API_KEY` et `OPENAI_API_KEY` comme solutions de secours. -- `openai.baseUrl` remplace le point de terminaison TTS OpenAI. L’ordre de résolution est : configuration, puis `OPENAI_TTS_BASE_URL`, puis `https://api.openai.com/v1`. -- Lorsque `openai.baseUrl` pointe vers un point de terminaison non OpenAI, OpenClaw le traite comme un serveur TTS compatible OpenAI et assouplit la validation du modèle/de la voix. +- `modelOverrides` est activé par défaut ; `modelOverrides.allowProvider` vaut par défaut `false` (activation explicite requise). +- Les clés API reviennent à `ELEVENLABS_API_KEY`/`XI_API_KEY` et `OPENAI_API_KEY`. +- `openai.baseUrl` remplace le point de terminaison TTS OpenAI. L’ordre de résolution est la configuration, puis `OPENAI_TTS_BASE_URL`, puis `https://api.openai.com/v1`. +- Lorsque `openai.baseUrl` pointe vers un point de terminaison autre qu’OpenAI, OpenClaw le traite comme un serveur TTS compatible OpenAI et assouplit la validation du modèle/de la voix. --- @@ -2025,13 +2025,13 @@ Valeurs par défaut du mode Talk (macOS/iOS/Android). } ``` -- `talk.provider` doit correspondre à une clé dans `talk.providers` lorsque plusieurs fournisseurs Talk sont configurés. -- Les anciennes clés Talk plates (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) sont uniquement conservées pour compatibilité et sont migrées automatiquement vers `talk.providers.`. -- Les ID de voix utilisent `ELEVENLABS_VOICE_ID` ou `SAG_VOICE_ID` comme solution de secours. +- `talk.provider` doit correspondre à une clé de `talk.providers` lorsque plusieurs fournisseurs Talk sont configurés. +- Les anciennes clés Talk plates (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) sont uniquement maintenues pour compatibilité et sont automatiquement migrées vers `talk.providers.`. +- Les ID de voix reviennent à `ELEVENLABS_VOICE_ID` ou `SAG_VOICE_ID`. - `providers.*.apiKey` accepte des chaînes en texte brut ou des objets SecretRef. -- La solution de secours `ELEVENLABS_API_KEY` s’applique uniquement lorsqu’aucune clé API Talk n’est configurée. +- Le repli `ELEVENLABS_API_KEY` s’applique uniquement lorsqu’aucune clé API Talk n’est configurée. - `providers.*.voiceAliases` permet aux directives Talk d’utiliser des noms conviviaux. -- `silenceTimeoutMs` contrôle combien de temps le mode Talk attend après le silence de l’utilisateur avant d’envoyer la transcription. Non défini, il conserve la fenêtre de pause par défaut de la plateforme (`700 ms sur macOS et Android, 900 ms sur iOS`). +- `silenceTimeoutMs` contrôle combien de temps le mode Talk attend après le silence de l’utilisateur avant d’envoyer la transcription. Lorsqu’il n’est pas défini, la fenêtre de pause par défaut de la plateforme est conservée (`700 ms sur macOS et Android, 900 ms sur iOS`). --- @@ -2039,7 +2039,7 @@ Valeurs par défaut du mode Talk (macOS/iOS/Android). ### Profils d’outils -`tools.profile` définit une liste d’autorisations de base avant `tools.allow`/`tools.deny` : +`tools.profile` définit une liste d’autorisations de base avant `tools.allow`/`tools.deny` : L’onboarding local définit par défaut les nouvelles configurations locales sur `tools.profile: "coding"` lorsqu’il n’est pas défini (les profils explicites existants sont conservés). @@ -2052,20 +2052,20 @@ L’onboarding local définit par défaut les nouvelles configurations locales s ### Groupes d’outils -| Groupe | Outils | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| `group:runtime` | `exec`, `process`, `code_execution` (`bash` est accepté comme alias de `exec`) | -| `group:fs` | `read`, `write`, `edit`, `apply_patch` | +| Groupe | Outils | +| ------------------ | --------------------------------------------------------------------------------------------------------------------- | +| `group:runtime` | `exec`, `process`, `code_execution` (`bash` est accepté comme alias de `exec`) | +| `group:fs` | `read`, `write`, `edit`, `apply_patch` | | `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` | -| `group:memory` | `memory_search`, `memory_get` | -| `group:web` | `web_search`, `x_search`, `web_fetch` | -| `group:ui` | `browser`, `canvas` | -| `group:automation` | `cron`, `gateway` | -| `group:messaging` | `message` | -| `group:nodes` | `nodes` | -| `group:agents` | `agents_list` | -| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | -| `group:openclaw` | Tous les outils intégrés (exclut les plugins fournisseur) | +| `group:memory` | `memory_search`, `memory_get` | +| `group:web` | `web_search`, `x_search`, `web_fetch` | +| `group:ui` | `browser`, `canvas` | +| `group:automation` | `cron`, `gateway` | +| `group:messaging` | `message` | +| `group:nodes` | `nodes` | +| `group:agents` | `agents_list` | +| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | +| `group:openclaw` | Tous les outils intégrés (exclut les Plugins de fournisseur) | ### `tools.allow` / `tools.deny` @@ -2079,7 +2079,7 @@ Politique globale d’autorisation/refus des outils (le refus l’emporte). Inse ### `tools.byProvider` -Restreint davantage les outils pour des fournisseurs ou modèles spécifiques. Ordre : profil de base → profil du fournisseur → autorisation/refus. +Restreint davantage les outils pour des fournisseurs ou modèles spécifiques. Ordre : profil de base → profil fournisseur → autorisation/refus. ```json5 { @@ -2095,7 +2095,7 @@ Restreint davantage les outils pour des fournisseurs ou modèles spécifiques. O ### `tools.elevated` -Contrôle l’accès `exec` élevé hors du sandbox : +Contrôle l’accès `exec` élevé en dehors du sandbox : ```json5 { @@ -2112,7 +2112,7 @@ Contrôle l’accès `exec` élevé hors du sandbox : ``` - Le remplacement par agent (`agents.list[].tools.elevated`) ne peut que restreindre davantage. -- `/elevated on|off|ask|full` enregistre l’état par session ; les directives en ligne s’appliquent à un seul message. +- `/elevated on|off|ask|full` stocke l’état par session ; les directives inline s’appliquent à un seul message. - `exec` élevé contourne le sandboxing et utilise le chemin d’échappement configuré (`gateway` par défaut, ou `node` lorsque la cible `exec` est `node`). ### `tools.exec` @@ -2159,13 +2159,13 @@ Les paramètres peuvent être définis globalement dans `tools.loopDetection` et } ``` -- `historySize` : historique maximal des appels d’outil conservé pour l’analyse des boucles. -- `warningThreshold` : seuil d’avertissement pour les motifs répétitifs sans progression. -- `criticalThreshold` : seuil répétitif plus élevé pour bloquer les boucles critiques. -- `globalCircuitBreakerThreshold` : seuil d’arrêt dur pour toute exécution sans progression. -- `detectors.genericRepeat` : avertit sur les appels répétés au même outil/avec les mêmes arguments. -- `detectors.knownPollNoProgress` : avertit/bloque sur les outils de poll connus (`process.poll`, `command_status`, etc.). -- `detectors.pingPong` : avertit/bloque sur les motifs alternés par paires sans progression. +- `historySize` : historique maximal des appels d’outils conservé pour l’analyse de boucle. +- `warningThreshold` : seuil de motif répétitif sans progression pour les avertissements. +- `criticalThreshold` : seuil répétitif plus élevé pour bloquer les boucles critiques. +- `globalCircuitBreakerThreshold` : seuil d’arrêt dur pour toute exécution sans progression. +- `detectors.genericRepeat` : avertit en cas d’appels répétés au même outil/avec les mêmes arguments. +- `detectors.knownPollNoProgress` : avertit/bloque les outils de polling connus (`process.poll`, `command_status`, etc.). +- `detectors.pingPong` : avertit/bloque les motifs alternés sans progression par paires. - Si `warningThreshold >= criticalThreshold` ou `criticalThreshold >= globalCircuitBreakerThreshold`, la validation échoue. ### `tools.web` @@ -2200,7 +2200,7 @@ Les paramètres peuvent être définis globalement dans `tools.loopDetection` et ### `tools.media` -Configure la compréhension des médias entrants (image/audio/vidéo) : +Configure la compréhension des médias entrants (image/audio/vidéo) : ```json5 { @@ -2232,32 +2232,32 @@ Configure la compréhension des médias entrants (image/audio/vidéo) : } ``` - + -**Entrée fournisseur** (`type: "provider"` ou omis) : +**Entrée fournisseur** (`type: "provider"` ou omis) : -- `provider` : ID du fournisseur d’API (`openai`, `anthropic`, `google`/`gemini`, `groq`, etc.) -- `model` : remplacement de l’ID du modèle -- `profile` / `preferredProfile` : sélection de profil `auth-profiles.json` +- `provider` : ID du fournisseur d’API (`openai`, `anthropic`, `google`/`gemini`, `groq`, etc.) +- `model` : remplacement de l’ID du modèle +- `profile` / `preferredProfile` : sélection du profil `auth-profiles.json` -**Entrée CLI** (`type: "cli"`) : +**Entrée CLI** (`type: "cli"`) : -- `command` : exécutable à lancer -- `args` : arguments à modèle (prend en charge `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, etc.) +- `command` : exécutable à lancer +- `args` : arguments à gabarit (prend en charge `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, etc.) -**Champs communs :** +**Champs communs :** -- `capabilities` : liste facultative (`image`, `audio`, `video`). Valeurs par défaut : `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. -- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language` : remplacements par entrée. -- En cas d’échec, le système passe à l’entrée suivante. +- `capabilities` : liste facultative (`image`, `audio`, `video`). Valeurs par défaut : `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. +- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language` : remplacements par entrée. +- En cas d’échec, bascule vers l’entrée suivante. -L’authentification du fournisseur suit l’ordre standard : `auth-profiles.json` → variables d’environnement → `models.providers.*.apiKey`. +L’authentification du fournisseur suit l’ordre standard : `auth-profiles.json` → variables d’environnement → `models.providers.*.apiKey`. -**Champs d’exécution asynchrone :** +**Champs de fin asynchrone :** -- `asyncCompletion.directSend` : lorsque défini à `true`, les tâches asynchrones terminées `music_generate` - et `video_generate` tentent d’abord une livraison directe au canal. Par défaut : `false` - (ancien chemin de réveil de session demandeuse/livraison par modèle). +- `asyncCompletion.directSend` : lorsqu’il vaut `true`, les tâches asynchrones terminées `music_generate` + et `video_generate` essaient d’abord une livraison directe au canal. Par défaut : `false` + (ancien chemin de réveil de session demandeuse/livraison du modèle). @@ -2278,7 +2278,7 @@ L’authentification du fournisseur suit l’ordre standard : `auth-profiles.jso Contrôle quelles sessions peuvent être ciblées par les outils de session (`sessions_list`, `sessions_history`, `sessions_send`). -Par défaut : `tree` (session actuelle + sessions qu’elle a lancées, comme les sous-agents). +Par défaut : `tree` (session actuelle + sessions créées par elle, telles que les sous-agents). ```json5 { @@ -2291,17 +2291,17 @@ Par défaut : `tree` (session actuelle + sessions qu’elle a lancées, comme le } ``` -Remarques : +Remarques : -- `self` : uniquement la clé de session actuelle. -- `tree` : session actuelle + sessions lancées par la session actuelle (sous-agents). -- `agent` : toute session appartenant à l’ID d’agent actuel (peut inclure d’autres utilisateurs si vous exécutez des sessions par expéditeur sous le même ID d’agent). -- `all` : toute session. Le ciblage inter-agents nécessite toujours `tools.agentToAgent`. -- Restriction sandbox : lorsque la session actuelle est sandboxée et que `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, la visibilité est forcée à `tree` même si `tools.sessions.visibility="all"`. +- `self` : uniquement la clé de session actuelle. +- `tree` : session actuelle + sessions créées par la session actuelle (sous-agents). +- `agent` : toute session appartenant à l’ID d’agent actuel (peut inclure d’autres utilisateurs si vous exécutez des sessions par expéditeur sous le même ID d’agent). +- `all` : toute session. Le ciblage inter-agents nécessite toujours `tools.agentToAgent`. +- Limitation sandbox : lorsque la session actuelle est sandboxée et que `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, la visibilité est forcée à `tree` même si `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` -Contrôle la prise en charge des pièces jointes en ligne pour `sessions_spawn`. +Contrôle la prise en charge des pièces jointes inline pour `sessions_spawn`. ```json5 { @@ -2319,18 +2319,18 @@ Contrôle la prise en charge des pièces jointes en ligne pour `sessions_spawn`. } ``` -Remarques : +Remarques : -- Les pièces jointes ne sont prises en charge que pour `runtime: "subagent"`. Le runtime ACP les rejette. -- Les fichiers sont matérialisés dans l’espace de travail enfant à `.openclaw/attachments//` avec un `.manifest.json`. -- Le contenu des pièces jointes est automatiquement masqué dans la persistance de transcription. -- Les entrées base64 sont validées avec des vérifications strictes d’alphabet/de padding et une protection de taille avant décodage. -- Les permissions de fichiers sont `0700` pour les répertoires et `0600` pour les fichiers. -- Le nettoyage suit la politique `cleanup` : `delete` supprime toujours les pièces jointes ; `keep` ne les conserve que lorsque `retainOnSessionKeep: true`. +- Les pièces jointes sont prises en charge uniquement pour `runtime: "subagent"`. Le runtime ACP les rejette. +- Les fichiers sont matérialisés dans le workspace enfant sous `.openclaw/attachments//` avec un `.manifest.json`. +- Le contenu des pièces jointes est automatiquement expurgé de la persistance de la transcription. +- Les entrées Base64 sont validées avec des vérifications strictes d’alphabet/de padding et une protection de taille avant décodage. +- Les permissions de fichier sont `0700` pour les répertoires et `0600` pour les fichiers. +- Le nettoyage suit la politique `cleanup` : `delete` supprime toujours les pièces jointes ; `keep` ne les conserve que lorsque `retainOnSessionKeep: true`. ### `tools.experimental` -Indicateurs expérimentaux pour les outils intégrés. Désactivés par défaut sauf lorsqu’une règle d’auto-activation stricte et agentique GPT-5 s’applique. +Indicateurs expérimentaux des outils intégrés. Désactivés par défaut sauf lorsqu’une règle d’activation automatique stricte-agentique GPT-5 s’applique. ```json5 { @@ -2342,11 +2342,11 @@ Indicateurs expérimentaux pour les outils intégrés. Désactivés par défaut } ``` -Remarques : +Remarques : -- `planTool` : active l’outil structuré expérimental `update_plan` pour le suivi des travaux non triviaux en plusieurs étapes. -- Par défaut : `false` sauf si `agents.defaults.embeddedPi.executionContract` (ou un remplacement par agent) est défini sur `"strict-agentic"` pour une exécution de la famille GPT-5 OpenAI ou OpenAI Codex. Définissez `true` pour forcer l’activation de l’outil hors de ce cadre, ou `false` pour le garder désactivé même pour les exécutions GPT-5 strict-agentic. -- Lorsqu’il est activé, le prompt système ajoute aussi des consignes d’usage afin que le modèle ne l’utilise que pour les travaux substantiels et conserve au plus une étape `in_progress`. +- `planTool` : active l’outil structuré expérimental `update_plan` pour le suivi des tâches non triviales en plusieurs étapes. +- Par défaut : `false` sauf si `agents.defaults.embeddedPi.executionContract` (ou un remplacement par agent) est défini sur `"strict-agentic"` pour une exécution OpenAI ou OpenAI Codex de la famille GPT-5. Définissez `true` pour forcer l’activation de l’outil hors de ce périmètre, ou `false` pour le garder désactivé même pour les exécutions GPT-5 strict-agentiques. +- Lorsqu’il est activé, le prompt système ajoute également des consignes d’utilisation afin que le modèle ne l’utilise que pour un travail conséquent et ne conserve au plus qu’une seule étape `in_progress`. ### `agents.defaults.subagents` @@ -2366,14 +2366,14 @@ Remarques : } ``` -- `model` : modèle par défaut pour les sous-agents lancés. S’il est omis, les sous-agents héritent du modèle de l’appelant. -- `allowAgents` : liste d’autorisations par défaut des ID d’agent cibles pour `sessions_spawn` lorsque l’agent demandeur ne définit pas son propre `subagents.allowAgents` (`["*"]` = n’importe lequel ; par défaut : même agent uniquement). -- `runTimeoutSeconds` : délai maximal par défaut (secondes) pour `sessions_spawn` lorsque l’appel d’outil omet `runTimeoutSeconds`. `0` signifie aucun délai. -- Politique d’outil par sous-agent : `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. +- `model` : modèle par défaut pour les sous-agents créés. Lorsqu’il est omis, les sous-agents héritent du modèle de l’appelant. +- `allowAgents` : liste d’autorisations par défaut des ID d’agents cibles pour `sessions_spawn` lorsque l’agent demandeur ne définit pas son propre `subagents.allowAgents` (`["*"]` = tous ; par défaut : même agent uniquement). +- `runTimeoutSeconds` : délai maximal par défaut (en secondes) pour `sessions_spawn` lorsque l’appel d’outil omet `runTimeoutSeconds`. `0` signifie aucun délai. +- Politique d’outils par sous-agent : `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Fournisseurs personnalisés et URL de base +## Fournisseurs personnalisés et URLs de base OpenClaw utilise le catalogue de modèles intégré. Ajoutez des fournisseurs personnalisés via `models.providers` dans la configuration ou `~/.openclaw/agents//agent/models.json`. @@ -2404,48 +2404,48 @@ OpenClaw utilise le catalogue de modèles intégré. Ajoutez des fournisseurs pe } ``` -- Utilisez `authHeader: true` + `headers` pour des besoins d’authentification personnalisés. -- Remplacez la racine de configuration de l’agent avec `OPENCLAW_AGENT_DIR` (ou `PI_CODING_AGENT_DIR`, alias hérité de variable d’environnement). -- Priorité de fusion pour les ID de fournisseur correspondants : - - Les valeurs `baseUrl` non vides de l’agent `models.json` l’emportent. - - Les valeurs `apiKey` non vides de l’agent l’emportent uniquement lorsque ce fournisseur n’est pas géré par SecretRef dans le contexte actuel config/profil d’authentification. - - Les valeurs `apiKey` de fournisseur gérées par SecretRef sont actualisées à partir des marqueurs source (`ENV_VAR_NAME` pour les références d’environnement, `secretref-managed` pour les références fichier/exec) au lieu de persister les secrets résolus. - - Les valeurs d’en-tête de fournisseur gérées par SecretRef sont actualisées à partir des marqueurs source (`secretref-env:ENV_VAR_NAME` pour les références d’environnement, `secretref-managed` pour les références fichier/exec). - - Les `apiKey`/`baseUrl` d’agent vides ou absents reviennent à `models.providers` dans la configuration. - - Les `contextWindow`/`maxTokens` des modèles correspondants utilisent la valeur la plus élevée entre la configuration explicite et les valeurs implicites du catalogue. - - Les `contextTokens` des modèles correspondants conservent un plafond d’exécution explicite lorsqu’il est présent ; utilisez-le pour limiter le contexte effectif sans modifier les métadonnées natives du modèle. +- Utilisez `authHeader: true` + `headers` pour les besoins d’authentification personnalisés. +- Remplacez la racine de configuration de l’agent avec `OPENCLAW_AGENT_DIR` (ou `PI_CODING_AGENT_DIR`, un ancien alias de variable d’environnement). +- Priorité de fusion pour les ID de fournisseur correspondants : + - Les valeurs `baseUrl` non vides du `models.json` de l’agent l’emportent. + - Les valeurs `apiKey` non vides de l’agent l’emportent uniquement lorsque ce fournisseur n’est pas géré par SecretRef dans le contexte actuel de configuration/profil d’authentification. + - Les valeurs `apiKey` de fournisseur gérées par SecretRef sont actualisées depuis les marqueurs source (`ENV_VAR_NAME` pour les références env, `secretref-managed` pour les références fichier/exec) au lieu de persister les secrets résolus. + - Les valeurs d’en-tête du fournisseur gérées par SecretRef sont actualisées depuis les marqueurs source (`secretref-env:ENV_VAR_NAME` pour les références env, `secretref-managed` pour les références fichier/exec). + - Les valeurs `apiKey`/`baseUrl` d’agent vides ou absentes reviennent à `models.providers` dans la configuration. + - Les valeurs `contextWindow`/`maxTokens` du modèle correspondant utilisent la valeur la plus élevée entre la configuration explicite et les valeurs implicites du catalogue. + - Les valeurs `contextTokens` du modèle correspondant conservent une limite d’exécution explicite lorsqu’elle est présente ; utilisez-la pour limiter le contexte effectif sans modifier les métadonnées natives du modèle. - Utilisez `models.mode: "replace"` lorsque vous voulez que la configuration réécrive entièrement `models.json`. - - La persistance des marqueurs est autoritaire côté source : les marqueurs sont écrits à partir de l’instantané de configuration source actif (avant résolution), et non à partir des valeurs de secret résolues à l’exécution. + - La persistance des marqueurs est pilotée par la source : les marqueurs sont écrits à partir de l’instantané actif de configuration source (avant résolution), et non à partir des valeurs de secret résolues à l’exécution. ### Détails des champs du fournisseur -- `models.mode` : comportement du catalogue de fournisseurs (`merge` ou `replace`). -- `models.providers` : carte des fournisseurs personnalisés, indexée par ID de fournisseur. -- `models.providers.*.api` : adaptateur de requête (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, etc.). -- `models.providers.*.apiKey` : identifiant du fournisseur (préférez SecretRef/la substitution par variable d’environnement). -- `models.providers.*.auth` : stratégie d’authentification (`api-key`, `token`, `oauth`, `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat` : pour Ollama + `openai-completions`, injecte `options.num_ctx` dans les requêtes (par défaut : `true`). -- `models.providers.*.authHeader` : force le transport des identifiants dans l’en-tête `Authorization` lorsque nécessaire. -- `models.providers.*.baseUrl` : URL de base de l’API amont. -- `models.providers.*.headers` : en-têtes statiques supplémentaires pour le routage proxy/locataire. -- `models.providers.*.request` : remplacements de transport pour les requêtes HTTP du fournisseur de modèle. - - `request.headers` : en-têtes supplémentaires (fusionnés avec les valeurs par défaut du fournisseur). Les valeurs acceptent SecretRef. - - `request.auth` : remplacement de la stratégie d’authentification. Modes : `"provider-default"` (utilise l’authentification intégrée du fournisseur), `"authorization-bearer"` (avec `token`), `"header"` (avec `headerName`, `value`, `prefix` facultatif). - - `request.proxy` : remplacement du proxy HTTP. Modes : `"env-proxy"` (utilise les variables d’environnement `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (avec `url`). Les deux modes acceptent un sous-objet facultatif `tls`. - - `request.tls` : remplacement TLS pour les connexions directes. Champs : `ca`, `cert`, `key`, `passphrase` (tous acceptent SecretRef), `serverName`, `insecureSkipVerify`. - - `request.allowPrivateNetwork` : lorsque défini à `true`, autorise HTTPS vers `baseUrl` lorsque le DNS se résout vers des plages privées, CGNAT ou similaires, via la garde SSRF HTTP fetch du fournisseur (activation opérateur pour les points de terminaison compatibles OpenAI auto-hébergés de confiance). WebSocket utilise le même `request` pour les en-têtes/TLS mais pas cette garde SSRF fetch. Par défaut `false`. -- `models.providers.*.models` : entrées explicites du catalogue de modèles du fournisseur. -- `models.providers.*.models.*.contextWindow` : métadonnées de fenêtre de contexte native du modèle. -- `models.providers.*.models.*.contextTokens` : plafond de contexte d’exécution facultatif. Utilisez-le lorsque vous voulez un budget de contexte effectif plus petit que le `contextWindow` natif du modèle. -- `models.providers.*.models.*.compat.supportsDeveloperRole` : indication de compatibilité facultative. Pour `api: "openai-completions"` avec un `baseUrl` non vide et non natif (hôte différent de `api.openai.com`), OpenClaw force cette valeur à `false` à l’exécution. Un `baseUrl` vide/omis conserve le comportement OpenAI par défaut. -- `models.providers.*.models.*.compat.requiresStringContent` : indication de compatibilité facultative pour les points de terminaison de discussion compatibles OpenAI acceptant uniquement des chaînes. Lorsque défini à `true`, OpenClaw aplatit les tableaux `messages[].content` purement textuels en chaînes simples avant d’envoyer la requête. -- `plugins.entries.amazon-bedrock.config.discovery` : racine des paramètres d’auto-détection Bedrock. -- `plugins.entries.amazon-bedrock.config.discovery.enabled` : active/désactive la détection implicite. -- `plugins.entries.amazon-bedrock.config.discovery.region` : région AWS pour la détection. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter` : filtre facultatif par ID de fournisseur pour une détection ciblée. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval` : intervalle d’interrogation pour l’actualisation de la détection. -- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow` : fenêtre de contexte de secours pour les modèles détectés. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens` : nombre maximal de jetons de sortie de secours pour les modèles détectés. +- `models.mode` : comportement du catalogue de fournisseurs (`merge` ou `replace`). +- `models.providers` : mapping de fournisseurs personnalisés indexé par ID de fournisseur. +- `models.providers.*.api` : adaptateur de requête (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, etc.). +- `models.providers.*.apiKey` : identifiant du fournisseur (préférez SecretRef/substitution env). +- `models.providers.*.auth` : stratégie d’authentification (`api-key`, `token`, `oauth`, `aws-sdk`). +- `models.providers.*.injectNumCtxForOpenAICompat` : pour Ollama + `openai-completions`, injecte `options.num_ctx` dans les requêtes (par défaut : `true`). +- `models.providers.*.authHeader` : force le transport des identifiants dans l’en-tête `Authorization` lorsque nécessaire. +- `models.providers.*.baseUrl` : URL de base de l’API amont. +- `models.providers.*.headers` : en-têtes statiques supplémentaires pour le routage proxy/tenant. +- `models.providers.*.request` : remplacements de transport pour les requêtes HTTP de fournisseur de modèle. + - `request.headers` : en-têtes supplémentaires (fusionnés avec les valeurs par défaut du fournisseur). Les valeurs acceptent SecretRef. + - `request.auth` : remplacement de la stratégie d’authentification. Modes : `"provider-default"` (utiliser l’authentification intégrée du fournisseur), `"authorization-bearer"` (avec `token`), `"header"` (avec `headerName`, `value`, `prefix` facultatif). + - `request.proxy` : remplacement du proxy HTTP. Modes : `"env-proxy"` (utilise les variables d’environnement `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (avec `url`). Les deux modes acceptent un sous-objet `tls` facultatif. + - `request.tls` : remplacement TLS pour les connexions directes. Champs : `ca`, `cert`, `key`, `passphrase` (tous acceptent SecretRef), `serverName`, `insecureSkipVerify`. + - `request.allowPrivateNetwork` : lorsqu’il vaut `true`, autorise HTTPS vers `baseUrl` lorsque la résolution DNS pointe vers des plages privées, CGNAT ou similaires, via la protection de récupération HTTP du fournisseur (activation explicite opérateur pour les points de terminaison OpenAI-compatibles auto-hébergés de confiance). WebSocket utilise le même `request` pour les en-têtes/TLS mais pas cette protection SSRF de récupération. Par défaut `false`. +- `models.providers.*.models` : entrées explicites du catalogue de modèles du fournisseur. +- `models.providers.*.models.*.contextWindow` : métadonnées de fenêtre de contexte native du modèle. +- `models.providers.*.models.*.contextTokens` : limite de contexte d’exécution facultative. Utilisez-la lorsque vous voulez un budget de contexte effectif plus petit que le `contextWindow` natif du modèle. +- `models.providers.*.models.*.compat.supportsDeveloperRole` : indice de compatibilité facultatif. Pour `api: "openai-completions"` avec un `baseUrl` non natif non vide (hôte différent de `api.openai.com`), OpenClaw force cette valeur à `false` à l’exécution. Un `baseUrl` vide/omis conserve le comportement OpenAI par défaut. +- `models.providers.*.models.*.compat.requiresStringContent` : indice de compatibilité facultatif pour les points de terminaison de chat OpenAI-compatibles n’acceptant que des chaînes. Lorsqu’il vaut `true`, OpenClaw aplatit en chaînes simples les tableaux `messages[].content` purement textuels avant d’envoyer la requête. +- `plugins.entries.amazon-bedrock.config.discovery` : racine des paramètres d’auto-découverte Bedrock. +- `plugins.entries.amazon-bedrock.config.discovery.enabled` : active/désactive la découverte implicite. +- `plugins.entries.amazon-bedrock.config.discovery.region` : région AWS pour la découverte. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter` : filtre facultatif d’ID de fournisseur pour une découverte ciblée. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval` : intervalle d’interrogation pour l’actualisation de la découverte. +- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow` : fenêtre de contexte de repli pour les modèles découverts. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens` : nombre maximal de jetons de sortie de repli pour les modèles découverts. ### Exemples de fournisseurs @@ -2483,7 +2483,7 @@ OpenClaw utilise le catalogue de modèles intégré. Ajoutez des fournisseurs pe } ``` -Utilisez `cerebras/zai-glm-4.7` pour Cerebras ; `zai/glm-4.7` pour Z.AI direct. +Utilisez `cerebras/zai-glm-4.7` pour Cerebras ; `zai/glm-4.7` pour Z.AI direct. @@ -2500,7 +2500,7 @@ Utilisez `cerebras/zai-glm-4.7` pour Cerebras ; `zai/glm-4.7` pour Z.AI direct. } ``` -Définissez `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`). Utilisez des références `opencode/...` pour le catalogue Zen ou `opencode-go/...` pour le catalogue Go. Raccourci : `openclaw onboard --auth-choice opencode-zen` ou `openclaw onboard --auth-choice opencode-go`. +Définissez `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`). Utilisez des références `opencode/...` pour le catalogue Zen ou des références `opencode-go/...` pour le catalogue Go. Raccourci : `openclaw onboard --auth-choice opencode-zen` ou `openclaw onboard --auth-choice opencode-go`. @@ -2517,11 +2517,11 @@ Définissez `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`). Utilisez des référ } ``` -Définissez `ZAI_API_KEY`. `z.ai/*` et `z-ai/*` sont des alias acceptés. Raccourci : `openclaw onboard --auth-choice zai-api-key`. +Définissez `ZAI_API_KEY`. `z.ai/*` et `z-ai/*` sont des alias acceptés. Raccourci : `openclaw onboard --auth-choice zai-api-key`. -- Point de terminaison général : `https://api.z.ai/api/paas/v4` -- Point de terminaison de code (par défaut) : `https://api.z.ai/api/coding/paas/v4` -- Pour le point de terminaison général, définissez un fournisseur personnalisé avec le remplacement de `baseUrl`. +- Point de terminaison général : `https://api.z.ai/api/paas/v4` +- Point de terminaison de développement (par défaut) : `https://api.z.ai/api/coding/paas/v4` +- Pour le point de terminaison général, définissez un fournisseur personnalisé avec le remplacement de l’URL de base. @@ -2560,11 +2560,11 @@ Définissez `ZAI_API_KEY`. `z.ai/*` et `z-ai/*` sont des alias acceptés. Raccou } ``` -Pour le point de terminaison Chine : `baseUrl: "https://api.moonshot.cn/v1"` ou `openclaw onboard --auth-choice moonshot-api-key-cn`. +Pour le point de terminaison Chine : `baseUrl: "https://api.moonshot.cn/v1"` ou `openclaw onboard --auth-choice moonshot-api-key-cn`. -Les points de terminaison Moonshot natifs annoncent la compatibilité d’utilisation du streaming sur le transport partagé -`openai-completions`, et OpenClaw s’appuie sur les capacités du point de terminaison -plutôt que sur l’ID du fournisseur intégré uniquement. +Les points de terminaison Moonshot natifs annoncent une compatibilité d’usage du streaming sur le transport partagé +`openai-completions`, et OpenClaw s’appuie sur ces capacités de point de terminaison +plutôt que sur le seul ID de fournisseur intégré. @@ -2582,7 +2582,7 @@ plutôt que sur l’ID du fournisseur intégré uniquement. } ``` -Compatible Anthropic, fournisseur intégré. Raccourci : `openclaw onboard --auth-choice kimi-code-api-key`. +Compatible Anthropic, fournisseur intégré. Raccourci : `openclaw onboard --auth-choice kimi-code-api-key`. @@ -2621,7 +2621,7 @@ Compatible Anthropic, fournisseur intégré. Raccourci : `openclaw onboard --aut } ``` -L’URL de base doit omettre `/v1` (le client Anthropic l’ajoute). Raccourci : `openclaw onboard --auth-choice synthetic-api-key`. +L’URL de base doit omettre `/v1` (le client Anthropic l’ajoute). Raccourci : `openclaw onboard --auth-choice synthetic-api-key`. @@ -2661,12 +2661,12 @@ L’URL de base doit omettre `/v1` (le client Anthropic l’ajoute). Raccourci : } ``` -Définissez `MINIMAX_API_KEY`. Raccourcis : +Définissez `MINIMAX_API_KEY`. Raccourcis : `openclaw onboard --auth-choice minimax-global-api` ou `openclaw onboard --auth-choice minimax-cn-api`. -Le catalogue de modèles utilise par défaut uniquement M2.7. -Sur le chemin de streaming compatible Anthropic, OpenClaw désactive thinking MiniMax -par défaut sauf si vous définissez explicitement `thinking` vous-même. `/fast on` ou +Le catalogue de modèles vaut par défaut M2.7 uniquement. +Sur le chemin de streaming compatible Anthropic, OpenClaw désactive par défaut le thinking de MiniMax +sauf si vous définissez explicitement `thinking` vous-même. `/fast on` ou `params.fastMode: true` réécrit `MiniMax-M2.7` en `MiniMax-M2.7-highspeed`. @@ -2674,7 +2674,7 @@ par défaut sauf si vous définissez explicitement `thinking` vous-même. `/fast -Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand modèle local via l’API LM Studio Responses sur un matériel sérieux ; conservez les modèles hébergés fusionnés comme solution de secours. +Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand modèle local via l’API Responses de LM Studio sur un matériel sérieux ; conservez les modèles hébergés fusionnés pour le repli. @@ -2705,14 +2705,14 @@ Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand m } ``` -- `allowBundled` : liste d’autorisations facultative pour les Skills groupés uniquement (les Skills gérés/d’espace de travail ne sont pas affectés). -- `load.extraDirs` : racines Skills partagées supplémentaires (priorité la plus faible). -- `install.preferBrew` : lorsque défini à true, préfère les installateurs Homebrew lorsque `brew` est +- `allowBundled` : liste d’autorisations facultative pour les Skills groupées uniquement (les Skills gérées/de workspace ne sont pas affectées). +- `load.extraDirs` : racines supplémentaires de Skills partagées (priorité la plus basse). +- `install.preferBrew` : lorsque true, préfère les installateurs Homebrew lorsque `brew` est disponible avant de revenir à d’autres types d’installateur. -- `install.nodeManager` : préférence du gestionnaire Node pour les spécifications - `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` désactive un skill même s’il est groupé/installé. -- `entries..apiKey` : raccourci pour les Skills déclarant une variable d’environnement primaire (chaîne en texte brut ou objet SecretRef). +- `install.nodeManager` : préférence de gestionnaire Node pour les spécifications `metadata.openclaw.install` + (`npm` | `pnpm` | `yarn` | `bun`). +- `entries..enabled: false` désactive une Skills même si elle est groupée/installée. +- `entries..apiKey` : raccourci pour les Skills qui déclarent une variable d’environnement principale (chaîne en texte brut ou objet SecretRef). --- @@ -2740,41 +2740,41 @@ Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand m } ``` -- Chargés depuis `~/.openclaw/extensions`, `/.openclaw/extensions`, plus `plugins.load.paths`. -- La découverte accepte les plugins OpenClaw natifs ainsi que les bundles Codex compatibles et les bundles Claude, y compris les bundles Claude sans manifeste utilisant la disposition par défaut. -- **Les modifications de configuration nécessitent un redémarrage de la passerelle.** -- `allow` : liste d’autorisations facultative (seuls les plugins listés sont chargés). `deny` l’emporte. -- `plugins.entries..apiKey` : champ pratique de clé API au niveau du plugin (lorsqu’il est pris en charge par le plugin). -- `plugins.entries..env` : carte de variables d’environnement limitée au plugin. -- `plugins.entries..hooks.allowPromptInjection` : lorsque défini à `false`, le noyau bloque `before_prompt_build` et ignore les champs modifiant le prompt de l’ancien `before_agent_start`, tout en conservant les anciens `modelOverride` et `providerOverride`. S’applique aux hooks de plugins natifs et aux répertoires de hooks pris en charge fournis par bundle. -- `plugins.entries..subagent.allowModelOverride` : fait explicitement confiance à ce plugin pour demander des remplacements `provider` et `model` par exécution pour les exécutions d’arrière-plan de sous-agent. -- `plugins.entries..subagent.allowedModels` : liste d’autorisations facultative des cibles canoniques `provider/model` pour les remplacements approuvés de sous-agent. Utilisez `"*"` uniquement lorsque vous souhaitez intentionnellement autoriser n’importe quel modèle. -- `plugins.entries..config` : objet de configuration défini par le plugin (validé par le schéma du plugin OpenClaw natif lorsqu’il est disponible). -- `plugins.entries.firecrawl.config.webFetch` : paramètres du fournisseur de récupération web Firecrawl. - - `apiKey` : clé API Firecrawl (accepte SecretRef). Revient à `plugins.entries.firecrawl.config.webSearch.apiKey`, à l’ancien `tools.web.fetch.firecrawl.apiKey`, ou à la variable d’environnement `FIRECRAWL_API_KEY`. - - `baseUrl` : URL de base de l’API Firecrawl (par défaut : `https://api.firecrawl.dev`). - - `onlyMainContent` : extrait uniquement le contenu principal des pages (par défaut : `true`). - - `maxAgeMs` : âge maximal du cache en millisecondes (par défaut : `172800000` / 2 jours). - - `timeoutSeconds` : délai d’expiration de la requête de scraping en secondes (par défaut : `60`). -- `plugins.entries.xai.config.xSearch` : paramètres xAI X Search (recherche web Grok). - - `enabled` : active le fournisseur X Search. - - `model` : modèle Grok à utiliser pour la recherche (par ex. `"grok-4-1-fast"`). -- `plugins.entries.memory-core.config.dreaming` : paramètres de rêverie mémoire (expérimental). Voir [Dreaming](/fr/concepts/dreaming) pour les phases et seuils. - - `enabled` : interrupteur maître de la rêverie (par défaut `false`). - - `frequency` : cadence cron pour chaque balayage complet de rêverie (par défaut `"0 3 * * *"`). +- Chargé depuis `~/.openclaw/extensions`, `/.openclaw/extensions`, ainsi que `plugins.load.paths`. +- La découverte accepte les Plugins OpenClaw natifs ainsi que les bundles Codex compatibles et les bundles Claude, y compris les bundles Claude sans manifeste avec disposition par défaut. +- **Les modifications de configuration nécessitent un redémarrage du Gateway.** +- `allow` : liste d’autorisations facultative (seuls les Plugins listés sont chargés). `deny` l’emporte. +- `plugins.entries..apiKey` : champ pratique de clé API au niveau Plugin (lorsqu’il est pris en charge par le Plugin). +- `plugins.entries..env` : mapping de variables d’environnement à portée du Plugin. +- `plugins.entries..hooks.allowPromptInjection` : lorsqu’il vaut `false`, le cœur bloque `before_prompt_build` et ignore les champs modifiant le prompt de l’ancien `before_agent_start`, tout en préservant les anciens `modelOverride` et `providerOverride`. S’applique aux hooks de Plugin natifs et aux répertoires de hooks fournis par bundle pris en charge. +- `plugins.entries..subagent.allowModelOverride` : fait explicitement confiance à ce Plugin pour demander des remplacements `provider` et `model` par exécution pour les exécutions de sous-agents en arrière-plan. +- `plugins.entries..subagent.allowedModels` : liste d’autorisations facultative des cibles canoniques `provider/model` pour les remplacements de sous-agents de confiance. Utilisez `"*"` uniquement lorsque vous voulez intentionnellement autoriser n’importe quel modèle. +- `plugins.entries..config` : objet de configuration défini par le Plugin (validé par le schéma du Plugin OpenClaw natif lorsque disponible). +- `plugins.entries.firecrawl.config.webFetch` : paramètres du fournisseur web-fetch Firecrawl. + - `apiKey` : clé API Firecrawl (accepte SecretRef). Revient à `plugins.entries.firecrawl.config.webSearch.apiKey`, à l’ancien `tools.web.fetch.firecrawl.apiKey` ou à la variable d’environnement `FIRECRAWL_API_KEY`. + - `baseUrl` : URL de base de l’API Firecrawl (par défaut : `https://api.firecrawl.dev`). + - `onlyMainContent` : extraire uniquement le contenu principal des pages (par défaut : `true`). + - `maxAgeMs` : ancienneté maximale du cache en millisecondes (par défaut : `172800000` / 2 jours). + - `timeoutSeconds` : délai maximal des requêtes de scraping en secondes (par défaut : `60`). +- `plugins.entries.xai.config.xSearch` : paramètres de xAI X Search (recherche web Grok). + - `enabled` : active le fournisseur X Search. + - `model` : modèle Grok à utiliser pour la recherche (par ex. `"grok-4-1-fast"`). +- `plugins.entries.memory-core.config.dreaming` : paramètres de Dreaming de la mémoire. Voir [Dreaming](/fr/concepts/dreaming) pour les phases et les seuils. + - `enabled` : interrupteur maître de Dreaming (par défaut `false`). + - `frequency` : cadence Cron pour chaque balayage complet de Dreaming (par défaut `"0 3 * * *"`). - la politique de phase et les seuils sont des détails d’implémentation (pas des clés de configuration destinées à l’utilisateur). -- La configuration mémoire complète se trouve dans [Référence de configuration de la mémoire](/fr/reference/memory-config) : +- La configuration complète de la mémoire se trouve dans [Référence de configuration de la mémoire](/fr/reference/memory-config) : - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- Les plugins de bundle Claude activés peuvent également contribuer aux valeurs par défaut Pi embarquées depuis `settings.json` ; OpenClaw les applique comme paramètres d’agent assainis, et non comme correctifs bruts de configuration OpenClaw. -- `plugins.slots.memory` : choisit l’ID du plugin mémoire actif, ou `"none"` pour désactiver les plugins mémoire. -- `plugins.slots.contextEngine` : choisit l’ID du plugin de moteur de contexte actif ; vaut par défaut `"legacy"` sauf si vous installez et sélectionnez un autre moteur. -- `plugins.installs` : métadonnées d’installation gérées par la CLI et utilisées par `openclaw plugins update`. +- Les Plugins bundle Claude activés peuvent également contribuer des valeurs par défaut Pi embarquées à partir de `settings.json` ; OpenClaw les applique comme paramètres d’agent assainis, et non comme correctifs bruts de configuration OpenClaw. +- `plugins.slots.memory` : choisit l’ID du Plugin mémoire actif, ou `"none"` pour désactiver les Plugins mémoire. +- `plugins.slots.contextEngine` : choisit l’ID du Plugin moteur de contexte actif ; vaut par défaut `"legacy"` sauf si vous installez et sélectionnez un autre moteur. +- `plugins.installs` : métadonnées d’installation gérées par la CLI utilisées par `openclaw plugins update`. - Inclut `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. - - Traitez `plugins.installs.*` comme un état géré ; préférez les commandes CLI aux modifications manuelles. + - Traitez `plugins.installs.*` comme un état géré ; préférez les commandes CLI aux modifications manuelles. Voir [Plugins](/fr/tools/plugin). @@ -2819,27 +2819,27 @@ Voir [Plugins](/fr/tools/plugin). - `evaluateEnabled: false` désactive `act:evaluate` et `wait --fn`. - `ssrfPolicy.dangerouslyAllowPrivateNetwork` est désactivé lorsqu’il n’est pas défini, donc la navigation du navigateur reste stricte par défaut. - Définissez `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` uniquement lorsque vous faites intentionnellement confiance à la navigation du navigateur sur réseau privé. -- En mode strict, les points de terminaison de profil CDP distants (`profiles.*.cdpUrl`) sont soumis au même blocage des réseaux privés lors des vérifications d’accessibilité/de découverte. +- En mode strict, les points de terminaison de profil CDP distants (`profiles.*.cdpUrl`) sont soumis au même blocage de réseau privé pendant les vérifications d’accessibilité/découverte. - `ssrfPolicy.allowPrivateNetwork` reste pris en charge comme ancien alias. - En mode strict, utilisez `ssrfPolicy.hostnameAllowlist` et `ssrfPolicy.allowedHostnames` pour des exceptions explicites. -- Les profils distants sont en mode attachement uniquement (démarrage/arrêt/réinitialisation désactivés). +- Les profils distants sont en mode attachement uniquement (start/stop/reset désactivés). - `profiles.*.cdpUrl` accepte `http://`, `https://`, `ws://` et `wss://`. - Utilisez HTTP(S) lorsque vous voulez qu’OpenClaw découvre `/json/version` ; utilisez WS(S) + Utilisez HTTP(S) lorsque vous voulez qu’OpenClaw découvre `/json/version` ; utilisez WS(S) lorsque votre fournisseur vous donne une URL WebSocket DevTools directe. -- Les profils `existing-session` sont limités à l’hôte et utilisent Chrome MCP au lieu de CDP. +- Les profils `existing-session` sont réservés à l’hôte et utilisent Chrome MCP au lieu de CDP. - Les profils `existing-session` peuvent définir `userDataDir` pour cibler un profil - spécifique de navigateur basé sur Chromium comme Brave ou Edge. -- Les profils `existing-session` conservent les limites actuelles de routage Chrome MCP : - actions pilotées par snapshot/réf au lieu d’un ciblage par sélecteur CSS, hooks - d’envoi de fichier unique, pas de remplacements de délai pour les boîtes de dialogue, - pas de `wait --load networkidle`, ni `responsebody`, export PDF, interception de téléchargement - ou actions en lot. -- Les profils `openclaw` gérés localement attribuent automatiquement `cdpPort` et `cdpUrl` ; ne - définissez `cdpUrl` explicitement que pour un CDP distant. -- Ordre d’auto-détection : navigateur par défaut s’il est basé sur Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. -- Service de contrôle : loopback uniquement (port dérivé de `gateway.port`, par défaut `18791`). -- `extraArgs` ajoute des drapeaux de lancement supplémentaires au démarrage local de Chromium (par exemple - `--disable-gpu`, dimensionnement de fenêtre ou drapeaux de débogage). + spécifique de navigateur basé sur Chromium, comme Brave ou Edge. +- Les profils `existing-session` conservent les limites actuelles de la route Chrome MCP : + actions pilotées par snapshot/référence au lieu du ciblage par sélecteur CSS, hooks + de téléversement à un seul fichier, pas de remplacements de délai pour les boîtes de dialogue, + pas de `wait --load networkidle`, ni de `responsebody`, export PDF, interception de téléchargement + ou actions par lots. +- Les profils `openclaw` gérés localement attribuent automatiquement `cdpPort` et `cdpUrl` ; ne définissez + `cdpUrl` explicitement que pour le CDP distant. +- Ordre d’auto-détection : navigateur par défaut s’il est basé sur Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- Service de contrôle : loopback uniquement (port dérivé de `gateway.port`, par défaut `18791`). +- `extraArgs` ajoute des indicateurs de lancement supplémentaires au démarrage local de Chromium (par exemple + `--disable-gpu`, dimensionnement de fenêtre ou indicateurs de débogage). --- @@ -2857,12 +2857,12 @@ Voir [Plugins](/fr/tools/plugin). } ``` -- `seamColor` : couleur d’accent pour le chrome de l’UI de l’application native (teinte de la bulle du mode Talk, etc.). -- `assistant` : remplacement d’identité de l’interface de contrôle. Revient à l’identité de l’agent actif. +- `seamColor` : couleur d’accentuation de l’interface native de l’application (teinte de bulle du mode Talk, etc.). +- `assistant` : remplacement d’identité pour l’interface de contrôle. Revient à l’identité de l’agent actif. --- -## Passerelle +## Gateway ```json5 { @@ -2925,66 +2925,66 @@ Voir [Plugins](/fr/tools/plugin). } ``` - + -- `mode` : `local` (exécuter la passerelle) ou `remote` (se connecter à une passerelle distante). La passerelle refuse de démarrer sauf en mode `local`. -- `port` : port multiplexé unique pour WS + HTTP. Priorité : `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. -- `bind` : `auto`, `loopback` (par défaut), `lan` (`0.0.0.0`), `tailnet` (IP Tailscale uniquement), ou `custom`. -- **Anciens alias de liaison** : utilisez les valeurs de mode de liaison dans `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), et non les alias d’hôte (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). -- **Remarque Docker** : la liaison `loopback` par défaut écoute sur `127.0.0.1` à l’intérieur du conteneur. Avec le réseau bridge Docker (`-p 18789:18789`), le trafic arrive sur `eth0`, donc la passerelle est inaccessible. Utilisez `--network host`, ou définissez `bind: "lan"` (ou `bind: "custom"` avec `customBindHost: "0.0.0.0"`) pour écouter sur toutes les interfaces. -- **Authentification** : requise par défaut. Les liaisons non loopback exigent l’authentification de la passerelle. En pratique, cela signifie un jeton/mot de passe partagé ou un proxy inverse conscient de l’identité avec `gateway.auth.mode: "trusted-proxy"`. L’assistant d’onboarding génère un jeton par défaut. +- `mode` : `local` (exécuter le Gateway) ou `remote` (se connecter à un Gateway distant). Le Gateway refuse de démarrer sauf en mode `local`. +- `port` : port multiplexé unique pour WS + HTTP. Priorité : `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. +- `bind` : `auto`, `loopback` (par défaut), `lan` (`0.0.0.0`), `tailnet` (IP Tailscale uniquement) ou `custom`. +- **Anciens alias de bind** : utilisez les valeurs de mode bind dans `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), et non les alias d’hôte (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). +- **Remarque Docker** : le bind `loopback` par défaut écoute sur `127.0.0.1` dans le conteneur. Avec le réseau bridge Docker (`-p 18789:18789`), le trafic arrive sur `eth0`, donc le Gateway est inaccessible. Utilisez `--network host`, ou définissez `bind: "lan"` (ou `bind: "custom"` avec `customBindHost: "0.0.0.0"`) pour écouter sur toutes les interfaces. +- **Auth** : requise par défaut. Les binds non-loopback nécessitent une authentification Gateway. En pratique, cela signifie un jeton/mot de passe partagé ou un proxy inverse conscient de l’identité avec `gateway.auth.mode: "trusted-proxy"`. L’assistant d’onboarding génère un jeton par défaut. - Si `gateway.auth.token` et `gateway.auth.password` sont tous deux configurés (y compris via SecretRef), définissez explicitement `gateway.auth.mode` sur `token` ou `password`. Les flux de démarrage et d’installation/réparation du service échouent lorsque les deux sont configurés et que le mode n’est pas défini. -- `gateway.auth.mode: "none"` : mode explicite sans authentification. À utiliser uniquement pour des configurations de loopback local approuvées ; ce mode n’est volontairement pas proposé dans les invites d’onboarding. -- `gateway.auth.mode: "trusted-proxy"` : délègue l’authentification à un proxy inverse conscient de l’identité et fait confiance aux en-têtes d’identité venant de `gateway.trustedProxies` (voir [Authentification par proxy approuvé](/fr/gateway/trusted-proxy-auth)). Ce mode attend une source proxy **non loopback** ; les proxies inverses loopback sur le même hôte ne satisfont pas l’authentification trusted-proxy. -- `gateway.auth.allowTailscale` : lorsque défini à `true`, les en-têtes d’identité Tailscale Serve peuvent satisfaire l’authentification de l’interface de contrôle/WebSocket (vérifiée via `tailscale whois`). Les points de terminaison de l’API HTTP n’utilisent **pas** cette authentification par en-tête Tailscale ; ils suivent à la place le mode normal d’authentification HTTP de la passerelle. Ce flux sans jeton suppose que l’hôte de la passerelle est approuvé. La valeur par défaut est `true` lorsque `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit` : limiteur facultatif des échecs d’authentification. S’applique par IP client et par portée d’authentification (secret partagé et jeton d’appareil sont suivis indépendamment). Les tentatives bloquées renvoient `429` + `Retry-After`. - - Sur le chemin asynchrone de l’interface de contrôle Tailscale Serve, les tentatives échouées pour le même `{scope, clientIp}` sont sérialisées avant l’écriture de l’échec. Des tentatives simultanées incorrectes depuis le même client peuvent donc déclencher le limiteur dès la deuxième requête au lieu de laisser les deux passer comme de simples erreurs de correspondance. - - `gateway.auth.rateLimit.exemptLoopback` vaut `true` par défaut ; définissez `false` lorsque vous souhaitez intentionnellement que le trafic localhost soit lui aussi limité (pour des configurations de test ou des déploiements proxy stricts). -- Les tentatives d’authentification WS d’origine navigateur sont toujours limitées avec l’exemption loopback désactivée (défense en profondeur contre le brute force localhost basé sur le navigateur). +- `gateway.auth.mode: "none"` : mode explicite sans auth. À utiliser uniquement pour des configurations loopback locales de confiance ; ce mode n’est volontairement pas proposé par les invites d’onboarding. +- `gateway.auth.mode: "trusted-proxy"` : délègue l’authentification à un proxy inverse conscient de l’identité et fait confiance aux en-têtes d’identité provenant de `gateway.trustedProxies` (voir [Authentification par proxy de confiance](/fr/gateway/trusted-proxy-auth)). Ce mode attend une source proxy **non-loopback** ; les proxies inverses loopback sur le même hôte ne satisfont pas l’authentification trusted-proxy. +- `gateway.auth.allowTailscale` : lorsqu’il vaut `true`, les en-têtes d’identité Tailscale Serve peuvent satisfaire l’authentification de l’interface de contrôle/WebSocket (vérifiée via `tailscale whois`). Les points de terminaison d’API HTTP n’utilisent **pas** cette auth par en-tête Tailscale ; ils suivent à la place le mode d’auth HTTP normal du Gateway. Ce flux sans jeton suppose que l’hôte Gateway est de confiance. Vaut par défaut `true` lorsque `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit` : limite facultative des échecs d’authentification. S’applique par IP cliente et par portée d’authentification (secret partagé et jeton d’appareil sont suivis indépendamment). Les tentatives bloquées renvoient `429` + `Retry-After`. + - Sur le chemin asynchrone Tailscale Serve de l’interface de contrôle, les tentatives échouées pour le même `{scope, clientIp}` sont sérialisées avant l’écriture de l’échec. Des tentatives concurrentes invalides d’un même client peuvent donc déclencher le limiteur dès la deuxième requête au lieu que les deux passent en course comme de simples non-correspondances. + - `gateway.auth.rateLimit.exemptLoopback` vaut par défaut `true` ; définissez `false` lorsque vous voulez intentionnellement appliquer aussi la limitation de débit au trafic localhost (pour des configurations de test ou des déploiements proxy stricts). +- Les tentatives d’auth WS d’origine navigateur sont toujours limitées avec exemption loopback désactivée (défense en profondeur contre la force brute localhost depuis le navigateur). - En loopback, ces verrouillages d’origine navigateur sont isolés par valeur `Origin` - normalisée, de sorte que des échecs répétés depuis une origine localhost n’entraînent pas automatiquement - le verrouillage d’une autre origine. -- `tailscale.mode` : `serve` (tailnet uniquement, liaison loopback) ou `funnel` (public, authentification requise). -- `controlUi.allowedOrigins` : liste d’autorisations explicite des origines navigateur pour les connexions WebSocket à la passerelle. Requise lorsque des clients navigateur sont attendus depuis des origines non loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback` : mode dangereux qui active le repli d’origine basé sur l’en-tête Host pour les déploiements qui s’appuient intentionnellement sur une politique d’origine fondée sur Host. -- `remote.transport` : `ssh` (par défaut) ou `direct` (ws/wss). Pour `direct`, `remote.url` doit être `ws://` ou `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` : remplacement côté client en mode secours qui autorise `ws://` en clair vers des IP approuvées de réseau privé ; par défaut, le texte en clair reste limité au loopback. -- `gateway.remote.token` / `.password` sont des champs d’identifiants de client distant. Ils ne configurent pas à eux seuls l’authentification de la passerelle. -- `gateway.push.apns.relay.baseUrl` : URL HTTPS de base du relais APNs externe utilisé par les builds iOS officiels/TestFlight après publication par ceux-ci des inscriptions adossées au relais vers la passerelle. Cette URL doit correspondre à l’URL de relais compilée dans le build iOS. -- `gateway.push.apns.relay.timeoutMs` : délai d’envoi de la passerelle vers le relais en millisecondes. Par défaut : `10000`. -- Les inscriptions adossées à un relais sont déléguées à une identité de passerelle spécifique. L’app iOS appairée récupère `gateway.identity.get`, inclut cette identité dans l’inscription au relais et transmet à la passerelle une autorisation d’envoi limitée à cette inscription. Une autre passerelle ne peut pas réutiliser cette inscription stockée. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS` : remplacements temporaires par variable d’environnement pour la configuration de relais ci-dessus. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` : échappatoire réservée au développement pour les URL de relais HTTP en loopback. Les URL de relais en production doivent rester en HTTPS. -- `gateway.channelHealthCheckMinutes` : intervalle du moniteur de santé des canaux en minutes. Définissez `0` pour désactiver globalement les redémarrages du moniteur de santé. Par défaut : `5`. -- `gateway.channelStaleEventThresholdMinutes` : seuil de socket obsolète en minutes. Gardez cette valeur supérieure ou égale à `gateway.channelHealthCheckMinutes`. Par défaut : `30`. -- `gateway.channelMaxRestartsPerHour` : nombre maximal de redémarrages du moniteur de santé par canal/compte sur une heure glissante. Par défaut : `10`. -- `channels..healthMonitor.enabled` : désactivation par canal des redémarrages du moniteur de santé tout en conservant le moniteur global activé. -- `channels..accounts..healthMonitor.enabled` : remplacement par compte pour les canaux multi-comptes. Lorsqu’il est défini, il a priorité sur le remplacement au niveau du canal. -- Les chemins d’appel de passerelle locale peuvent utiliser `gateway.remote.*` comme solution de secours uniquement lorsque `gateway.auth.*` n’est pas défini. -- Si `gateway.auth.token` / `gateway.auth.password` est explicitement configuré via SecretRef et non résolu, la résolution échoue en mode fermé (aucun secours distant ne masque cela). -- `trustedProxies` : IP de proxy inverse qui terminent TLS ou injectent des en-têtes de client transféré. Ne listez que des proxies que vous contrôlez. Les entrées loopback restent valides pour les configurations de détection locale/proxy sur le même hôte (par exemple Tailscale Serve ou un proxy inverse local), mais elles ne rendent **pas** les requêtes loopback éligibles à `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback` : lorsque défini à `true`, la passerelle accepte `X-Real-IP` si `X-Forwarded-For` est absent. Par défaut `false` pour un comportement en mode fermé. -- `gateway.tools.deny` : noms d’outils supplémentaires bloqués pour HTTP `POST /tools/invoke` (étend la liste de refus par défaut). -- `gateway.tools.allow` : retire des noms d’outils de la liste de refus HTTP par défaut. + normalisée, de sorte que des échecs répétés depuis une origine localhost ne + verrouillent pas automatiquement une autre origine. +- `tailscale.mode` : `serve` (tailnet uniquement, bind loopback) ou `funnel` (public, nécessite une auth). +- `controlUi.allowedOrigins` : liste d’autorisations explicite des origines navigateur pour les connexions WebSocket Gateway. Requise lorsque des clients navigateur sont attendus depuis des origines non-loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback` : mode dangereux qui active le repli d’origine basé sur l’en-tête Host pour les déploiements qui s’appuient intentionnellement sur cette politique d’origine. +- `remote.transport` : `ssh` (par défaut) ou `direct` (ws/wss). Pour `direct`, `remote.url` doit être `ws://` ou `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` : remplacement côté client de type break-glass qui autorise `ws://` en clair vers des IP de réseau privé de confiance ; par défaut, le clair reste limité au loopback. +- `gateway.remote.token` / `.password` sont des champs d’identifiants du client distant. Ils ne configurent pas à eux seuls l’authentification du Gateway. +- `gateway.push.apns.relay.baseUrl` : URL HTTPS de base du relais APNs externe utilisé par les builds iOS officiels/TestFlight après publication des inscriptions relay-backed vers le Gateway. Cette URL doit correspondre à l’URL du relais compilée dans le build iOS. +- `gateway.push.apns.relay.timeoutMs` : délai maximal d’envoi Gateway-vers-relais en millisecondes. Par défaut : `10000`. +- Les inscriptions relay-backed sont déléguées à une identité Gateway spécifique. L’app iOS appairée récupère `gateway.identity.get`, inclut cette identité dans l’inscription au relais et transmet au Gateway une autorisation d’envoi à portée de l’inscription. Un autre Gateway ne peut pas réutiliser cette inscription stockée. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS` : remplacements temporaires par variables d’environnement pour la configuration de relais ci-dessus. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` : échappatoire réservée au développement pour les URLs de relais HTTP en loopback. Les URLs de relais de production doivent rester en HTTPS. +- `gateway.channelHealthCheckMinutes` : intervalle du moniteur de santé des canaux en minutes. Définissez `0` pour désactiver globalement les redémarrages du moniteur de santé. Par défaut : `5`. +- `gateway.channelStaleEventThresholdMinutes` : seuil de socket obsolète en minutes. Gardez cette valeur supérieure ou égale à `gateway.channelHealthCheckMinutes`. Par défaut : `30`. +- `gateway.channelMaxRestartsPerHour` : nombre maximal de redémarrages du moniteur de santé par canal/compte sur une heure glissante. Par défaut : `10`. +- `channels..healthMonitor.enabled` : désactivation facultative par canal des redémarrages du moniteur de santé tout en gardant le moniteur global activé. +- `channels..accounts..healthMonitor.enabled` : remplacement par compte pour les canaux multi-comptes. Lorsqu’il est défini, il a priorité sur le remplacement au niveau du canal. +- Les chemins d’appel Gateway locaux peuvent utiliser `gateway.remote.*` comme repli uniquement lorsque `gateway.auth.*` n’est pas défini. +- Si `gateway.auth.token` / `gateway.auth.password` est explicitement configuré via SecretRef et non résolu, la résolution échoue en mode fermé (aucun repli distant ne masque cela). +- `trustedProxies` : IP de proxies inverses qui terminent TLS ou injectent des en-têtes de client transféré. Ne listez que les proxies que vous contrôlez. Les entrées loopback restent valides pour les configurations de détection locale/proxy sur le même hôte (par exemple Tailscale Serve ou un proxy inverse local), mais elles ne rendent **pas** les requêtes loopback éligibles à `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback` : lorsqu’il vaut `true`, le Gateway accepte `X-Real-IP` si `X-Forwarded-For` est absent. Par défaut `false` pour un comportement en échec fermé. +- `gateway.tools.deny` : noms d’outils supplémentaires bloqués pour HTTP `POST /tools/invoke` (étend la liste de refus par défaut). +- `gateway.tools.allow` : retire des noms d’outils de la liste de refus HTTP par défaut. ### Points de terminaison compatibles OpenAI -- Chat Completions : désactivé par défaut. Activez-le avec `gateway.http.endpoints.chatCompletions.enabled: true`. -- API Responses : `gateway.http.endpoints.responses.enabled`. -- Renforcement des entrées URL de Responses : +- Chat Completions : désactivé par défaut. Activez avec `gateway.http.endpoints.chatCompletions.enabled: true`. +- API Responses : `gateway.http.endpoints.responses.enabled`. +- Renforcement des entrées URL de Responses : - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` - Les listes d’autorisations vides sont traitées comme non définies ; utilisez `gateway.http.endpoints.responses.files.allowUrl=false` + Les listes d’autorisations vides sont traitées comme non définies ; utilisez `gateway.http.endpoints.responses.files.allowUrl=false` et/ou `gateway.http.endpoints.responses.images.allowUrl=false` pour désactiver la récupération d’URL. -- En-tête facultatif de renforcement des réponses : - - `gateway.http.securityHeaders.strictTransportSecurity` (à définir uniquement pour des origines HTTPS que vous contrôlez ; voir [Authentification par proxy approuvé](/fr/gateway/trusted-proxy-auth#tls-termination-and-hsts)) +- En-tête facultatif de renforcement des réponses : + - `gateway.http.securityHeaders.strictTransportSecurity` (à définir uniquement pour des origines HTTPS que vous contrôlez ; voir [Authentification par proxy de confiance](/fr/gateway/trusted-proxy-auth#tls-termination-and-hsts)) ### Isolation multi-instance -Exécutez plusieurs passerelles sur un même hôte avec des ports et répertoires d’état uniques : +Exécutez plusieurs Gateway sur un même hôte avec des ports et répertoires d’état uniques : ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ @@ -2992,7 +2992,7 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \ openclaw gateway --port 19001 ``` -Indicateurs pratiques : `--dev` (utilise `~/.openclaw-dev` + port `19001`), `--profile ` (utilise `~/.openclaw-`). +Indicateurs pratiques : `--dev` (utilise `~/.openclaw-dev` + port `19001`), `--profile ` (utilise `~/.openclaw-`). Voir [Passerelles multiples](/fr/gateway/multiple-gateways). @@ -3012,11 +3012,11 @@ Voir [Passerelles multiples](/fr/gateway/multiple-gateways). } ``` -- `enabled` : active la terminaison TLS au niveau du listener de la passerelle (HTTPS/WSS) (par défaut : `false`). -- `autoGenerate` : génère automatiquement une paire locale certificat/clé auto-signée lorsque des fichiers explicites ne sont pas configurés ; à utiliser uniquement en local/dev. -- `certPath` : chemin du système de fichiers vers le fichier de certificat TLS. -- `keyPath` : chemin du système de fichiers vers le fichier de clé privée TLS ; gardez des permissions restreintes. -- `caPath` : chemin facultatif vers le bundle CA pour la vérification client ou les chaînes de confiance personnalisées. +- `enabled` : active la terminaison TLS au niveau de l’écouteur Gateway (HTTPS/WSS) (par défaut : `false`). +- `autoGenerate` : génère automatiquement une paire cert/key auto-signée locale lorsque des fichiers explicites ne sont pas configurés ; réservé à un usage local/dev. +- `certPath` : chemin système de fichiers vers le certificat TLS. +- `keyPath` : chemin système de fichiers vers la clé privée TLS ; gardez des permissions restreintes. +- `caPath` : chemin facultatif du bundle CA pour la vérification client ou les chaînes de confiance personnalisées. ### `gateway.reload` @@ -3032,13 +3032,13 @@ Voir [Passerelles multiples](/fr/gateway/multiple-gateways). } ``` -- `mode` : contrôle la manière dont les modifications de configuration sont appliquées à l’exécution. - - `"off"` : ignore les modifications en direct ; les changements nécessitent un redémarrage explicite. - - `"restart"` : redémarre toujours le processus de passerelle en cas de changement de configuration. - - `"hot"` : applique les changements en cours de processus sans redémarrage. - - `"hybrid"` (par défaut) : essaie d’abord le rechargement à chaud ; revient au redémarrage si nécessaire. -- `debounceMs` : fenêtre de debounce en ms avant l’application des modifications de configuration (entier non négatif). -- `deferralTimeoutMs` : durée maximale en ms pendant laquelle attendre la fin des opérations en cours avant de forcer un redémarrage (par défaut : `300000` = 5 minutes). +- `mode` : contrôle la manière dont les modifications de configuration sont appliquées à l’exécution. + - `"off"` : ignore les modifications en direct ; les changements nécessitent un redémarrage explicite. + - `"restart"` : redémarre toujours le processus Gateway lors d’un changement de configuration. + - `"hot"` : applique les changements dans le processus sans redémarrer. + - `"hybrid"` (par défaut) : essaie d’abord le rechargement à chaud ; revient au redémarrage si nécessaire. +- `debounceMs` : fenêtre de debounce en ms avant l’application des changements de configuration (entier non négatif). +- `deferralTimeoutMs` : temps maximal en ms d’attente des opérations en vol avant de forcer un redémarrage (par défaut : `300000` = 5 minutes). --- @@ -3075,37 +3075,37 @@ Voir [Passerelles multiples](/fr/gateway/multiple-gateways). } ``` -Authentification : `Authorization: Bearer ` ou `x-openclaw-token: `. +Auth : `Authorization: Bearer ` ou `x-openclaw-token: `. Les jetons de hook dans la chaîne de requête sont rejetés. -Remarques de validation et de sécurité : +Notes de validation et de sécurité : - `hooks.enabled=true` nécessite un `hooks.token` non vide. -- `hooks.token` doit être **distinct** de `gateway.auth.token` ; la réutilisation du jeton de passerelle est rejetée. -- `hooks.path` ne peut pas être `/` ; utilisez un sous-chemin dédié tel que `/hooks`. -- Si `hooks.allowRequestSessionKey=true`, limitez `hooks.allowedSessionKeyPrefixes` (par exemple `["hook:"]`). +- `hooks.token` doit être **distinct** de `gateway.auth.token` ; la réutilisation du jeton Gateway est rejetée. +- `hooks.path` ne peut pas être `/` ; utilisez un sous-chemin dédié tel que `/hooks`. +- Si `hooks.allowRequestSessionKey=true`, contraignez `hooks.allowedSessionKeyPrefixes` (par exemple `["hook:"]`). -**Points de terminaison :** +**Points de terminaison :** - `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }` - `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }` - - `sessionKey` venant de la charge utile de la requête n’est accepté que lorsque `hooks.allowRequestSessionKey=true` (par défaut : `false`). + - `sessionKey` depuis la charge utile de requête n’est accepté que lorsque `hooks.allowRequestSessionKey=true` (par défaut : `false`). - `POST /hooks/` → résolu via `hooks.mappings` - + - `match.path` correspond au sous-chemin après `/hooks` (par ex. `/hooks/gmail` → `gmail`). - `match.source` correspond à un champ de la charge utile pour les chemins génériques. -- Les modèles comme `{{messages[0].subject}}` lisent à partir de la charge utile. +- Des modèles comme `{{messages[0].subject}}` lisent depuis la charge utile. - `transform` peut pointer vers un module JS/TS renvoyant une action de hook. - - `transform.module` doit être un chemin relatif et rester dans `hooks.transformsDir` (les chemins absolus et la traversée sont rejetés). -- `agentId` route vers un agent spécifique ; les ID inconnus reviennent à l’agent par défaut. -- `allowedAgentIds` : restreint le routage explicite (`*` ou omis = tout autoriser, `[]` = tout refuser). -- `defaultSessionKey` : clé de session fixe facultative pour les exécutions d’agent hook sans `sessionKey` explicite. -- `allowRequestSessionKey` : autorise les appelants de `/hooks/agent` à définir `sessionKey` (par défaut : `false`). -- `allowedSessionKeyPrefixes` : liste d’autorisations facultative de préfixes pour les valeurs explicites de `sessionKey` (requête + mapping), par ex. `["hook:"]`. -- `deliver: true` envoie la réponse finale vers un canal ; `channel` vaut par défaut `last`. -- `model` remplace le LLM pour cette exécution de hook (doit être autorisé si un catalogue de modèles est défini). + - `transform.module` doit être un chemin relatif et reste dans `hooks.transformsDir` (les chemins absolus et la traversée sont rejetés). +- `agentId` route vers un agent spécifique ; les ID inconnus reviennent à l’agent par défaut. +- `allowedAgentIds` : restreint le routage explicite (`*` ou omis = tout autoriser, `[]` = tout refuser). +- `defaultSessionKey` : clé de session fixe facultative pour les exécutions d’agent hook sans `sessionKey` explicite. +- `allowRequestSessionKey` : autorise les appelants de `/hooks/agent` à définir `sessionKey` (par défaut : `false`). +- `allowedSessionKeyPrefixes` : liste d’autorisations facultative des préfixes pour les valeurs explicites `sessionKey` (requête + mapping), par ex. `["hook:"]`. +- `deliver: true` envoie la réponse finale à un canal ; `channel` vaut par défaut `last`. +- `model` remplace le LLM pour cette exécution de hook (doit être autorisé si le catalogue de modèles est défini). @@ -3132,8 +3132,8 @@ Remarques de validation et de sécurité : } ``` -- La passerelle démarre automatiquement `gog gmail watch serve` au démarrage lorsqu’il est configuré. Définissez `OPENCLAW_SKIP_GMAIL_WATCHER=1` pour le désactiver. -- N’exécutez pas un `gog gmail watch serve` séparé en parallèle de la passerelle. +- Le Gateway démarre automatiquement `gog gmail watch serve` au démarrage lorsqu’il est configuré. Définissez `OPENCLAW_SKIP_GMAIL_WATCHER=1` pour le désactiver. +- N’exécutez pas un `gog gmail watch serve` séparé en parallèle du Gateway. --- @@ -3149,17 +3149,17 @@ Remarques de validation et de sécurité : } ``` -- Sert HTML/CSS/JS modifiables par agent et A2UI via HTTP sous le port de la passerelle : +- Sert du HTML/CSS/JS modifiable par agent et A2UI en HTTP sous le port Gateway : - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` -- Local uniquement : conservez `gateway.bind: "loopback"` (par défaut). -- Liaisons non loopback : les routes canvas exigent l’authentification de la passerelle (jeton/mot de passe/trusted-proxy), comme les autres surfaces HTTP de la passerelle. -- Les WebViews Node n’envoient généralement pas d’en-têtes d’authentification ; après appairage et connexion d’un nœud, la passerelle annonce des URL de capacité limitées au nœud pour l’accès canvas/A2UI. -- Les URL de capacité sont liées à la session WS active du nœud et expirent rapidement. Aucun secours basé sur IP n’est utilisé. +- Local uniquement : conservez `gateway.bind: "loopback"` (par défaut). +- Binds non-loopback : les routes canvas nécessitent l’authentification Gateway (token/password/trusted-proxy), comme les autres surfaces HTTP Gateway. +- Les Node WebViews n’envoient généralement pas d’en-têtes d’authentification ; une fois qu’un node est appairé et connecté, le Gateway annonce des URLs de capacité à portée du node pour l’accès canvas/A2UI. +- Les URLs de capacité sont liées à la session WS du node active et expirent rapidement. Le repli basé sur l’IP n’est pas utilisé. - Injecte un client live-reload dans le HTML servi. -- Crée automatiquement un `index.html` de départ lorsque le répertoire est vide. -- Sert également A2UI sous `/__openclaw__/a2ui/`. -- Les modifications nécessitent un redémarrage de la passerelle. +- Crée automatiquement un `index.html` de démarrage lorsqu’il est vide. +- Sert également A2UI à `/__openclaw__/a2ui/`. +- Les modifications nécessitent un redémarrage du Gateway. - Désactivez le live reload pour les grands répertoires ou les erreurs `EMFILE`. --- @@ -3178,11 +3178,11 @@ Remarques de validation et de sécurité : } ``` -- `minimal` (par défaut) : omet `cliPath` + `sshPort` des enregistrements TXT. -- `full` : inclut `cliPath` + `sshPort`. +- `minimal` (par défaut) : omet `cliPath` + `sshPort` des enregistrements TXT. +- `full` : inclut `cliPath` + `sshPort`. - Le nom d’hôte vaut par défaut `openclaw`. Remplacez-le avec `OPENCLAW_MDNS_HOSTNAME`. -### Large portée (DNS-SD) +### Zone étendue (DNS-SD) ```json5 { @@ -3192,15 +3192,15 @@ Remarques de validation et de sécurité : } ``` -Écrit une zone DNS-SD unicast sous `~/.openclaw/dns/`. Pour la découverte inter-réseaux, combinez avec un serveur DNS (CoreDNS recommandé) + DNS fractionné Tailscale. +Écrit une zone DNS-SD unicast sous `~/.openclaw/dns/`. Pour la découverte inter-réseaux, combinez cela avec un serveur DNS (CoreDNS recommandé) + DNS fractionné Tailscale. -Configuration : `openclaw dns setup --apply`. +Installation : `openclaw dns setup --apply`. --- ## Environnement -### `env` (variables d’environnement en ligne) +### `env` (variables d’environnement inline) ```json5 { @@ -3217,14 +3217,14 @@ Configuration : `openclaw dns setup --apply`. } ``` -- Les variables d’environnement en ligne ne sont appliquées que si l’environnement du processus ne contient pas déjà la clé. -- Fichiers `.env` : `.env` du répertoire courant + `~/.openclaw/.env` (aucun ne remplace des variables existantes). -- `shellEnv` : importe les clés attendues manquantes depuis votre profil shell de connexion. -- Voir [Environnement](/fr/help/environment) pour la priorité complète. +- Les variables d’environnement inline ne sont appliquées que si l’environnement du processus ne contient pas déjà la clé. +- Fichiers `.env` : `.env` du CWD + `~/.openclaw/.env` (aucun ne remplace les variables existantes). +- `shellEnv` : importe les clés attendues manquantes depuis le profil de votre shell de connexion. +- Voir [Environnement](/fr/help/environment) pour l’ordre de priorité complet. -### Substitution de variable d’environnement +### Substitution de variables d’environnement -Référencez des variables d’environnement dans n’importe quelle chaîne de configuration avec `${VAR_NAME}` : +Référencez des variables d’environnement dans n’importe quelle chaîne de configuration avec `${VAR_NAME}` : ```json5 { @@ -3234,38 +3234,38 @@ Référencez des variables d’environnement dans n’importe quelle chaîne de } ``` -- Seuls les noms en majuscules sont pris en compte : `[A-Z_][A-Z0-9_]*`. +- Seuls les noms en majuscules sont pris en charge : `[A-Z_][A-Z0-9_]*`. - Les variables manquantes/vides provoquent une erreur au chargement de la configuration. -- Échappez avec `$${VAR}` pour obtenir un littéral `${VAR}`. +- Échappez avec `$${VAR}` pour obtenir un `${VAR}` littéral. - Fonctionne avec `$include`. --- ## Secrets -Les références de secret sont additives : les valeurs en texte brut continuent de fonctionner. +Les références de secret sont additives : les valeurs en texte brut continuent de fonctionner. ### `SecretRef` -Utilisez une seule forme d’objet : +Utilisez une seule forme d’objet : ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } ``` -Validation : +Validation : -- motif `provider` : `^[a-z][a-z0-9_-]{0,63}$` -- motif `id` pour `source: "env"` : `^[A-Z][A-Z0-9_]{0,127}$` -- `source: "file"` `id` : pointeur JSON absolu (par exemple `"/providers/openai/apiKey"`) -- motif `id` pour `source: "exec"` : `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- Les `id` de `source: "exec"` ne doivent pas contenir de segments de chemin `.` ou `..` séparés par `/` (par exemple `a/../b` est rejeté) +- motif `provider` : `^[a-z][a-z0-9_-]{0,63}$` +- motif `source: "env"` pour `id` : `^[A-Z][A-Z0-9_]{0,127}$` +- `source: "file"` pour `id` : pointeur JSON absolu (par exemple `"/providers/openai/apiKey"`) +- motif `source: "exec"` pour `id` : `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` +- les `id` avec `source: "exec"` ne doivent pas contenir de segments de chemin `/` délimités `.` ou `..` (par exemple `a/../b` est rejeté) ### Surface d’identifiants prise en charge -- Matrice canonique : [Surface d’identifiants SecretRef](/fr/reference/secretref-credential-surface) -- `secrets apply` cible les chemins d’identifiants pris en charge dans `openclaw.json`. -- Les références `auth-profiles.json` sont incluses dans la résolution à l’exécution et dans la couverture d’audit. +- Matrice canonique : [Surface d’identifiants SecretRef](/fr/reference/secretref-credential-surface) +- `secrets apply` cible les chemins d’identifiants pris en charge de `openclaw.json`. +- Les références `auth-profiles.json` sont incluses dans la résolution d’exécution et la couverture d’audit. ### Configuration des fournisseurs de secrets @@ -3295,19 +3295,19 @@ Validation : } ``` -Remarques : +Remarques : - Le fournisseur `file` prend en charge `mode: "json"` et `mode: "singleValue"` (`id` doit être `"value"` en mode singleValue). -- Le fournisseur `exec` exige un chemin `command` absolu et utilise des charges utiles de protocole sur stdin/stdout. -- Par défaut, les chemins de commande symlink sont rejetés. Définissez `allowSymlinkCommand: true` pour autoriser les chemins symlink tout en validant le chemin cible résolu. -- Si `trustedDirs` est configuré, la vérification des répertoires approuvés s’applique au chemin cible résolu. -- L’environnement enfant `exec` est minimal par défaut ; transmettez explicitement les variables requises avec `passEnv`. +- Le fournisseur `exec` nécessite un chemin `command` absolu et utilise des charges utiles de protocole sur stdin/stdout. +- Par défaut, les chemins de commande symlink sont rejetés. Définissez `allowSymlinkCommand: true` pour autoriser les chemins symlink tout en validant le chemin de la cible résolue. +- Si `trustedDirs` est configuré, la vérification des répertoires de confiance s’applique au chemin de la cible résolue. +- L’environnement enfant `exec` est minimal par défaut ; transmettez explicitement les variables requises avec `passEnv`. - Les références de secret sont résolues au moment de l’activation dans un instantané en mémoire, puis les chemins de requête lisent uniquement cet instantané. -- Le filtrage des surfaces actives s’applique pendant l’activation : les références non résolues sur les surfaces activées font échouer le démarrage/rechargement, tandis que les surfaces inactives sont ignorées avec diagnostics. +- Le filtrage de surface active s’applique pendant l’activation : les références non résolues sur des surfaces actives font échouer le démarrage/rechargement, tandis que les surfaces inactives sont ignorées avec diagnostics. --- -## Stockage d’authentification +## Stockage Auth ```json5 { @@ -3326,12 +3326,12 @@ Remarques : ``` - Les profils par agent sont stockés dans `/auth-profiles.json`. -- `auth-profiles.json` prend en charge des références au niveau des valeurs (`keyRef` pour `api_key`, `tokenRef` pour `token`) pour les modes d’identifiants statiques. -- Les profils en mode OAuth (`auth.profiles..mode = "oauth"`) ne prennent pas en charge des identifiants de profil d’authentification adossés à SecretRef. -- Les identifiants statiques d’exécution proviennent d’instantanés résolus en mémoire ; les anciennes entrées statiques `auth.json` sont purgées lorsqu’elles sont découvertes. -- Importations OAuth héritées depuis `~/.openclaw/credentials/oauth.json`. +- `auth-profiles.json` prend en charge des références au niveau valeur (`keyRef` pour `api_key`, `tokenRef` pour `token`) pour les modes d’identifiants statiques. +- Les profils en mode OAuth (`auth.profiles..mode = "oauth"`) ne prennent pas en charge les identifiants `auth-profile` appuyés sur SecretRef. +- Les identifiants statiques d’exécution proviennent d’instantanés résolus en mémoire ; les anciennes entrées statiques `auth.json` sont nettoyées lorsqu’elles sont découvertes. +- Les imports OAuth hérités proviennent de `~/.openclaw/credentials/oauth.json`. - Voir [OAuth](/fr/concepts/oauth). -- Comportement du runtime des secrets et outils `audit/configure/apply` : [Gestion des secrets](/fr/gateway/secrets). +- Comportement d’exécution des secrets et outils `audit/configure/apply` : [Gestion des secrets](/fr/gateway/secrets). ### `auth.cooldowns` @@ -3353,21 +3353,20 @@ Remarques : } ``` -- `billingBackoffHours` : délai de repli de base en heures lorsqu’un profil échoue à cause de véritables - erreurs de facturation/crédit insuffisant (par défaut : `5`). Un texte explicite de facturation peut - toujours arriver ici même sur des réponses `401`/`403`, mais les correspondances textuelles spécifiques au fournisseur - restent limitées au fournisseur qui les possède (par exemple OpenRouter - `Key limit exceeded`). Les messages HTTP `402` réessayables liés à une fenêtre d’utilisation ou - à une limite de dépense d’organisation/espace de travail restent dans le chemin `rate_limit` - à la place. -- `billingBackoffHoursByProvider` : remplacements facultatifs par fournisseur pour le délai de repli de facturation en heures. -- `billingMaxHours` : plafond en heures pour la croissance exponentielle du délai de repli de facturation (par défaut : `24`). -- `authPermanentBackoffMinutes` : délai de repli de base en minutes pour les échecs `auth_permanent` à forte confiance (par défaut : `10`). -- `authPermanentMaxMinutes` : plafond en minutes pour la croissance du délai de repli `auth_permanent` (par défaut : `60`). -- `failureWindowHours` : fenêtre glissante en heures utilisée pour les compteurs de délai de repli (par défaut : `24`). -- `overloadedProfileRotations` : nombre maximal de rotations de profil d’authentification du même fournisseur pour les erreurs de surcharge avant de passer au modèle de secours (par défaut : `1`). Les formes de fournisseur occupé comme `ModelNotReadyException` aboutissent ici. -- `overloadedBackoffMs` : délai fixe avant de réessayer une rotation de fournisseur/profil surchargé (par défaut : `0`). -- `rateLimitedProfileRotations` : nombre maximal de rotations de profil d’authentification du même fournisseur pour les erreurs de limite de débit avant de passer au modèle de secours (par défaut : `1`). Cette catégorie de limite de débit inclut des textes propres aux fournisseurs tels que `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` et `resource exhausted`. +- `billingBackoffHours` : backoff de base en heures lorsqu’un profil échoue à cause de vraies + erreurs de facturation/crédit insuffisant (par défaut : `5`). Un texte explicite de facturation peut + toujours tomber ici même sur des réponses `401`/`403`, mais les + matchers de texte spécifiques au fournisseur restent limités au fournisseur qui les possède (par exemple OpenRouter + `Key limit exceeded`). Les messages retryable HTTP `402` de fenêtre d’utilisation ou de + limite de dépense d’organisation/workspace restent à la place dans le chemin `rate_limit`. +- `billingBackoffHoursByProvider` : remplacements facultatifs par fournisseur pour les heures de backoff de facturation. +- `billingMaxHours` : plafond en heures pour la croissance exponentielle du backoff de facturation (par défaut : `24`). +- `authPermanentBackoffMinutes` : backoff de base en minutes pour les échecs `auth_permanent` à forte confiance (par défaut : `10`). +- `authPermanentMaxMinutes` : plafond en minutes pour la croissance du backoff `auth_permanent` (par défaut : `60`). +- `failureWindowHours` : fenêtre glissante en heures utilisée pour les compteurs de backoff (par défaut : `24`). +- `overloadedProfileRotations` : nombre maximal de rotations de profil auth chez le même fournisseur pour des erreurs de surcharge avant de basculer vers le repli de modèle (par défaut : `1`). Des formes de fournisseur occupé telles que `ModelNotReadyException` tombent ici. +- `overloadedBackoffMs` : délai fixe avant une nouvelle tentative de rotation de profil/fournisseur surchargé (par défaut : `0`). +- `rateLimitedProfileRotations` : nombre maximal de rotations de profil auth chez le même fournisseur pour des erreurs de limitation de débit avant de basculer vers le repli de modèle (par défaut : `1`). Ce compartiment de limitation de débit inclut des textes typiques de fournisseur tels que `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` et `resource exhausted`. --- @@ -3386,10 +3385,10 @@ Remarques : } ``` -- Fichier journal par défaut : `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. +- Fichier journal par défaut : `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. - Définissez `logging.file` pour un chemin stable. - `consoleLevel` passe à `debug` avec `--verbose`. -- `maxFileBytes` : taille maximale du fichier journal en octets avant suppression des écritures (entier positif ; par défaut : `524288000` = 500 MB). Utilisez une rotation externe des journaux pour les déploiements de production. +- `maxFileBytes` : taille maximale du fichier journal en octets avant suppression des écritures (entier positif ; par défaut : `524288000` = 500 MB). Utilisez une rotation externe des journaux pour les déploiements de production. --- @@ -3426,20 +3425,20 @@ Remarques : } ``` -- `enabled` : interrupteur maître pour la sortie d’instrumentation (par défaut : `true`). -- `flags` : tableau de chaînes d’indicateurs activant une sortie de journal ciblée (prend en charge des jokers comme `"telegram.*"` ou `"*"`). -- `stuckSessionWarnMs` : seuil d’ancienneté en ms pour émettre des avertissements de session bloquée tant qu’une session reste à l’état de traitement. -- `otel.enabled` : active le pipeline d’export OpenTelemetry (par défaut : `false`). -- `otel.endpoint` : URL du collecteur pour l’export OTel. -- `otel.protocol` : `"http/protobuf"` (par défaut) ou `"grpc"`. -- `otel.headers` : en-têtes de métadonnées HTTP/gRPC supplémentaires envoyés avec les requêtes d’export OTel. -- `otel.serviceName` : nom du service pour les attributs de ressource. -- `otel.traces` / `otel.metrics` / `otel.logs` : activent l’export des traces, métriques ou journaux. -- `otel.sampleRate` : taux d’échantillonnage des traces `0`–`1`. -- `otel.flushIntervalMs` : intervalle périodique de vidage de télémétrie en ms. -- `cacheTrace.enabled` : journalise les instantanés de trace de cache pour les exécutions embarquées (par défaut : `false`). -- `cacheTrace.filePath` : chemin de sortie pour le JSONL de trace de cache (par défaut : `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem` : contrôlent ce qui est inclus dans la sortie de trace de cache (tous par défaut : `true`). +- `enabled` : interrupteur maître de sortie d’instrumentation (par défaut : `true`). +- `flags` : tableau de chaînes de drapeaux activant une sortie de journal ciblée (prend en charge des jokers comme `"telegram.*"` ou `"*"`). +- `stuckSessionWarnMs` : seuil d’ancienneté en ms pour émettre des avertissements de session bloquée tant qu’une session reste à l’état de traitement. +- `otel.enabled` : active le pipeline d’export OpenTelemetry (par défaut : `false`). +- `otel.endpoint` : URL du collecteur pour l’export OTel. +- `otel.protocol` : `"http/protobuf"` (par défaut) ou `"grpc"`. +- `otel.headers` : en-têtes de métadonnées HTTP/gRPC supplémentaires envoyés avec les requêtes d’export OTel. +- `otel.serviceName` : nom de service pour les attributs de ressource. +- `otel.traces` / `otel.metrics` / `otel.logs` : active l’export de traces, de métriques ou de journaux. +- `otel.sampleRate` : taux d’échantillonnage des traces `0`–`1`. +- `otel.flushIntervalMs` : intervalle périodique de vidage de télémétrie en ms. +- `cacheTrace.enabled` : journalise les instantanés de trace de cache pour les exécutions embarquées (par défaut : `false`). +- `cacheTrace.filePath` : chemin de sortie du JSONL de trace de cache (par défaut : `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem` : contrôlent ce qui est inclus dans la sortie de trace de cache (tous à `true` par défaut). --- @@ -3461,12 +3460,12 @@ Remarques : } ``` -- `channel` : canal de publication pour les installations npm/git — `"stable"`, `"beta"` ou `"dev"`. -- `checkOnStart` : vérifie les mises à jour npm au démarrage de la passerelle (par défaut : `true`). -- `auto.enabled` : active la mise à jour automatique en arrière-plan pour les installations de package (par défaut : `false`). -- `auto.stableDelayHours` : délai minimal en heures avant l’application automatique sur le canal stable (par défaut : `6` ; max : `168`). -- `auto.stableJitterHours` : fenêtre supplémentaire de lissage du déploiement du canal stable en heures (par défaut : `12` ; max : `168`). -- `auto.betaCheckIntervalHours` : fréquence des vérifications du canal bêta en heures (par défaut : `1` ; max : `24`). +- `channel` : canal de publication pour les installations npm/git — `"stable"`, `"beta"` ou `"dev"`. +- `checkOnStart` : vérifie les mises à jour npm au démarrage du Gateway (par défaut : `true`). +- `auto.enabled` : active la mise à jour automatique en arrière-plan pour les installations de package (par défaut : `false`). +- `auto.stableDelayHours` : délai minimal en heures avant application automatique sur le canal stable (par défaut : `6` ; max : `168`). +- `auto.stableJitterHours` : fenêtre supplémentaire d’étalement du déploiement sur le canal stable en heures (par défaut : `12` ; max : `168`). +- `auto.betaCheckIntervalHours` : fréquence des vérifications sur le canal bêta en heures (par défaut : `1` ; max : `24`). --- @@ -3499,22 +3498,22 @@ Remarques : } ``` -- `enabled` : garde de fonctionnalité ACP globale (par défaut : `false`). -- `dispatch.enabled` : garde indépendante pour l’envoi des tours de session ACP (par défaut : `true`). Définissez `false` pour conserver les commandes ACP disponibles tout en bloquant l’exécution. -- `backend` : ID du backend runtime ACP par défaut (doit correspondre à un plugin runtime ACP enregistré). -- `defaultAgent` : ID d’agent ACP cible de secours lorsque les lancements ne spécifient pas de cible explicite. -- `allowedAgents` : liste d’autorisations des ID d’agent permis pour les sessions runtime ACP ; vide signifie aucune restriction supplémentaire. -- `maxConcurrentSessions` : nombre maximal de sessions ACP actives simultanément. -- `stream.coalesceIdleMs` : fenêtre de vidage après inactivité en ms pour le texte diffusé en continu. -- `stream.maxChunkChars` : taille maximale de bloc avant découpage de la projection du flux. -- `stream.repeatSuppression` : supprime les lignes répétées d’état/d’outil par tour (par défaut : `true`). -- `stream.deliveryMode` : `"live"` diffuse progressivement ; `"final_only"` met en mémoire tampon jusqu’aux événements terminaux du tour. -- `stream.hiddenBoundarySeparator` : séparateur avant le texte visible après des événements d’outil masqués (par défaut : `"paragraph"`). -- `stream.maxOutputChars` : nombre maximal de caractères de sortie assistant projetés par tour ACP. -- `stream.maxSessionUpdateChars` : nombre maximal de caractères pour les lignes projetées d’état/mise à jour ACP. -- `stream.tagVisibility` : enregistrement des noms de balises vers des remplacements booléens de visibilité pour les événements diffusés. -- `runtime.ttlMinutes` : TTL d’inactivité en minutes pour les workers de session ACP avant nettoyage éligible. -- `runtime.installCommand` : commande d’installation facultative à exécuter lors de l’initialisation d’un environnement runtime ACP. +- `enabled` : gate de fonctionnalité ACP globale (par défaut : `false`). +- `dispatch.enabled` : gate indépendante pour la distribution des tours de session ACP (par défaut : `true`). Définissez `false` pour garder les commandes ACP disponibles tout en bloquant l’exécution. +- `backend` : ID backend d’exécution ACP par défaut (doit correspondre à un Plugin d’exécution ACP enregistré). +- `defaultAgent` : ID d’agent cible ACP de repli lorsque les créations ne spécifient pas de cible explicite. +- `allowedAgents` : liste d’autorisations des ID d’agents permis pour les sessions d’exécution ACP ; vide signifie aucune restriction supplémentaire. +- `maxConcurrentSessions` : nombre maximal de sessions ACP actives simultanément. +- `stream.coalesceIdleMs` : fenêtre de flush à l’inactivité en ms pour le texte diffusé. +- `stream.maxChunkChars` : taille maximale d’un morceau avant division de la projection du bloc diffusé. +- `stream.repeatSuppression` : supprime les lignes répétées de statut/d’outil par tour (par défaut : `true`). +- `stream.deliveryMode` : `"live"` diffuse progressivement ; `"final_only"` met en mémoire tampon jusqu’aux événements terminaux du tour. +- `stream.hiddenBoundarySeparator` : séparateur avant le texte visible après des événements d’outil cachés (par défaut : `"paragraph"`). +- `stream.maxOutputChars` : nombre maximal de caractères de sortie assistant projetés par tour ACP. +- `stream.maxSessionUpdateChars` : nombre maximal de caractères pour les lignes projetées de statut/mise à jour ACP. +- `stream.tagVisibility` : enregistrement des noms de balises vers des remplacements booléens de visibilité pour les événements diffusés. +- `runtime.ttlMinutes` : TTL d’inactivité en minutes pour les workers de session ACP avant qu’ils soient éligibles au nettoyage. +- `runtime.installCommand` : commande d’installation facultative à exécuter lors du bootstrap d’un environnement d’exécution ACP. --- @@ -3530,17 +3529,17 @@ Remarques : } ``` -- `cli.banner.taglineMode` contrôle le style du slogan de la bannière : - - `"random"` (par défaut) : slogans tournants amusants/saisonniers. - - `"default"` : slogan neutre fixe (`All your chats, one OpenClaw.`). - - `"off"` : aucun texte de slogan (le titre/version de la bannière reste affiché). +- `cli.banner.taglineMode` contrôle le style du slogan de bannière : + - `"random"` (par défaut) : slogans tournants, amusants/de saison. + - `"default"` : slogan neutre fixe (`All your chats, one OpenClaw.`). + - `"off"` : aucun texte de slogan (le titre/la version de la bannière restent affichés). - Pour masquer toute la bannière (pas seulement les slogans), définissez la variable d’environnement `OPENCLAW_HIDE_BANNER=1`. --- -## Assistant +## Wizard -Métadonnées écrites par les flux de configuration guidée de la CLI (`onboard`, `configure`, `doctor`) : +Métadonnées écrites par les flux d’installation guidée de la CLI (`onboard`, `configure`, `doctor`) : ```json5 { @@ -3558,13 +3557,13 @@ Métadonnées écrites par les flux de configuration guidée de la CLI (`onboard ## Identité -Voir les champs d’identité de `agents.list` dans [Valeurs par défaut de l’agent](#agent-defaults). +Voir les champs d’identité de `agents.list` sous [Valeurs par défaut des agents](#agent-defaults). --- ## Bridge (hérité, supprimé) -Les builds actuels n’incluent plus le bridge TCP. Les nœuds se connectent via le WebSocket de la passerelle. Les clés `bridge.*` ne font plus partie du schéma de configuration (la validation échoue jusqu’à leur suppression ; `openclaw doctor --fix` peut retirer les clés inconnues). +Les builds actuels n’incluent plus le bridge TCP. Les nodes se connectent via le WebSocket Gateway. Les clés `bridge.*` ne font plus partie du schéma de configuration (la validation échoue tant qu’elles ne sont pas supprimées ; `openclaw doctor --fix` peut retirer les clés inconnues). @@ -3604,11 +3603,11 @@ Les builds actuels n’incluent plus le bridge TCP. Les nœuds se connectent via } ``` -- `sessionRetention` : durée de conservation des sessions terminées d’exécution cron isolée avant leur élagage de `sessions.json`. Contrôle également le nettoyage des transcriptions cron supprimées archivées. Par défaut : `24h` ; définissez `false` pour désactiver. -- `runLog.maxBytes` : taille maximale par fichier journal d’exécution (`cron/runs/.jsonl`) avant élagage. Par défaut : `2_000_000` octets. -- `runLog.keepLines` : lignes les plus récentes conservées lorsque l’élagage du journal d’exécution est déclenché. Par défaut : `2000`. -- `webhookToken` : jeton bearer utilisé pour la livraison POST du webhook cron (`delivery.mode = "webhook"`), si omis aucun en-tête d’authentification n’est envoyé. -- `webhook` : URL de webhook de secours héritée et dépréciée (http/https), utilisée uniquement pour les tâches stockées qui ont encore `notify: true`. +- `sessionRetention` : durée de conservation des sessions d’exécution Cron isolées terminées avant élagage de `sessions.json`. Contrôle également le nettoyage des transcriptions Cron archivées supprimées. Par défaut : `24h` ; définissez `false` pour désactiver. +- `runLog.maxBytes` : taille maximale par fichier journal d’exécution (`cron/runs/.jsonl`) avant élagage. Par défaut : `2_000_000` octets. +- `runLog.keepLines` : nombre de lignes les plus récentes conservées lorsque l’élagage du journal d’exécution est déclenché. Par défaut : `2000`. +- `webhookToken` : jeton bearer utilisé pour la livraison POST du Webhook Cron (`delivery.mode = "webhook"`) ; s’il est omis, aucun en-tête d’authentification n’est envoyé. +- `webhook` : URL Webhook de repli héritée obsolète (http/https) utilisée uniquement pour les tâches stockées qui ont encore `notify: true`. ### `cron.retry` @@ -3624,11 +3623,11 @@ Les builds actuels n’incluent plus le bridge TCP. Les nœuds se connectent via } ``` -- `maxAttempts` : nombre maximal de nouvelles tentatives pour les tâches ponctuelles en cas d’erreurs transitoires (par défaut : `3` ; plage : `0`–`10`). -- `backoffMs` : tableau des délais de repli en ms pour chaque tentative de nouvelle exécution (par défaut : `[30000, 60000, 300000]` ; 1 à 10 entrées). -- `retryOn` : types d’erreurs déclenchant les nouvelles tentatives — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Omettez pour réessayer tous les types transitoires. +- `maxAttempts` : nombre maximal de nouvelles tentatives pour les tâches ponctuelles sur erreurs transitoires (par défaut : `3` ; plage : `0`–`10`). +- `backoffMs` : tableau de délais de backoff en ms pour chaque nouvelle tentative (par défaut : `[30000, 60000, 300000]` ; 1 à 10 entrées). +- `retryOn` : types d’erreurs qui déclenchent les nouvelles tentatives — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Omettez ce champ pour réessayer tous les types transitoires. -S’applique uniquement aux tâches cron ponctuelles. Les tâches récurrentes utilisent une gestion d’échec distincte. +S’applique uniquement aux tâches Cron ponctuelles. Les tâches récurrentes utilisent une gestion des échecs distincte. ### `cron.failureAlert` @@ -3646,11 +3645,11 @@ S’applique uniquement aux tâches cron ponctuelles. Les tâches récurrentes u } ``` -- `enabled` : active les alertes d’échec pour les tâches cron (par défaut : `false`). -- `after` : nombre d’échecs consécutifs avant déclenchement d’une alerte (entier positif, min : `1`). -- `cooldownMs` : nombre minimal de millisecondes entre des alertes répétées pour la même tâche (entier non négatif). -- `mode` : mode de livraison — `"announce"` envoie via un message de canal ; `"webhook"` publie vers le webhook configuré. -- `accountId` : ID facultatif de compte ou de canal pour limiter la portée de la livraison d’alerte. +- `enabled` : active les alertes d’échec pour les tâches Cron (par défaut : `false`). +- `after` : nombre d’échecs consécutifs avant le déclenchement d’une alerte (entier positif, min : `1`). +- `cooldownMs` : nombre minimal de millisecondes entre des alertes répétées pour la même tâche (entier non négatif). +- `mode` : mode de livraison — `"announce"` envoie via un message de canal ; `"webhook"` publie vers le Webhook configuré. +- `accountId` : ID facultatif de compte ou de canal pour limiter la portée de la livraison d’alerte. ### `cron.failureDestination` @@ -3667,27 +3666,27 @@ S’applique uniquement aux tâches cron ponctuelles. Les tâches récurrentes u } ``` -- Destination par défaut pour les notifications d’échec cron pour toutes les tâches. -- `mode` : `"announce"` ou `"webhook"` ; vaut par défaut `"announce"` lorsque suffisamment de données cibles existent. -- `channel` : remplacement de canal pour la livraison announce. `"last"` réutilise le dernier canal de livraison connu. -- `to` : cible announce explicite ou URL du webhook. Obligatoire pour le mode webhook. -- `accountId` : remplacement facultatif du compte pour la livraison. -- `delivery.failureDestination` par tâche remplace cette valeur globale par défaut. +- Destination par défaut des notifications d’échec Cron pour toutes les tâches. +- `mode` : `"announce"` ou `"webhook"` ; vaut par défaut `"announce"` lorsqu’il existe assez de données de cible. +- `channel` : remplacement du canal pour la livraison announce. `"last"` réutilise le dernier canal de livraison connu. +- `to` : cible announce explicite ou URL Webhook. Obligatoire en mode Webhook. +- `accountId` : remplacement facultatif du compte pour la livraison. +- `delivery.failureDestination` par tâche remplace cette valeur par défaut globale. - Lorsqu’aucune destination d’échec globale ni par tâche n’est définie, les tâches qui livrent déjà via `announce` reviennent à cette cible announce principale en cas d’échec. - `delivery.failureDestination` n’est pris en charge que pour les tâches `sessionTarget="isolated"` sauf si le `delivery.mode` principal de la tâche est `"webhook"`. -Voir [Tâches cron](/fr/automation/cron-jobs). Les exécutions cron isolées sont suivies en tant que [tâches d’arrière-plan](/fr/automation/tasks). +Voir [Tâches Cron](/fr/automation/cron-jobs). Les exécutions Cron isolées sont suivies comme des [tâches en arrière-plan](/fr/automation/tasks). --- ## Variables de modèle média -Espaces réservés de modèle développés dans `tools.media.models[].args` : +Espaces réservés de modèle développés dans `tools.media.models[].args` : | Variable | Description | | ------------------ | ------------------------------------------------- | | `{{Body}}` | Corps complet du message entrant | -| `{{RawBody}}` | Corps brut (sans enveloppes historique/expéditeur) | +| `{{RawBody}}` | Corps brut (sans wrappers d’historique/d’expéditeur) | | `{{BodyStripped}}` | Corps avec les mentions de groupe supprimées | | `{{From}}` | Identifiant de l’expéditeur | | `{{To}}` | Identifiant de destination | @@ -3705,13 +3704,13 @@ Espaces réservés de modèle développés dans `tools.media.models[].args` : | `{{GroupMembers}}` | aperçu des membres du groupe (au mieux) | | `{{SenderName}}` | nom d’affichage de l’expéditeur (au mieux) | | `{{SenderE164}}` | numéro de téléphone de l’expéditeur (au mieux) | -| `{{Provider}}` | indice du fournisseur (whatsapp, telegram, discord, etc.) | +| `{{Provider}}` | indication de fournisseur (whatsapp, telegram, discord, etc.) | --- -## Includes de configuration (`$include`) +## Inclusions de configuration (`$include`) -Divisez la configuration en plusieurs fichiers : +Divisez la configuration en plusieurs fichiers : ```json5 // ~/.openclaw/openclaw.json @@ -3724,14 +3723,14 @@ Divisez la configuration en plusieurs fichiers : } ``` -**Comportement de fusion :** +**Comportement de fusion :** -- Fichier unique : remplace l’objet conteneur. -- Tableau de fichiers : fusion profonde dans l’ordre (les suivants remplacent les précédents). -- Clés voisines : fusionnées après les includes (remplacent les valeurs incluses). -- Includes imbriqués : jusqu’à 10 niveaux de profondeur. -- Chemins : résolus relativement au fichier incluant, mais doivent rester dans le répertoire de configuration de niveau supérieur (`dirname` de `openclaw.json`). Les formes absolues/`../` sont autorisées uniquement si elles se résolvent toujours dans cette limite. -- Erreurs : messages clairs pour les fichiers manquants, les erreurs d’analyse et les includes circulaires. +- Fichier unique : remplace l’objet conteneur. +- Tableau de fichiers : fusion profonde dans l’ordre (les derniers remplacent les précédents). +- Clés sœurs : fusionnées après les inclusions (remplacent les valeurs incluses). +- Inclusions imbriquées : jusqu’à 10 niveaux de profondeur. +- Chemins : résolus relativement au fichier incluant, mais doivent rester dans le répertoire de configuration de niveau supérieur (`dirname` de `openclaw.json`). Les formes absolues/`../` sont autorisées uniquement si elles se résolvent toujours à l’intérieur de cette limite. +- Erreurs : messages clairs pour les fichiers manquants, les erreurs d’analyse et les inclusions circulaires. --- diff --git a/docs/fr/gateway/local-models.md b/docs/fr/gateway/local-models.md index 819678d28..bc2c504ce 100644 --- a/docs/fr/gateway/local-models.md +++ b/docs/fr/gateway/local-models.md @@ -1,28 +1,28 @@ --- read_when: - - Vous voulez servir des modèles depuis votre propre machine GPU + - Vous souhaitez servir des modèles depuis votre propre machine GPU - Vous configurez LM Studio ou un proxy compatible OpenAI - - Vous avez besoin des conseils les plus sûrs pour les modèles locaux -summary: Exécuter OpenClaw sur des LLM locaux (LM Studio, vLLM, LiteLLM, points de terminaison OpenAI personnalisés) + - Vous avez besoin des recommandations les plus sûres pour les modèles locaux +summary: Exécutez OpenClaw sur des LLM locaux (LM Studio, vLLM, LiteLLM, points de terminaison OpenAI personnalisés) title: Modèles locaux x-i18n: - generated_at: "2026-04-15T06:56:33Z" + generated_at: "2026-04-15T14:40:31Z" model: gpt-5.4 provider: openai - source_hash: 8778cc1c623a356ff3cf306c494c046887f9417a70ec71e659e4a8aae912a780 + source_hash: 7a506ff83e4c2870d3878339f646c906584454a156ecd618c360f592cf3b0011 source_path: gateway/local-models.md workflow: 15 --- # Modèles locaux -Le local est possible, mais OpenClaw attend une grande fenêtre de contexte ainsi que de solides défenses contre l’injection de prompt. Les petites cartes tronquent le contexte et affaiblissent la sécurité. Visez haut : **≥2 Mac Studio au maximum ou une machine GPU équivalente (~30 k$+)**. Un seul GPU de **24 Go** ne fonctionne que pour des prompts plus légers, avec une latence plus élevée. Utilisez la **variante de modèle la plus grande / pleine taille que vous puissiez exécuter** ; les checkpoints fortement quantifiés ou « petits » augmentent le risque d’injection de prompt (voir [Sécurité](/fr/gateway/security)). +Le local est possible, mais OpenClaw attend un grand contexte ainsi que de solides défenses contre l’injection de prompt. Les petites cartes tronquent le contexte et dégradent la sécurité. Visez haut : **≥2 Mac Studio au maximum de leur configuration ou un rig GPU équivalent (~30 k$+)**. Un seul GPU de **24 Go** ne fonctionne que pour des prompts plus légers, avec une latence plus élevée. Utilisez la **variante de modèle la plus grande / en taille complète que vous pouvez exécuter** ; les checkpoints fortement quantifiés ou « small » augmentent le risque d’injection de prompt (voir [Security](/fr/gateway/security)). -Si vous voulez la configuration locale la plus simple, commencez par [LM Studio](/fr/providers/lmstudio) ou [Ollama](/fr/providers/ollama) et `openclaw onboard`. Cette page est le guide prescriptif pour les piles locales plus haut de gamme et les serveurs locaux personnalisés compatibles OpenAI. +Si vous voulez la configuration locale avec le moins de friction, commencez par [LM Studio](/fr/providers/lmstudio) ou [Ollama](/fr/providers/ollama) puis lancez `openclaw onboard`. Cette page est le guide prescriptif pour des piles locales haut de gamme et des serveurs locaux personnalisés compatibles OpenAI. ## Recommandé : LM Studio + grand modèle local (API Responses) -La meilleure pile locale actuelle. Chargez un grand modèle dans LM Studio (par exemple, une version pleine taille de Qwen, DeepSeek ou Llama), activez le serveur local (par défaut `http://127.0.0.1:1234`), et utilisez l’API Responses pour séparer le raisonnement du texte final. +La meilleure pile locale actuelle. Chargez un grand modèle dans LM Studio (par exemple, une version complète de Qwen, DeepSeek ou Llama), activez le serveur local (par défaut `http://127.0.0.1:1234`), et utilisez l’API Responses pour séparer le raisonnement du texte final. ```json5 { @@ -45,7 +45,7 @@ La meilleure pile locale actuelle. Chargez un grand modèle dans LM Studio (par models: [ { id: “my-local-model”, - name: “Local Model”, + name: “Modèle local”, reasoning: false, input: [“text”], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, @@ -59,16 +59,16 @@ La meilleure pile locale actuelle. Chargez un grand modèle dans LM Studio (par } ``` -**Liste de vérification de configuration** +**Checklist de configuration** - Installez LM Studio : [https://lmstudio.ai](https://lmstudio.ai) -- Dans LM Studio, téléchargez la **plus grande version de modèle disponible** (évitez les variantes « small » / fortement quantifiées), démarrez le serveur et confirmez que `http://127.0.0.1:1234/v1/models` le liste. +- Dans LM Studio, téléchargez la **plus grande version de modèle disponible** (évitez les variantes « small » / fortement quantifiées), démarrez le serveur, puis vérifiez que `http://127.0.0.1:1234/v1/models` l’affiche. - Remplacez `my-local-model` par l’ID réel du modèle affiché dans LM Studio. -- Gardez le modèle chargé ; le chargement à froid ajoute de la latence au démarrage. +- Gardez le modèle chargé ; un chargement à froid ajoute de la latence au démarrage. - Ajustez `contextWindow` / `maxTokens` si votre version de LM Studio diffère. - Pour WhatsApp, restez sur l’API Responses afin que seul le texte final soit envoyé. -Conservez aussi des modèles hébergés configurés même lorsque vous exécutez en local ; utilisez `models.mode: "merge"` pour garder des solutions de repli disponibles. +Gardez aussi les modèles hébergés configurés même quand vous exécutez du local ; utilisez `models.mode: "merge"` afin que les solutions de repli restent disponibles. ### Configuration hybride : primaire hébergé, repli local @@ -97,7 +97,7 @@ Conservez aussi des modèles hébergés configurés même lorsque vous exécutez models: [ { id: "my-local-model", - name: "Local Model", + name: "Modèle local", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, @@ -113,16 +113,16 @@ Conservez aussi des modèles hébergés configurés même lorsque vous exécutez ### Priorité au local avec filet de sécurité hébergé -Inversez l’ordre du primaire et des fallbacks ; conservez le même bloc `providers` et `models.mode: "merge"` afin de pouvoir revenir sur Sonnet ou Opus lorsque la machine locale est indisponible. +Inversez l’ordre entre primaire et fallback ; conservez le même bloc providers et `models.mode: "merge"` afin de pouvoir basculer vers Sonnet ou Opus quand la machine locale est indisponible. ### Hébergement régional / routage des données - Des variantes MiniMax/Kimi/GLM hébergées existent aussi sur OpenRouter avec des points de terminaison épinglés par région (par exemple, hébergés aux États-Unis). Choisissez-y la variante régionale pour conserver le trafic dans la juridiction de votre choix tout en utilisant `models.mode: "merge"` pour les fallbacks Anthropic/OpenAI. -- Le tout-local reste la meilleure option pour la confidentialité ; le routage régional hébergé est l’entre-deux lorsque vous avez besoin de fonctionnalités fournisseur tout en gardant le contrôle du flux de données. +- Le local uniquement reste la voie la plus protectrice pour la confidentialité ; le routage régional hébergé est l’option intermédiaire lorsque vous avez besoin de fonctionnalités du fournisseur tout en gardant le contrôle du flux de données. ## Autres proxys locaux compatibles OpenAI -vLLM, LiteLLM, OAI-proxy ou des Gateway personnalisés fonctionnent s’ils exposent un point de terminaison `/v1` de style OpenAI. Remplacez le bloc fournisseur ci-dessus par votre point de terminaison et l’ID de modèle : +vLLM, LiteLLM, OAI-proxy ou des passerelles personnalisées fonctionnent s’ils exposent un point de terminaison `/v1` de style OpenAI. Remplacez le bloc provider ci-dessus par votre point de terminaison et votre ID de modèle : ```json5 { @@ -136,7 +136,7 @@ vLLM, LiteLLM, OAI-proxy ou des Gateway personnalisés fonctionnent s’ils expo models: [ { id: "my-local-model", - name: "Local Model", + name: "Modèle local", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, @@ -150,30 +150,30 @@ vLLM, LiteLLM, OAI-proxy ou des Gateway personnalisés fonctionnent s’ils expo } ``` -Conservez `models.mode: "merge"` afin que les modèles hébergés restent disponibles comme solutions de repli. +Conservez `models.mode: "merge"` pour que les modèles hébergés restent disponibles en fallback. -Remarque de comportement pour les backends `/v1` locaux/proxifiés : +Remarque de comportement pour les backends locaux / proxifiés `/v1` : - OpenClaw les traite comme des routes compatibles OpenAI de type proxy, et non comme des points de terminaison OpenAI natifs -- la mise en forme des requêtes propre à OpenAI natif ne s’applique pas ici : pas de `service_tier`, pas de `store` Responses, pas de mise en forme de payload de compatibilité de raisonnement OpenAI, et pas d’indices de cache de prompt -- les en-têtes d’attribution OpenClaw cachés (`originator`, `version`, `User-Agent`) ne sont pas injectés sur ces URL de proxy personnalisées +- le façonnage de requête réservé à OpenAI natif ne s’applique pas ici : pas de `service_tier`, pas de `store` Responses, pas de façonnage de payload de compatibilité de raisonnement OpenAI, et pas d’indices de cache de prompt +- les en-têtes d’attribution OpenClaw masqués (`originator`, `version`, `User-Agent`) ne sont pas injectés sur ces URL de proxy personnalisées Notes de compatibilité pour les backends compatibles OpenAI plus stricts : - Certains serveurs n’acceptent que `messages[].content` sous forme de chaîne sur Chat Completions, et non des tableaux structurés de parties de contenu. Définissez `models.providers..models[].compat.requiresStringContent: true` pour ces points de terminaison. -- Certains backends locaux plus petits ou plus stricts sont instables avec la forme complète du prompt de l’environnement d’exécution agent d’OpenClaw, en particulier lorsque des schémas d’outils sont inclus. Si le backend fonctionne pour de petits appels directs `/v1/chat/completions` mais échoue sur des tours agent OpenClaw normaux, essayez d’abord `agents.defaults.localModelMode: "lean"` pour supprimer les outils par défaut lourds comme `browser`, `cron` et `message` ; si cela échoue encore, essayez `models.providers..models[].compat.supportsTools: false`. -- Si le backend échoue encore uniquement sur des exécutions OpenClaw plus importantes, le problème restant est généralement lié à la capacité du modèle/serveur en amont ou à un bug du backend, pas à la couche de transport d’OpenClaw. +- Certains backends locaux plus petits ou plus stricts sont instables avec la forme complète des prompts du runtime d’agent d’OpenClaw, en particulier lorsque des schémas d’outils sont inclus. Si le backend fonctionne pour de petits appels directs à `/v1/chat/completions` mais échoue sur des tours d’agent OpenClaw normaux, essayez d’abord `agents.defaults.experimental.localModelLean: true` pour retirer les outils par défaut les plus lourds comme `browser`, `cron` et `message` ; il s’agit d’un indicateur expérimental, pas d’un réglage stable du mode par défaut. Voir [Experimental Features](/fr/concepts/experimental-features). Si cela échoue encore, essayez `models.providers..models[].compat.supportsTools: false`. +- Si le backend échoue encore uniquement sur des exécutions OpenClaw plus importantes, le problème restant est généralement une limite de capacité du modèle/serveur en amont ou un bug du backend, et non la couche de transport d’OpenClaw. ## Dépannage -- Le Gateway peut-il atteindre le proxy ? `curl http://127.0.0.1:1234/v1/models`. -- Modèle LM Studio déchargé ? Rechargez-le ; un démarrage à froid est une cause fréquente de « blocage ». -- OpenClaw avertit lorsque la fenêtre de contexte détectée est inférieure à **32k** et bloque en dessous de **16k**. Si vous atteignez ce précontrôle, augmentez la limite de contexte du serveur/modèle ou choisissez un modèle plus grand. +- Le Gateway peut atteindre le proxy ? `curl http://127.0.0.1:1234/v1/models`. +- Le modèle LM Studio est déchargé ? Rechargez-le ; le démarrage à froid est une cause fréquente de « blocage ». +- OpenClaw avertit lorsque la fenêtre de contexte détectée est inférieure à **32k** et bloque en dessous de **16k**. Si vous atteignez cette vérification préalable, augmentez la limite de contexte du serveur/modèle ou choisissez un modèle plus grand. - Erreurs de contexte ? Réduisez `contextWindow` ou augmentez la limite de votre serveur. - Le serveur compatible OpenAI renvoie `messages[].content ... expected a string` ? Ajoutez `compat.requiresStringContent: true` sur cette entrée de modèle. -- Les petits appels directs `/v1/chat/completions` fonctionnent, mais `openclaw infer model run` +- Les petits appels directs à `/v1/chat/completions` fonctionnent, mais `openclaw infer model run` échoue sur Gemma ou un autre modèle local ? Désactivez d’abord les schémas d’outils avec - `compat.supportsTools: false`, puis testez à nouveau. Si le serveur plante encore uniquement - sur des prompts OpenClaw plus volumineux, considérez cela comme une limitation du serveur/modèle en amont. -- Sécurité : les modèles locaux contournent les filtres côté fournisseur ; gardez des agents limités et laissez Compaction activé pour limiter le rayon d’impact de l’injection de prompt. + `compat.supportsTools: false`, puis retestez. Si le serveur plante encore uniquement + sur de plus gros prompts OpenClaw, considérez cela comme une limite du serveur/modèle en amont. +- Sécurité : les modèles locaux contournent les filtres côté fournisseur ; gardez les agents limités et Compaction activé pour limiter le rayon d’impact d’une injection de prompt. diff --git a/docs/fr/help/testing.md b/docs/fr/help/testing.md index 833a22fde..a95a5dced 100644 --- a/docs/fr/help/testing.md +++ b/docs/fr/help/testing.md @@ -1,103 +1,104 @@ --- read_when: - - Exécuter les tests en local ou dans CI - - Ajouter des tests de régression pour les bogues de modèle/fournisseur + - Exécuter les tests en local ou dans la CI + - Ajouter des tests de régression pour les bugs de modèle/fournisseur - Déboguer le comportement de Gateway + agent summary: 'Kit de test : suites unitaires/e2e/live, exécuteurs Docker, et ce que couvre chaque test' title: Test en cours x-i18n: - generated_at: "2026-04-15T06:56:35Z" + generated_at: "2026-04-15T14:40:36Z" model: gpt-5.4 provider: openai - source_hash: fbf647a5cf13b5861a3ba0cb367dc816c57f0e9c60d3cd6320da193bfadf5609 + source_hash: ec3632cafa1f38b27510372391b84af744266df96c58f7fac98aa03763465db8 source_path: help/testing.md workflow: 15 --- # Tests -OpenClaw propose trois suites Vitest (unitaires/intégration, e2e, live) ainsi qu’un petit ensemble d’exécuteurs Docker. +OpenClaw dispose de trois suites Vitest (unit/integration, e2e, live) et d’un petit ensemble d’exécuteurs Docker. -Ce document est un guide « comment nous testons » : +Cette documentation 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, avant push, débogage) -- Comment les tests live découvrent les identifiants et sélectionnent les modèles/fournisseurs +- Comment les tests live détectent les identifiants et sélectionnent les modèles/fournisseurs - Comment ajouter des tests de régression pour des problèmes réels de modèle/fournisseur ## Démarrage rapide La plupart du temps : -- Barrière complète (attendue avant un push) : `pnpm build && pnpm check && pnpm test` -- Exécution plus rapide de la suite complète en local sur une machine bien dimensionnée : `pnpm test:max` +- Porte complète (attendue avant un push) : `pnpm build && pnpm check && pnpm test` +- Exécution locale plus rapide de la suite complète sur une machine bien dimensionnée : `pnpm test:max` - Boucle de surveillance Vitest directe : `pnpm test:watch` -- Le ciblage direct d’un fichier route désormais aussi les chemins d’extension/canal : `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` -- Préférez d’abord les exécutions ciblées lorsque vous itérez sur un seul échec. +- Le ciblage direct de fichiers prend désormais aussi en charge les chemins d’extension/canal : `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` +- Préférez d’abord les exécutions ciblées quand vous itérez sur un seul échec. - Site QA adossé à Docker : `pnpm qa:lab:up` - Voie QA adossée à une VM Linux : `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline` -Quand vous modifiez des tests ou voulez davantage de confiance : +Quand vous modifiez des tests ou souhaitez plus de confiance : -- Barrière de couverture : `pnpm test:coverage` +- Porte de couverture : `pnpm test:coverage` - Suite E2E : `pnpm test:e2e` -Lors du débogage de vrais fournisseurs/modèles (nécessite de vrais identifiants) : +Quand vous déboguez de vrais fournisseurs/modèles (nécessite de vrais identifiants) : -- Suite live (modèles + sondes Gateway outil/image) : `pnpm test:live` +- Suite live (modèles + sondes d’outil/image Gateway) : `pnpm test:live` - Cibler silencieusement un seul fichier live : `pnpm test:live -- src/agents/models.profiles.live.test.ts` -Astuce : lorsque vous n’avez besoin que d’un seul cas en échec, préférez restreindre les tests live via les variables d’environnement de liste d’autorisation décrites ci-dessous. +Astuce : quand vous n’avez besoin que d’un seul cas en échec, préférez restreindre les tests live via les variables d’environnement de liste d’autorisation décrites ci-dessous. ## Exécuteurs spécifiques à la QA -Ces commandes viennent compléter les suites de test principales lorsque vous avez besoin du réalisme de qa-lab : +Ces commandes se trouvent à côté des suites de test principales quand vous avez besoin du réalisme de qa-lab : - `pnpm openclaw qa suite` - Exécute directement sur l’hôte des scénarios QA adossés au dépôt. - - Exécute par défaut plusieurs scénarios sélectionnés en parallèle avec des workers Gateway isolés, jusqu’à 64 workers ou au nombre de scénarios sélectionnés. Utilisez `--concurrency ` pour ajuster le nombre de workers, ou `--concurrency 1` pour l’ancienne voie sérielle. + - Exécute par défaut plusieurs scénarios sélectionnés en parallèle avec des workers Gateway isolés, jusqu’à 64 workers ou au nombre de scénarios sélectionnés. Utilisez `--concurrency ` pour ajuster le nombre de workers, ou `--concurrency 1` pour retrouver l’ancienne voie sérielle. - `pnpm openclaw qa suite --runner multipass` - Exécute la même suite QA dans une VM Linux Multipass jetable. - Conserve le même comportement de sélection de scénarios que `qa suite` sur l’hôte. - - Réutilise les mêmes drapeaux de sélection de fournisseur/modèle que `qa suite`. - - Les exécutions live transfèrent les entrées d’authentification QA prises en charge qui sont pratiques pour l’invité : - clés de fournisseur basées sur l’environnement, chemin de configuration du fournisseur live QA, et `CODEX_HOME` lorsqu’il est présent. + - Réutilise les mêmes indicateurs de sélection fournisseur/modèle que `qa suite`. + - Les exécutions live transmettent les entrées d’authentification QA prises en charge qui sont pratiques pour l’invité : + les clés de fournisseur basées sur l’environnement, le chemin de configuration du fournisseur live QA, et `CODEX_HOME` lorsqu’il est présent. - Les répertoires de sortie doivent rester sous la racine du dépôt afin que l’invité puisse écrire en retour via l’espace de travail monté. - - Écrit le rapport QA et le résumé habituels, plus les journaux Multipass, sous `.artifacts/qa-e2e/...`. + - Écrit le rapport QA normal + le résumé ainsi que les journaux Multipass sous + `.artifacts/qa-e2e/...`. - `pnpm qa:lab:up` - - Démarre le site QA adossé à Docker pour le travail QA de type opérateur. + - Démarre le site QA adossé à Docker pour un travail QA de type opérateur. - `pnpm openclaw qa matrix` - - Exécute la voie QA live Matrix sur un homeserver Tuwunel jetable adossé à Docker. - - Cet hôte QA est aujourd’hui réservé au dépôt/au développement. Les installations OpenClaw packagées n’embarquent pas `qa-lab`, elles n’exposent donc pas `openclaw qa`. - - Les checkouts du dépôt chargent directement l’exécuteur intégré ; aucune étape d’installation de Plugin séparée n’est nécessaire. - - Approvisionne trois utilisateurs Matrix temporaires (`driver`, `sut`, `observer`) ainsi qu’un salon privé, puis démarre un enfant de passerelle QA avec le vrai Plugin Matrix comme transport SUT. - - Utilise par défaut l’image Tuwunel stable épinglée `ghcr.io/matrix-construct/tuwunel:v1.5.1`. Remplacez-la avec `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` lorsque vous devez tester une autre image. - - Matrix n’expose pas de drapeaux partagés de source d’identifiants, car la voie approvisionne localement des utilisateurs jetables. - - Écrit un rapport QA Matrix, un résumé et un artefact d’événements observés sous `.artifacts/qa-e2e/...`. + - Exécute la voie QA live Matrix contre un homeserver Tuwunel jetable adossé à Docker. + - Cet hôte QA est aujourd’hui réservé au dépôt/dev. Les installations OpenClaw packagées ne livrent pas `qa-lab`, elles n’exposent donc pas `openclaw qa`. + - Les checkouts du dépôt chargent directement l’exécuteur embarqué ; aucune étape séparée d’installation de Plugin n’est nécessaire. + - Provisionne trois utilisateurs Matrix temporaires (`driver`, `sut`, `observer`) plus un salon privé, puis démarre un processus enfant de Gateway QA avec le vrai Plugin Matrix comme transport du SUT. + - Utilise par défaut l’image Tuwunel stable épinglée `ghcr.io/matrix-construct/tuwunel:v1.5.1`. Remplacez-la avec `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` quand vous devez tester une autre image. + - Matrix n’expose pas d’indicateurs partagés de source d’identifiants, car la voie provisionne localement des utilisateurs jetables. + - Écrit un rapport QA Matrix, un résumé et un artefact des événements observés sous `.artifacts/qa-e2e/...`. - `pnpm openclaw qa telegram` - - Exécute la voie QA live Telegram sur un vrai groupe privé à l’aide des jetons de bot driver et SUT fournis par l’environnement. + - Exécute la voie QA live Telegram contre un vrai groupe privé en utilisant les jetons de bot du driver et du SUT depuis l’environnement. - Nécessite `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` et `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. L’identifiant du groupe doit être l’identifiant numérique du chat Telegram. - - Prend en charge `--credential-source convex` pour des identifiants mutualisés en pool. Utilisez le mode environnement par défaut, ou définissez `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` pour activer les baux mutualisés. + - Prend en charge `--credential-source convex` pour des identifiants mutualisés en pool. Utilisez le mode env par défaut, ou définissez `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` pour utiliser des baux mutualisés. - Nécessite deux bots distincts dans le même groupe privé, le bot SUT devant exposer un nom d’utilisateur Telegram. - - Pour une observation stable entre bots, activez le mode de communication bot-à-bot dans `@BotFather` pour les deux bots et assurez-vous que le bot driver peut observer le trafic des bots du groupe. + - Pour une observation stable entre bots, activez le mode de communication bot à bot dans `@BotFather` pour les deux bots et assurez-vous que le bot driver peut observer le trafic des bots du groupe. - Écrit un rapport QA Telegram, un résumé et un artefact des messages observés sous `.artifacts/qa-e2e/...`. -Les voies de transport live partagent un contrat standard afin d’éviter toute dérive lors de l’ajout de nouveaux transports : +Les voies de transport live partagent un contrat standard afin que les nouveaux transports ne divergent pas : `qa-channel` reste la suite QA synthétique large et ne fait pas partie de la matrice de couverture des transports live. -| Voie | Canary | Filtrage des mentions | Blocage par liste d’autorisation | Réponse de niveau supérieur | Reprise après redémarrage | Suivi de fil | Isolation de fil | Observation des réactions | Commande d’aide | -| -------- | ------ | --------------------- | -------------------------------- | --------------------------- | ------------------------- | ------------ | ---------------- | ------------------------- | --------------- | -| Matrix | x | x | x | x | x | x | x | x | | -| Telegram | x | | | | | | | | x | +| Voie | Canary | Filtrage des mentions | Blocage par liste d’autorisation | Réponse de premier niveau | Reprise après redémarrage | Suivi de fil | Isolation des fils | Observation des réactions | Commande d’aide | +| -------- | ------ | --------------------- | -------------------------------- | ------------------------- | ------------------------- | ------------ | ------------------ | ------------------------- | --------------- | +| Matrix | x | x | x | x | x | x | x | x | | +| Telegram | x | | | | | | | | x | ### Identifiants Telegram partagés via Convex (v1) -Lorsque `--credential-source convex` (ou `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) est activé pour +Quand `--credential-source convex` (ou `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) est activé pour `openclaw qa telegram`, QA lab acquiert un bail exclusif depuis un pool adossé à Convex, envoie des Heartbeat -pour ce bail tant que la voie est en cours d’exécution, puis libère le bail à l’arrêt. +pour ce bail pendant l’exécution de la voie, puis libère le bail à l’arrêt. -Structure de référence du projet Convex : +Squelette de projet Convex de référence : - `qa/convex-credential-broker/` @@ -109,7 +110,7 @@ Variables d’environnement requises : - `OPENCLAW_QA_CONVEX_SECRET_CI` pour `ci` - Sélection du rôle d’identifiant : - CLI : `--credential-role maintainer|ci` - - Valeur par défaut dans l’environnement : `OPENCLAW_QA_CREDENTIAL_ROLE` (par défaut `maintainer`) + - Valeur par défaut via l’environnement : `OPENCLAW_QA_CREDENTIAL_ROLE` (par défaut : `maintainer`) Variables d’environnement facultatives : @@ -118,12 +119,12 @@ Variables d’environnement facultatives : - `OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS` (par défaut `90000`) - `OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS` (par défaut `15000`) - `OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX` (par défaut `/qa-credentials/v1`) -- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (identifiant de trace facultatif) -- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` autorise les URL Convex `http://` en loopback pour le développement strictement local. +- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (identifiant de traçabilité facultatif) +- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` autorise les URL Convex `http://` en loopback uniquement pour le développement local. `OPENCLAW_QA_CONVEX_SITE_URL` doit utiliser `https://` en fonctionnement normal. -Les commandes d’administration pour mainteneurs (ajout/suppression/liste du pool) exigent +Les commandes d’administration pour mainteneurs (ajout/suppression/liste du pool) nécessitent spécifiquement `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER`. Assistants CLI pour les mainteneurs : @@ -134,86 +135,86 @@ pnpm openclaw qa credentials list --kind telegram pnpm openclaw qa credentials remove --credential-id ``` -Utilisez `--json` pour une sortie exploitable par machine dans les scripts et les utilitaires CI. +Utilisez `--json` pour une sortie lisible par machine dans les scripts et utilitaires CI. Contrat de point de terminaison par défaut (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`) : - `POST /acquire` - Requête : `{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs }` - Succès : `{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? }` - - Pool épuisé / cas réessayable : `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` + - Épuisé/réessayable : `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` - `POST /heartbeat` - Requête : `{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs }` - Succès : `{ status: "ok" }` (ou `2xx` vide) - `POST /release` - Requête : `{ kind, ownerId, actorRole, credentialId, leaseToken }` - Succès : `{ status: "ok" }` (ou `2xx` vide) -- `POST /admin/add` (secret maintainer uniquement) +- `POST /admin/add` (secret mainteneur uniquement) - Requête : `{ kind, actorId, payload, note?, status? }` - Succès : `{ status: "ok", credential }` -- `POST /admin/remove` (secret maintainer uniquement) +- `POST /admin/remove` (secret mainteneur uniquement) - Requête : `{ credentialId, actorId }` - Succès : `{ status: "ok", changed, credential }` - Garde de bail actif : `{ status: "error", code: "LEASE_ACTIVE", ... }` -- `POST /admin/list` (secret maintainer uniquement) +- `POST /admin/list` (secret mainteneur uniquement) - Requête : `{ kind?, status?, includePayload?, limit? }` - Succès : `{ status: "ok", credentials, count }` -Forme du payload pour le type Telegram : +Forme de payload pour le type Telegram : - `{ groupId: string, driverToken: string, sutToken: string }` -- `groupId` doit être une chaîne représentant un identifiant numérique de chat Telegram. -- `admin/add` valide cette forme pour `kind: "telegram"` et rejette les payloads mal formés. +- `groupId` doit être une chaîne correspondant à un identifiant numérique de chat Telegram. +- `admin/add` valide cette forme pour `kind: "telegram"` et rejette les payloads malformés. ### Ajouter un canal à la QA -Ajouter un canal au système QA Markdown nécessite exactement deux éléments : +Ajouter un canal au système QA markdown nécessite exactement deux choses : -1. Un adaptateur de transport pour ce canal. +1. Un adaptateur de transport pour le canal. 2. Un pack de scénarios qui exerce le contrat du canal. -N’ajoutez pas une nouvelle racine de commande QA de niveau supérieur lorsque l’hôte partagé `qa-lab` peut +N’ajoutez pas une nouvelle racine de commande QA de premier niveau quand l’hôte partagé `qa-lab` peut prendre en charge le flux. -`qa-lab` possède les mécanismes d’hôte partagés : +`qa-lab` gère les mécaniques hôtes partagées : - la racine de commande `openclaw qa` - le démarrage et l’arrêt de la suite - la concurrence des workers - l’écriture des artefacts -- la génération des rapports +- la génération de rapports - l’exécution des scénarios - les alias de compatibilité pour les anciens scénarios `qa-channel` -Les plugins d’exécuteur possèdent le contrat de transport : +Les Plugins d’exécuteur gèrent le contrat de transport : -- la manière dont `openclaw qa ` est monté sous la racine partagée `qa` -- la manière dont la passerelle est configurée pour ce transport -- la manière dont l’état prêt est vérifié -- la manière dont les événements entrants sont injectés -- la manière dont les messages sortants sont observés -- la manière dont les transcriptions et l’état de transport normalisé sont exposés -- la manière dont les actions adossées au transport sont exécutées -- la manière dont la réinitialisation ou le nettoyage spécifiques au transport sont gérés +- comment `openclaw qa ` est monté sous la racine partagée `qa` +- comment Gateway est configuré pour ce transport +- comment l’état de préparation est vérifié +- comment les événements entrants sont injectés +- comment les messages sortants sont observés +- comment les transcriptions et l’état de transport normalisé sont exposés +- comment les actions adossées au transport sont exécutées +- comment la réinitialisation ou le nettoyage spécifique au transport est géré -Le niveau minimal d’adoption pour un nouveau canal est le suivant : +Le seuil d’adoption minimal pour un nouveau canal est le suivant : -1. Conserver `qa-lab` comme propriétaire de la racine partagée `qa`. -2. Implémenter l’exécuteur de transport sur le point d’extension de l’hôte partagé `qa-lab`. -3. Conserver les mécanismes spécifiques au transport à l’intérieur du plugin d’exécuteur ou du harnais de Plugin du canal. -4. Monter l’exécuteur sous la forme `openclaw qa ` au lieu d’enregistrer une racine de commande concurrente. - Les plugins d’exécuteur doivent déclarer `qaRunners` dans `openclaw.plugin.json` et exporter un tableau `qaRunnerCliRegistrations` correspondant depuis `runtime-api.ts`. - Gardez `runtime-api.ts` léger ; l’exécution lazy du CLI et de l’exécuteur doit rester derrière des points d’entrée séparés. -5. Rédiger ou adapter des scénarios Markdown sous `qa/scenarios/`. -6. Utiliser les assistants de scénario génériques pour les nouveaux scénarios. -7. Conserver les alias de compatibilité existants, sauf si le dépôt effectue une migration intentionnelle. +1. Garder `qa-lab` comme propriétaire de la racine partagée `qa`. +2. Implémenter l’exécuteur de transport sur la jonction hôte partagée `qa-lab`. +3. Garder les mécaniques spécifiques au transport dans le Plugin d’exécuteur ou le harnais du canal. +4. Monter l’exécuteur en tant que `openclaw qa ` au lieu d’enregistrer une racine de commande concurrente. + Les Plugins d’exécuteur doivent déclarer `qaRunners` dans `openclaw.plugin.json` et exporter un tableau `qaRunnerCliRegistrations` correspondant depuis `runtime-api.ts`. + Gardez `runtime-api.ts` léger ; le CLI paresseux et l’exécution de l’exécuteur doivent rester derrière des points d’entrée séparés. +5. Rédiger ou adapter les scénarios markdown sous `qa/scenarios/`. +6. Utiliser les assistants de scénarios génériques pour les nouveaux scénarios. +7. Garder les alias de compatibilité existants opérationnels sauf si le dépôt effectue une migration intentionnelle. La règle de décision est stricte : -- Si un comportement peut être exprimé une seule fois dans `qa-lab`, placez-le dans `qa-lab`. -- Si un comportement dépend d’un seul transport de canal, conservez-le dans ce plugin d’exécuteur ou ce harnais de Plugin. -- Si un scénario nécessite une nouvelle capacité que plus d’un canal peut utiliser, ajoutez un assistant générique plutôt qu’une branche spécifique à un canal dans `suite.ts`. -- Si un comportement n’a de sens que pour un seul transport, gardez le scénario spécifique à ce transport et rendez cela explicite dans le contrat du scénario. +- Si un comportement peut être exprimé une seule fois dans `qa-lab`, mettez-le dans `qa-lab`. +- Si un comportement dépend d’un transport de canal, gardez-le dans ce Plugin d’exécuteur ou dans le harnais du Plugin. +- Si un scénario nécessite une nouvelle capacité que plus d’un canal peut utiliser, ajoutez un assistant générique au lieu d’une branche spécifique à un canal dans `suite.ts`. +- Si un comportement n’a de sens que pour un seul transport, gardez le scénario spécifique à ce transport et rendez cela explicite dans le contrat de scénario. Les noms d’assistants génériques préférés pour les nouveaux scénarios sont : @@ -238,64 +239,64 @@ Les alias de compatibilité restent disponibles pour les scénarios existants, n - `formatConversationTranscript` - `resetBus` -Les nouveaux travaux sur les canaux doivent utiliser les noms d’assistants génériques. -Les alias de compatibilité existent pour éviter une migration brutale, pas comme modèle -pour rédiger de nouveaux scénarios. +Les nouveaux travaux de canal doivent utiliser les noms d’assistants génériques. +Les alias de compatibilité existent pour éviter une migration « big bang », pas comme modèle pour +la rédaction de nouveaux scénarios. ## Suites de test (ce qui s’exécute où) -Considérez les suites comme des niveaux de « réalisme croissant » (et de fragilité/coût croissants) : +Considérez les suites comme un « réalisme croissant » (et une instabilité/un coût croissants) : -### Unitaires / intégration (par défaut) +### Unitaire / intégration (par défaut) - Commande : `pnpm test` -- Configuration : dix exécutions séquentielles de shards (`vitest.full-*.config.ts`) sur les projets Vitest ciblés existants -- Fichiers : inventaires core/unit sous `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts`, ainsi que les tests node `ui` autorisés couverts par `vitest.unit.config.ts` -- Portée : +- Configuration : dix exécutions séquentielles de fragments (`vitest.full-*.config.ts`) sur les projets Vitest ciblés existants +- Fichiers : inventaires core/unit sous `src/**/*.test.ts`, `packages/**/*.test.ts`, `test/**/*.test.ts`, ainsi que les tests Node `ui` sur liste blanche couverts par `vitest.unit.config.ts` +- Périmètre : - Tests unitaires purs - - Tests d’intégration en processus (authentification Gateway, routage, outils, analyse, configuration) - - Régressions déterministes pour des bogues connus + - Tests d’intégration en processus (auth Gateway, routage, outillage, parsing, configuration) + - Régressions déterministes pour des bugs connus - Attentes : - - S’exécute dans CI - - Aucune clé réelle requise + - S’exécute en CI + - Aucune vraie clé requise - Doit être rapide et stable -- Remarque sur les projets : - - `pnpm test` sans ciblage exécute désormais onze configurations de shards plus petites (`core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) au lieu d’un seul énorme processus natif de projet racine. Cela réduit le RSS maximal sur les machines chargées et évite que le travail auto-reply/extension n’affame des suites non liées. - - `pnpm test --watch` utilise toujours le graphe de projets racine natif `vitest.config.ts`, car une boucle de watch multi-shards n’est pas pratique. - - `pnpm test`, `pnpm test:watch` et `pnpm test:perf:imports` routent d’abord les cibles explicites de fichier/répertoire vers des voies ciblées ; ainsi, `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` évite le coût de démarrage complet du projet racine. - - `pnpm test:changed` développe les chemins git modifiés vers ces mêmes voies ciblées lorsque le diff ne touche que des fichiers source/test routables ; les modifications de configuration/setup reviennent toujours à une réexécution large du projet racine. - - Les tests unitaires légers à l’import issus des agents, des commandes, des plugins, des assistants auto-reply, de `plugin-sdk` et d’autres zones utilitaires pures sont routés via la voie `unit-fast`, qui ignore `test/setup-openclaw-runtime.ts` ; les fichiers à état/runtime lourd restent sur les voies existantes. - - Certains fichiers source d’assistants `plugin-sdk` et `commands` sélectionnés mappent aussi les exécutions en mode changed vers des tests voisins explicites dans ces voies légères, afin que les modifications d’assistants évitent de relancer toute la suite lourde pour ce répertoire. - - `auto-reply` dispose désormais de trois compartiments dédiés : assistants core de niveau supérieur, tests d’intégration `reply.*` de niveau supérieur, et sous-arborescence `src/auto-reply/reply/**`. Cela garde le travail de harnais de réponse le plus lourd hors des tests économiques de statut/fragment/token. -- Remarque sur l’exécuteur embarqué : - - Lorsque vous modifiez les entrées de découverte de message-tool ou le contexte runtime de Compaction, +- Note sur les projets : + - `pnpm test` sans ciblage exécute désormais onze configurations fragmentées plus petites (`core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) au lieu d’un seul énorme processus de projet racine natif. Cela réduit le pic de RSS sur les machines chargées et évite que le travail auto-reply/extension n’affame les suites sans rapport. + - `pnpm test --watch` utilise toujours le graphe de projets racine natif `vitest.config.ts`, car une boucle de surveillance multi-fragments n’est pas pratique. + - `pnpm test`, `pnpm test:watch` et `pnpm test:perf:imports` font passer en priorité les cibles de fichier/répertoire explicites par des voies ciblées, de sorte que `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` évite le coût de démarrage complet du projet racine. + - `pnpm test:changed` étend les chemins git modifiés vers ces mêmes voies ciblées lorsque le diff ne touche que des fichiers source/test routables ; les modifications de configuration/setup reviennent toujours à une relance large du projet racine. + - Les tests unitaires légers en importation provenant de agents, commands, plugins, des assistants auto-reply, de `plugin-sdk` et de zones utilitaires pures similaires passent par la voie `unit-fast`, qui ignore `test/setup-openclaw-runtime.ts` ; les fichiers riches en état ou lourds à l’exécution restent sur les voies existantes. + - Certains fichiers source assistants `plugin-sdk` et `commands` sélectionnés mappent aussi les exécutions en mode changed vers des tests voisins explicites dans ces voies légères, afin que les modifications d’assistants évitent de relancer toute la suite lourde pour ce répertoire. + - `auto-reply` dispose désormais de trois compartiments dédiés : les assistants core de premier niveau, les tests d’intégration `reply.*` de premier niveau, et le sous-arbre `src/auto-reply/reply/**`. Cela garde le travail le plus lourd du harnais reply hors des tests peu coûteux de statut/chunk/token. +- Note sur l’exécuteur embarqué : + - Lorsque vous modifiez les entrées de découverte des outils de message ou le contexte d’exécution de Compaction, conservez les deux niveaux de couverture. - - Ajoutez des régressions ciblées pour les assistants aux frontières pures de routage/normalisation. - - Gardez également saines les suites d’intégration de l’exécuteur embarqué : + - Ajoutez des régressions d’assistants ciblées pour les limites pures de routage/normalisation. + - Conservez aussi en bon état les suites d’intégration de l’exécuteur embarqué : `src/agents/pi-embedded-runner/compact.hooks.test.ts`, `src/agents/pi-embedded-runner/run.overflow-compaction.test.ts`, et `src/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts`. - - Ces suites vérifient que les identifiants ciblés et le comportement de Compaction continuent - de traverser les vrais chemins `run.ts` / `compact.ts` ; des tests limités aux assistants ne - suffisent pas à remplacer ces chemins d’intégration. -- Remarque sur le pool : - - La configuration Vitest de base utilise désormais `threads` par défaut. - - La configuration Vitest partagée fixe aussi `isolate: false` et utilise l’exécuteur non isolé dans les projets racine, les configurations e2e et live. - - La voie UI racine conserve sa configuration et son optimiseur `jsdom`, mais s’exécute désormais elle aussi sur l’exécuteur partagé non isolé. - - Chaque shard `pnpm test` hérite des mêmes valeurs par défaut `threads` + `isolate: false` depuis la configuration Vitest partagée. - - Le lanceur partagé `scripts/run-vitest.mjs` ajoute désormais aussi `--no-maglev` par défaut aux processus Node enfants de Vitest afin de réduire le churn de compilation V8 lors de grosses exécutions locales. Définissez `OPENCLAW_VITEST_ENABLE_MAGLEV=1` si vous devez comparer avec le comportement V8 standard. -- Remarque sur l’itération locale rapide : + - Ces suites vérifient que les ids ciblés et le comportement de Compaction continuent + de circuler à travers les vrais chemins `run.ts` / `compact.ts` ; des tests d’assistants seuls ne constituent pas + un substitut suffisant à ces chemins d’intégration. +- Note sur le pool : + - La configuration Vitest de base utilise maintenant `threads` par défaut. + - La configuration Vitest partagée fixe aussi `isolate: false` et utilise l’exécuteur non isolé à travers les projets racine, les configurations e2e et live. + - La voie UI racine conserve sa configuration `jsdom` et son optimiseur, mais s’exécute maintenant elle aussi sur l’exécuteur partagé non isolé. + - Chaque fragment `pnpm test` hérite des mêmes valeurs par défaut `threads` + `isolate: false` depuis la configuration Vitest partagée. + - Le lanceur partagé `scripts/run-vitest.mjs` ajoute désormais aussi `--no-maglev` par défaut aux processus Node enfants de Vitest afin de réduire le churn de compilation V8 pendant les grosses exécutions locales. Définissez `OPENCLAW_VITEST_ENABLE_MAGLEV=1` si vous devez comparer avec le comportement V8 standard. +- Note sur l’itération locale rapide : - `pnpm test:changed` passe par des voies ciblées lorsque les chemins modifiés se mappent proprement à une suite plus petite. - `pnpm test:max` et `pnpm test:changed:max` conservent le même comportement de routage, simplement avec une limite de workers plus élevée. - - L’auto-dimensionnement local des workers est désormais volontairement conservateur et ralentit aussi lorsque la charge moyenne de l’hôte est déjà élevée, afin que plusieurs exécutions Vitest concurrentes fassent moins de dégâts par défaut. - - La configuration Vitest de base marque les projets/fichiers de configuration comme `forceRerunTriggers` afin que les réexécutions en mode changed restent correctes lorsque le câblage des tests change. - - La configuration garde `OPENCLAW_VITEST_FS_MODULE_CACHE` activé sur les hôtes pris en charge ; définissez `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` si vous voulez un emplacement de cache explicite pour un profilage direct. -- Remarque sur le débogage des performances : - - `pnpm test:perf:imports` active le rapport de durée d’import Vitest ainsi que la sortie de ventilation des imports. + - L’auto-dimensionnement local des workers est désormais volontairement conservateur et réduit aussi la charge quand la moyenne de charge de l’hôte est déjà élevée, de sorte que plusieurs exécutions Vitest simultanées fassent moins de dégâts par défaut. + - La configuration Vitest de base marque les projets/fichiers de configuration comme `forceRerunTriggers` afin que les relances en mode changed restent correctes lorsque le câblage des tests change. + - La configuration garde `OPENCLAW_VITEST_FS_MODULE_CACHE` activé sur les hôtes pris en charge ; définissez `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` si vous souhaitez un emplacement de cache explicite pour le profilage direct. +- Note de débogage des performances : + - `pnpm test:perf:imports` active le rapport de durée d’importation Vitest ainsi qu’une sortie de détail des importations. - `pnpm test:perf:imports:changed` limite cette même vue de profilage aux fichiers modifiés depuis `origin/main`. -- `pnpm test:perf:changed:bench -- --ref ` compare `test:changed` routé au chemin natif du projet racine pour ce diff validé et affiche le temps réel ainsi que le RSS maximal macOS. -- `pnpm test:perf:changed:bench -- --worktree` mesure l’arbre de travail sale actuel en routant la liste des fichiers modifiés via `scripts/test-projects.mjs` et la configuration Vitest racine. - - `pnpm test:perf:profile:main` écrit un profil CPU du thread principal pour le démarrage de Vitest/Vite et le coût des transformations. +- `pnpm test:perf:changed:bench -- --ref ` compare `test:changed` routé au chemin natif du projet racine pour ce diff validé et affiche le temps mur ainsi que le RSS max macOS. +- `pnpm test:perf:changed:bench -- --worktree` mesure l’arbre de travail modifié actuel en faisant passer la liste des fichiers modifiés par `scripts/test-projects.mjs` et la configuration Vitest racine. + - `pnpm test:perf:profile:main` écrit un profil CPU du thread principal pour le démarrage de Vitest/Vite et la surcharge de transformation. - `pnpm test:perf:profile:runner` écrit des profils CPU+heap de l’exécuteur pour la suite unitaire avec le parallélisme de fichiers désactivé. ### E2E (smoke Gateway) @@ -303,36 +304,36 @@ Considérez les suites comme des niveaux de « réalisme croissant » (et de fra - Commande : `pnpm test:e2e` - Configuration : `vitest.e2e.config.ts` - Fichiers : `src/**/*.e2e.test.ts`, `test/**/*.e2e.test.ts` -- Valeurs d’exécution par défaut : - - Utilise `threads` de Vitest avec `isolate: false`, comme dans le reste du dépôt. +- Valeurs par défaut à l’exécution : + - Utilise les `threads` Vitest avec `isolate: false`, comme le reste du dépôt. - Utilise des workers adaptatifs (CI : jusqu’à 2, local : 1 par défaut). - - S’exécute en mode silencieux par défaut pour réduire le coût des E/S console. + - S’exécute en mode silencieux par défaut pour réduire la surcharge d’E/S console. - Remplacements utiles : - `OPENCLAW_E2E_WORKERS=` pour forcer le nombre de workers (plafonné à 16). - `OPENCLAW_E2E_VERBOSE=1` pour réactiver la sortie console détaillée. -- Portée : - - Comportement end-to-end Gateway multi-instance - - Surfaces WebSocket/HTTP, appairage des nœuds et réseau plus lourd +- Périmètre : + - Comportement end-to-end Gateway multi-instances + - Surfaces WebSocket/HTTP, appairage de nœuds et réseau plus lourd - Attentes : - - S’exécute dans CI (lorsqu’activé dans le pipeline) - - Aucune clé réelle requise - - Davantage de pièces en mouvement que les tests unitaires (peut être plus lent) + - S’exécute en CI (quand activé dans le pipeline) + - Aucune vraie clé requise + - Plus d’éléments mobiles que les tests unitaires (peut être plus lent) ### E2E : smoke du backend OpenShell - Commande : `pnpm test:e2e:openshell` - Fichier : `test/openshell-sandbox.e2e.test.ts` -- Portée : +- Périmètre : - Démarre sur l’hôte une Gateway OpenShell isolée via Docker - - Crée un bac à sable depuis un Dockerfile local temporaire + - Crée un bac à sable à partir d’un Dockerfile local temporaire - Exerce le backend OpenShell d’OpenClaw via un vrai `sandbox ssh-config` + exécution SSH - - Vérifie le comportement du système de fichiers canonique distant via le pont fs du bac à sable + - Vérifie le comportement canonique du système de fichiers distant via le pont fs du bac à sable - Attentes : - - Participation explicite uniquement ; ne fait pas partie de l’exécution par défaut de `pnpm test:e2e` - - Nécessite un CLI `openshell` local ainsi qu’un démon Docker fonctionnel - - Utilise un `HOME` / `XDG_CONFIG_HOME` isolé, puis détruit la Gateway et le bac à sable de test + - Sur activation explicite uniquement ; ne fait pas partie de l’exécution par défaut `pnpm test:e2e` + - Nécessite un CLI local `openshell` ainsi qu’un démon Docker fonctionnel + - Utilise un `HOME` / `XDG_CONFIG_HOME` isolé, puis détruit la Gateway de test et le bac à sable - Remplacements utiles : - - `OPENCLAW_E2E_OPENSHELL=1` pour activer le test lors d’une exécution manuelle de la suite e2e plus large + - `OPENCLAW_E2E_OPENSHELL=1` pour activer le test lors de l’exécution manuelle de la suite e2e plus large - `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell` pour pointer vers un binaire CLI non par défaut ou un script wrapper ### Live (vrais fournisseurs + vrais modèles) @@ -341,57 +342,57 @@ Considérez les suites comme des niveaux de « réalisme croissant » (et de fra - Configuration : `vitest.live.config.ts` - Fichiers : `src/**/*.live.test.ts` - Par défaut : **activé** par `pnpm test:live` (définit `OPENCLAW_LIVE_TEST=1`) -- Portée : - - « Ce fournisseur/modèle fonctionne-t-il vraiment _aujourd’hui_ avec de vrais identifiants ? » - - Détecter les changements de format des fournisseurs, les particularités d’appel d’outil, les problèmes d’authentification et le comportement de limitation de débit +- Périmètre : + - « Est-ce que ce fournisseur/modèle fonctionne réellement _aujourd’hui_ avec de vrais identifiants ? » + - Détecter les changements de format fournisseur, les particularités d’appel d’outil, les problèmes d’authentification et le comportement face aux limites de débit - Attentes : - - Pas stable en CI par conception (vrais réseaux, vraies politiques de fournisseur, quotas, pannes) - - Coûte de l’argent / consomme les limites de débit - - Préférez exécuter des sous-ensembles restreints plutôt que « tout » + - Pas stable en CI par conception (vrais réseaux, vraies politiques fournisseur, quotas, pannes) + - Coûte de l’argent / consomme des limites de débit + - Préférez exécuter des sous-ensembles restreints plutôt que « tout » - Les exécutions live chargent `~/.profile` pour récupérer les clés API manquantes. -- Par défaut, les exécutions live isolent toujours `HOME` et copient le matériel de configuration/authentification dans un répertoire temporaire de test afin que les fixtures unitaires ne puissent pas modifier votre vrai `~/.openclaw`. -- Définissez `OPENCLAW_LIVE_USE_REAL_HOME=1` seulement lorsque vous avez intentionnellement besoin que les tests live utilisent votre vrai répertoire personnel. -- `pnpm test:live` utilise désormais par défaut un mode plus silencieux : il conserve la sortie de progression `[live] ...`, mais masque l’avis supplémentaire sur `~/.profile` et coupe les journaux de bootstrap Gateway / le bruit Bonjour. Définissez `OPENCLAW_LIVE_TEST_QUIET=0` si vous voulez récupérer les journaux de démarrage complets. -- Rotation des clés API (spécifique au fournisseur) : définissez `*_API_KEYS` au format virgule/point-virgule ou `*_API_KEY_1`, `*_API_KEY_2` (par exemple `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) ou utilisez un remplacement par live via `OPENCLAW_LIVE_*_KEY` ; les tests réessaient en cas de réponses de limitation de débit. +- Par défaut, les exécutions live isolent toujours `HOME` et copient le matériel de configuration/auth dans un home de test temporaire afin que les fixtures unitaires ne puissent pas modifier votre vrai `~/.openclaw`. +- Définissez `OPENCLAW_LIVE_USE_REAL_HOME=1` uniquement si vous avez intentionnellement besoin que les tests live utilisent votre vrai répertoire home. +- `pnpm test:live` passe désormais par défaut dans un mode plus silencieux : il conserve la sortie de progression `[live] ...`, mais supprime la notification supplémentaire `~/.profile` et coupe les journaux de démarrage Gateway / le bruit Bonjour. Définissez `OPENCLAW_LIVE_TEST_QUIET=0` si vous souhaitez récupérer les journaux complets de démarrage. +- Rotation de clés API (spécifique au fournisseur) : définissez `*_API_KEYS` avec un format virgule/point-virgule ou `*_API_KEY_1`, `*_API_KEY_2` (par exemple `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) ou un remplacement par live via `OPENCLAW_LIVE_*_KEY` ; les tests réessaient sur les réponses de limitation de débit. - Sortie de progression/Heartbeat : - - Les suites live émettent désormais des lignes de progression vers stderr afin que les appels longs aux fournisseurs restent visiblement actifs même lorsque la capture de console Vitest est silencieuse. - - `vitest.live.config.ts` désactive l’interception de console de Vitest afin que les lignes de progression fournisseur/Gateway soient diffusées immédiatement pendant les exécutions live. - - Réglez les Heartbeat de modèle direct avec `OPENCLAW_LIVE_HEARTBEAT_MS`. - - Réglez les Heartbeat Gateway/sonde avec `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. + - Les suites live émettent désormais des lignes de progression vers stderr afin que les longs appels fournisseur restent visiblement actifs même lorsque la capture console de Vitest est silencieuse. + - `vitest.live.config.ts` désactive l’interception de console Vitest afin que les lignes de progression fournisseur/Gateway soient diffusées immédiatement pendant les exécutions live. + - Ajustez les Heartbeat de modèle direct avec `OPENCLAW_LIVE_HEARTBEAT_MS`. + - Ajustez les Heartbeat Gateway/sonde avec `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. ## Quelle suite dois-je exécuter ? Utilisez ce tableau de décision : - Modification de logique/tests : exécutez `pnpm test` (et `pnpm test:coverage` si vous avez beaucoup modifié) -- Modifications du réseau Gateway / protocole WS / appairage : ajoutez `pnpm test:e2e` -- Débogage de « mon bot est hors service » / échecs spécifiques au fournisseur / appel d’outil : exécutez un `pnpm test:live` restreint +- Modification du réseau Gateway / du protocole WS / de l’appairage : ajoutez `pnpm test:e2e` +- Débogage de « mon bot est hors service » / échecs spécifiques à un fournisseur / appel d’outil : exécutez un `pnpm test:live` restreint -## Live : balayage des capacités du nœud Android +## Live : balayage des capacités de 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éalable/manuelle (la suite n’installe pas, ne lance pas et n’apparie pas l’application). +- Périmètre : + - Configuration préalable/manuelle (la suite n’installe pas, n’exécute pas et n’appaire pas l’application). - Validation `node.invoke` Gateway commande par commande pour le nœud Android sélectionné. - Préconfiguration requise : - Application Android déjà connectée et appairée à la Gateway. - Application maintenue au premier plan. - - Permissions/consentement de capture accordés pour les capacités que vous vous attendez à voir réussir. + - Permissions/consentements de capture accordés pour les capacités que vous attendez de voir réussir. - Remplacements facultatifs de cible : - `OPENCLAW_ANDROID_NODE_ID` ou `OPENCLAW_ANDROID_NODE_NAME`. - `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`. - Détails complets de la configuration Android : [Application Android](/fr/platforms/android) -## Live : smoke des modèles (clés de profil) +## Live : smoke de modèle (clés de profil) -Les tests live sont divisés en deux couches afin de pouvoir isoler les échecs : +Les tests live sont divisés en deux couches afin que nous puissions isoler les défaillances : -- « Modèle direct » nous indique si le fournisseur/modèle peut répondre tout court avec la clé donnée. -- « Gateway smoke » nous indique si tout le pipeline gateway+agent fonctionne pour ce modèle (sessions, historique, outils, politique de sandbox, etc.). +- Le « modèle direct » nous indique si le fournisseur/modèle peut répondre tout court avec la clé donnée. +- Le « smoke Gateway » nous indique si le pipeline complet gateway+agent fonctionne pour ce modèle (sessions, historique, outils, politique de bac à sable, etc.). -### Couche 1 : complétion directe du modèle (sans gateway) +### Couche 1 : complétion de modèle directe (sans Gateway) - Test : `src/agents/models.profiles.live.test.ts` - Objectif : @@ -400,36 +401,36 @@ Les tests live sont divisés en deux couches afin de pouvoir isoler les échecs - Exécuter une petite complétion par modèle (et des régressions ciblées si nécessaire) - Comment l’activer : - `pnpm test:live` (ou `OPENCLAW_LIVE_TEST=1` si vous invoquez Vitest directement) -- Définissez `OPENCLAW_LIVE_MODELS=modern` (ou `all`, alias de modern) pour réellement exécuter cette suite ; sinon elle est ignorée afin que `pnpm test:live` reste centré sur le smoke Gateway +- Définissez `OPENCLAW_LIVE_MODELS=modern` (ou `all`, alias de modern) pour réellement exécuter cette suite ; sinon elle est ignorée afin de garder `pnpm test:live` centré sur le smoke Gateway - Comment sélectionner les modèles : - `OPENCLAW_LIVE_MODELS=modern` pour exécuter la liste d’autorisation moderne (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) - `OPENCLAW_LIVE_MODELS=all` est un alias de la liste d’autorisation moderne - ou `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (liste d’autorisation séparée par des virgules) - - Les balayages modern/all utilisent par défaut une limite sélectionnée à fort signal ; définissez `OPENCLAW_LIVE_MAX_MODELS=0` pour un balayage moderne exhaustif ou une valeur positive pour une limite plus petite. + - Les balayages modern/all appliquent par défaut un plafond sélectionné de haute valeur informative ; définissez `OPENCLAW_LIVE_MAX_MODELS=0` pour un balayage moderne exhaustif ou une valeur positive pour un plafond plus petit. - Comment sélectionner les fournisseurs : - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (liste d’autorisation séparée par des virgules) - D’où viennent les clés : - - Par défaut : magasin de profils et replis via l’environnement - - Définissez `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour imposer le **magasin de profils** uniquement + - Par défaut : stockage de profils et replis via l’environnement + - Définissez `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour imposer **uniquement** le stockage de profils - 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) + - Sépare « l’API fournisseur est cassée / la clé est invalide » de « le pipeline agent Gateway est cassé » + - Contient de petites régressions isolées (exemple : replay de raisonnement OpenAI Responses/Codex Responses + flux d’appels d’outils) -### Couche 2 : smoke Gateway + agent dev (ce que fait réellement "@openclaw") +### Couche 2 : smoke Gateway + agent dev (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 à chaque exécution) + - Créer/patcher une session `agent:dev:*` (remplacement de modèle à chaque exécution) - Itérer sur les modèles avec clés et vérifier : - une réponse « significative » (sans outils) - - qu’un véritable appel d’outil fonctionne (sonde de lecture) - - des sondes d’outil supplémentaires facultatives (sonde exec+lecture) - - que les chemins de régression OpenAI (appel d’outil seul → suivi) continuent de fonctionner + - le fonctionnement d’une véritable invocation d’outil (sonde de lecture) + - des sondes d’outil supplémentaires facultatives (sonde exec+read) + - le bon fonctionnement continu des chemins de régression OpenAI (appel d’outil seul → suivi) - Détails des sondes (pour pouvoir expliquer rapidement les échecs) : - sonde `read` : le test écrit un fichier nonce dans l’espace de travail et demande à l’agent de le `read` puis de renvoyer le nonce. - - sonde `exec+read` : le test demande à l’agent d’écrire un nonce dans un fichier temporaire via `exec`, puis de le relire via `read`. - - sonde image : le test joint un PNG généré (chat + code aléatoire) et attend que le modèle renvoie `cat `. + - sonde `exec+read` : le test demande à l’agent d’écrire un nonce dans un fichier temporaire via `exec`, puis de le relire avec `read`. + - sonde d’image : le test joint un PNG généré (chat + code aléatoire) et attend que le modèle renvoie `cat `. - Référence d’implémentation : `src/gateway/gateway-models.profiles.live.test.ts` et `src/gateway/live-image-probe.ts`. - Comment l’activer : - `pnpm test:live` (ou `OPENCLAW_LIVE_TEST=1` si vous invoquez Vitest directement) @@ -437,20 +438,20 @@ Les tests live sont divisés en deux couches afin de pouvoir isoler les échecs - Par défaut : liste d’autorisation moderne (Opus/Sonnet 4.6+, GPT-5.x + Codex, Gemini 3, GLM 4.7, MiniMax M2.7, Grok 4) - `OPENCLAW_LIVE_GATEWAY_MODELS=all` est un alias de la liste d’autorisation moderne - Ou définissez `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (ou une liste séparée par des virgules) pour restreindre - - Les balayages gateway modern/all utilisent par défaut une limite sélectionnée à fort signal ; définissez `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` pour un balayage moderne exhaustif ou une valeur positive pour une limite plus petite. -- Comment sélectionner les fournisseurs (éviter « tout OpenRouter ») : + - Les balayages Gateway modern/all appliquent par défaut un plafond sélectionné de haute valeur informative ; définissez `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` pour un balayage moderne exhaustif ou une valeur positive pour un plafond plus petit. +- Comment sélectionner les fournisseurs (éviter « OpenRouter partout ») : - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (liste d’autorisation séparée par des virgules) -- Les sondes d’outil + image sont toujours activées dans ce test live : +- Les sondes d’outil + image sont toujours actives dans ce test live : - sonde `read` + sonde `exec+read` (stress des outils) - - la sonde image s’exécute lorsque le modèle annonce la prise en charge des entrées image + - la sonde d’image s’exécute quand le modèle annonce la prise en charge d’entrée d’image - Flux (vue d’ensemble) : - - Le test génère un petit PNG avec « CAT » + un code aléatoire (`src/gateway/live-image-probe.ts`) + - Le test génère un petit PNG avec « CAT » + code aléatoire (`src/gateway/live-image-probe.ts`) - L’envoie via `agent` `attachments: [{ mimeType: "image/png", content: "" }]` - - Gateway analyse les pièces jointes en `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) + - Gateway analyse les pièces jointes dans `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) - L’agent embarqué transmet au modèle un message utilisateur multimodal - - Vérification : la réponse contient `cat` + le code (tolérance OCR : petites erreurs autorisées) + - Vérification : la réponse contient `cat` + le code (tolérance OCR : erreurs mineures autorisées) -Astuce : pour voir ce que vous pouvez tester sur votre machine (et les identifiants exacts `provider/model`), exécutez : +Astuce : pour voir ce que vous pouvez tester sur votre machine (et les ids exacts `provider/model`), exécutez : ```bash openclaw models list @@ -461,22 +462,22 @@ openclaw models list --json - Test : `src/gateway/gateway-cli-backend.live.test.ts` - Objectif : valider le pipeline Gateway + agent à l’aide d’un backend CLI local, sans toucher à votre configuration par défaut. -- Les valeurs par défaut de smoke spécifiques au backend se trouvent dans la définition `cli-backend.ts` de l’extension propriétaire. -- Activation : +- Les valeurs par défaut du smoke spécifiques au backend se trouvent dans la définition `cli-backend.ts` de l’extension propriétaire. +- Activer : - `pnpm test:live` (ou `OPENCLAW_LIVE_TEST=1` si vous invoquez Vitest directement) - `OPENCLAW_LIVE_CLI_BACKEND=1` - Valeurs par défaut : - Fournisseur/modèle par défaut : `claude-cli/claude-sonnet-4-6` - - Le comportement commande/arguments/image provient des métadonnées du Plugin propriétaire du backend CLI. + - Le comportement de commande/arguments/image provient des métadonnées du Plugin backend CLI propriétaire. - Remplacements facultatifs : - `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"` - `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"` - `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'` - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` pour envoyer une véritable pièce jointe image (les chemins sont injectés dans le prompt). - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` pour passer les chemins des fichiers image comme arguments CLI au lieu d’une injection dans le prompt. - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (ou `"list"`) pour contrôler la manière dont les arguments image sont transmis lorsque `IMAGE_ARG` est défini. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` pour envoyer une vraie image en pièce jointe (les chemins sont injectés dans le prompt). + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` pour passer les chemins des fichiers image comme arguments CLI au lieu de les injecter dans le prompt. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (ou `"list"`) pour contrôler la manière dont les arguments image sont passés lorsque `IMAGE_ARG` est défini. - `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1` pour envoyer un second tour et valider le flux de reprise. - - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0` pour désactiver la sonde par défaut de continuité dans une même session Claude Sonnet -> Opus (définissez `1` pour la forcer lorsque le modèle sélectionné prend en charge une cible de bascule). + - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0` pour désactiver la sonde par défaut de continuité dans une même session Claude Sonnet -> Opus (définissez `1` pour la forcer quand le modèle sélectionné prend en charge une cible de bascule). Exemple : @@ -492,7 +493,7 @@ Recette Docker : pnpm test:docker:live-cli-backend ``` -Recettes Docker pour un seul fournisseur : +Recettes Docker par fournisseur unique : ```bash pnpm test:docker:live-cli-backend:claude @@ -504,27 +505,27 @@ pnpm test:docker:live-cli-backend:gemini Remarques : - L’exécuteur Docker se trouve dans `scripts/test-live-cli-backend-docker.sh`. -- Il exécute le smoke live du backend CLI à l’intérieur de l’image Docker du dépôt en tant qu’utilisateur non root `node`. -- Il résout les métadonnées de smoke CLI à partir de l’extension propriétaire, puis installe le paquet CLI Linux correspondant (`@anthropic-ai/claude-code`, `@openai/codex` ou `@google/gemini-cli`) dans un préfixe inscriptible mis en cache sous `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (par défaut : `~/.cache/openclaw/docker-cli-tools`). -- `pnpm test:docker:live-cli-backend:claude-subscription` nécessite une authentification OAuth portable Claude Code subscription via soit `~/.claude/.credentials.json` avec `claudeAiOauth.subscriptionType`, soit `CLAUDE_CODE_OAUTH_TOKEN` depuis `claude setup-token`. Il prouve d’abord un `claude -p` direct dans Docker, puis exécute deux tours Gateway CLI-backend sans conserver les variables d’environnement de clé API Anthropic. Cette voie subscription désactive par défaut l’outil Claude MCP et les sondes image, car Claude facture actuellement l’usage des applications tierces via une facturation d’usage supplémentaire plutôt que via les limites normales du plan d’abonnement. +- Il exécute le smoke live du backend CLI dans l’image Docker du dépôt en tant qu’utilisateur `node` non root. +- Il résout les métadonnées du smoke CLI depuis l’extension propriétaire, puis installe le paquet CLI Linux correspondant (`@anthropic-ai/claude-code`, `@openai/codex` ou `@google/gemini-cli`) dans un préfixe inscriptible mis en cache à `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (par défaut : `~/.cache/openclaw/docker-cli-tools`). +- `pnpm test:docker:live-cli-backend:claude-subscription` nécessite une authentification OAuth d’abonnement Claude Code portable via soit `~/.claude/.credentials.json` avec `claudeAiOauth.subscriptionType`, soit `CLAUDE_CODE_OAUTH_TOKEN` depuis `claude setup-token`. Il vérifie d’abord `claude -p` direct dans Docker, puis exécute deux tours Gateway backend CLI sans conserver les variables d’environnement de clé API Anthropic. Cette voie d’abonnement désactive par défaut les sondes Claude MCP/outil et image, car Claude route actuellement l’usage d’applications tierces via une facturation d’usage supplémentaire plutôt que via les limites normales du plan d’abonnement. - Le smoke live du backend CLI exerce désormais le même flux end-to-end pour Claude, Codex et Gemini : tour texte, tour de classification d’image, puis appel de l’outil MCP `cron` vérifié via le CLI Gateway. -- Le smoke par défaut de Claude modifie aussi la session de Sonnet à Opus et vérifie que la session reprise se souvient toujours d’une note antérieure. +- Le smoke par défaut de Claude patche aussi la session de Sonnet vers Opus et vérifie que la session reprise se souvient toujours d’une note antérieure. -## Live : smoke d’attachement ACP (`/acp spawn ... --bind here`) +## Live : smoke ACP bind (`/acp spawn ... --bind here`) - Test : `src/gateway/gateway-acp-bind.live.test.ts` -- Objectif : valider le vrai flux d’attachement de conversation ACP avec un agent ACP live : +- Objectif : valider le vrai flux de liaison de conversation ACP avec un agent ACP live : - envoyer `/acp spawn --bind here` - - attacher en place une conversation synthétique de canal de messages + - lier en place une conversation synthétique de canal de messages - envoyer un suivi normal sur cette même conversation - - vérifier que le suivi arrive dans la transcription de session ACP attachée -- Activation : + - vérifier que le suivi arrive dans la transcription de session ACP liée +- Activer : - `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts` - `OPENCLAW_LIVE_ACP_BIND=1` - Valeurs par défaut : - Agents ACP dans Docker : `claude,codex,gemini` - Agent ACP pour `pnpm test:live ...` direct : `claude` - - Canal synthétique : contexte de conversation de type message privé Slack + - Canal synthétique : contexte de conversation de type DM Slack - Backend ACP : `acpx` - Remplacements : - `OPENCLAW_LIVE_ACP_BIND_AGENT=claude` @@ -533,8 +534,8 @@ Remarques : - `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini` - `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@'` - Remarques : - - Cette voie utilise la surface Gateway `chat.send` avec des champs synthétiques de route d’origine réservés à l’administration afin que les tests puissent attacher un contexte de canal de messages sans prétendre effectuer une livraison externe. - - Lorsque `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` n’est pas défini, le test utilise le registre d’agents intégré du Plugin `acpx` embarqué pour l’agent de harnais ACP sélectionné. + - Cette voie utilise la surface Gateway `chat.send` avec des champs synthétiques de route d’origine réservés à l’administration afin que les tests puissent attacher un contexte de canal de messages sans prétendre livrer à l’extérieur. + - Quand `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` n’est pas défini, le test utilise le registre intégré d’agents du Plugin `acpx` embarqué pour l’agent de harnais ACP sélectionné. Exemple : @@ -550,7 +551,7 @@ Recette Docker : pnpm test:docker:live-acp-bind ``` -Recettes Docker pour un seul agent : +Recettes Docker par agent unique : ```bash pnpm test:docker:live-acp-bind:claude @@ -561,31 +562,31 @@ pnpm test:docker:live-acp-bind:gemini Remarques Docker : - L’exécuteur Docker se trouve dans `scripts/test-live-acp-bind-docker.sh`. -- Par défaut, il exécute le smoke d’attachement ACP sur tous les agents CLI live pris en charge en séquence : `claude`, `codex`, puis `gemini`. +- Par défaut, il exécute séquentiellement le smoke ACP bind sur tous les agents CLI live pris en charge : `claude`, `codex`, puis `gemini`. - Utilisez `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex` ou `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` pour restreindre la matrice. - Il charge `~/.profile`, prépare dans le conteneur le matériel d’authentification CLI correspondant, installe `acpx` dans un préfixe npm inscriptible, puis installe le CLI live demandé (`@anthropic-ai/claude-code`, `@openai/codex` ou `@google/gemini-cli`) s’il manque. -- À l’intérieur de Docker, l’exécuteur définit `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx` afin qu’acpx conserve disponibles pour le CLI harnais enfant les variables d’environnement du fournisseur issues du profil chargé. +- Dans Docker, l’exécuteur définit `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx` afin que acpx conserve pour le CLI enfant du harnais les variables d’environnement du fournisseur issues du profil chargé. ## Live : smoke du harnais app-server Codex -- Objectif : valider le harnais Codex propriétaire du Plugin via la méthode - `agent` normale de Gateway : - - charger le Plugin `codex` intégré +- Objectif : valider le harnais Codex détenu par le Plugin via la méthode Gateway + `agent` normale : + - charger le Plugin `codex` embarqué - sélectionner `OPENCLAW_AGENT_RUNTIME=codex` - envoyer un premier tour d’agent Gateway à `codex/gpt-5.4` - - envoyer un second tour à la même session OpenClaw et vérifier que le thread + - envoyer un second tour à la même session OpenClaw et vérifier que le fil app-server peut reprendre - - exécuter `/codex status` et `/codex models` via ce même chemin de commande + - exécuter `/codex status` et `/codex models` via le même chemin de commande Gateway - Test : `src/gateway/gateway-codex-harness.live.test.ts` -- Activation : `OPENCLAW_LIVE_CODEX_HARNESS=1` +- Activer : `OPENCLAW_LIVE_CODEX_HARNESS=1` - Modèle par défaut : `codex/gpt-5.4` -- Sonde image facultative : `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` +- Sonde d’image facultative : `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` - Sonde MCP/outil facultative : `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1` -- Le smoke définit `OPENCLAW_AGENT_HARNESS_FALLBACK=none` afin qu’un harnais Codex - cassé ne puisse pas réussir en retombant silencieusement sur PI. -- Authentification : `OPENAI_API_KEY` depuis le shell/profil, plus éventuellement - `~/.codex/auth.json` et `~/.codex/config.toml` copiés +- Le smoke définit `OPENCLAW_AGENT_HARNESS_FALLBACK=none` afin qu’un harnais Codex cassé + ne puisse pas réussir en revenant silencieusement sur PI. +- Auth : `OPENAI_API_KEY` depuis le shell/profil, plus éventuelle copie de + `~/.codex/auth.json` et `~/.codex/config.toml` Recette locale : @@ -608,27 +609,25 @@ pnpm test:docker:live-codex-harness Remarques Docker : - L’exécuteur Docker se trouve dans `scripts/test-live-codex-harness-docker.sh`. -- Il charge le `~/.profile` monté, transmet `OPENAI_API_KEY`, copie les fichiers - d’authentification du CLI Codex lorsqu’ils sont présents, installe `@openai/codex` - dans un préfixe npm monté et inscriptible, prépare l’arborescence source, puis n’exécute que le test live du harnais Codex. +- Il charge le `~/.profile` monté, transmet `OPENAI_API_KEY`, copie les fichiers d’auth CLI Codex lorsqu’ils sont présents, installe `@openai/codex` dans un préfixe npm monté et inscriptible, prépare l’arborescence source, puis exécute uniquement le test live du harnais Codex. - Docker active par défaut les sondes image et MCP/outil. Définissez `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` ou - `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` lorsque vous avez besoin d’une exécution de débogage plus restreinte. -- Docker exporte aussi `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, conformément à la configuration du - test live, afin qu’un repli sur `openai-codex/*` ou PI ne puisse pas masquer une régression - du harnais Codex. + `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` quand vous avez besoin d’une exécution de débogage plus restreinte. +- Docker exporte aussi `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, comme la + configuration de test live, afin que le fallback `openai-codex/*` ou PI ne puisse pas masquer une + régression du harnais Codex. ### Recettes live recommandées -Des listes d’autorisation étroites et explicites sont plus rapides et moins fragiles : +Des listes d’autorisation étroites et explicites sont les plus rapides et les moins instables : -- Un seul modèle, direct (sans gateway) : +- Modèle unique, direct (sans Gateway) : - `OPENCLAW_LIVE_MODELS="openai/gpt-5.4" pnpm test:live src/agents/models.profiles.live.test.ts` -- Un seul modèle, smoke Gateway : +- Modèle unique, smoke Gateway : - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -- Appel d’outil sur plusieurs fournisseurs : +- Appel d’outils sur plusieurs fournisseurs : - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - Focus Google (clé API Gemini + Antigravity) : @@ -639,18 +638,18 @@ Remarques : - `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). +- `google-gemini-cli/...` utilise le CLI Gemini local sur votre machine (authentification séparée + particularités d’outillage). - API Gemini vs CLI Gemini : - - API : OpenClaw appelle l’API Gemini hébergée par Google via HTTP (clé API / authentification de profil) ; c’est ce que la plupart des utilisateurs veulent dire par « Gemini ». - - CLI : OpenClaw exécute un binaire local `gemini` ; il a sa propre authentification et peut se comporter différemment (streaming/prise en charge des outils/décalage de version). + - API : OpenClaw appelle l’API Gemini hébergée par 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 local `gemini` ; il dispose de sa propre authentification et peut se comporter différemment (streaming/prise en charge des outils/décalage de version). ## Live : matrice de modèles (ce que nous couvrons) -Il n’existe pas de « liste de modèles CI » fixe (live est opt-in), mais voici les modèles **recommandés** à couvrir régulièrement sur une machine de développement avec des clés. +Il n’existe pas de « liste de modèles CI » fixe (le live est opt-in), mais voici les modèles **recommandés** à couvrir régulièrement sur une machine de développement avec des clés. -### Ensemble de smoke moderne (appel d’outil + image) +### Ensemble smoke moderne (appel d’outils + image) -Il s’agit de l’exécution des « modèles courants » que nous nous attendons à voir continuer de fonctionner : +C’est l’exécution des « modèles courants » que nous attendons de maintenir fonctionnelle : - OpenAI (hors Codex) : `openai/gpt-5.4` (facultatif : `openai/gpt-5.4-mini`) - OpenAI Codex : `openai-codex/gpt-5.4` @@ -660,10 +659,10 @@ Il s’agit de l’exécution des « modèles courants » que nous nous attend - Z.AI (GLM) : `zai/glm-4.7` - MiniMax : `minimax/MiniMax-M2.7` -Exécutez le smoke Gateway avec outils + image : +Exécuter le smoke Gateway avec outils + image : `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,openai-codex/gpt-5.4,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,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -### Base : appel d’outil (Read + Exec facultatif) +### Référence : appel d’outils (Read + Exec facultatif) Choisissez-en au moins un par famille de fournisseurs : @@ -673,81 +672,81 @@ Choisissez-en au moins un par famille de fournisseurs : - Z.AI (GLM) : `zai/glm-4.7` - MiniMax : `minimax/MiniMax-M2.7` -Couverture supplémentaire facultative (appréciable) : +Couverture additionnelle facultative (agréable à avoir) : - xAI : `xai/grok-4` (ou la dernière version disponible) - Mistral : `mistral/`… (choisissez un modèle compatible « tools » 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) +- LM Studio : `lmstudio/`… (local ; l’appel d’outils dépend du mode API) ### Vision : envoi d’image (pièce jointe → message multimodal) -Incluez au moins un modèle compatible image dans `OPENCLAW_LIVE_GATEWAY_MODELS` (Claude/Gemini/variantes OpenAI compatibles vision, etc.) pour exercer la sonde image. +Incluez au moins un modèle compatible image dans `OPENCLAW_LIVE_GATEWAY_MODELS` (variants compatibles vision de Claude/Gemini/OpenAI, etc.) afin d’exercer la sonde d’image. ### Agrégateurs / passerelles alternatives -Si vous avez activé des clés, nous prenons aussi en charge les tests via : +Si vous avez des clés activées, nous prenons aussi en charge les tests via : - OpenRouter : `openrouter/...` (des centaines de modèles ; utilisez `openclaw models scan` pour trouver des candidats compatibles outils+image) - OpenCode : `opencode/...` pour Zen et `opencode-go/...` pour Go (authentification via `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`) -D’autres fournisseurs que vous pouvez inclure dans la matrice live (si vous avez les identifiants/la configuration) : +Autres fournisseurs que vous pouvez inclure dans la matrice live (si vous avez les identifiants/la configuration) : - Intégrés : `openai`, `openai-codex`, `anthropic`, `google`, `google-vertex`, `google-antigravity`, `google-gemini-cli`, `zai`, `openrouter`, `opencode`, `opencode-go`, `xai`, `groq`, `cerebras`, `mistral`, `github-copilot` - Via `models.providers` (points de terminaison personnalisés) : `minimax` (cloud/API), plus tout proxy compatible OpenAI/Anthropic (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 celle que `discoverModels(...)` renvoie sur votre machine + les clés disponibles. +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 + les clés disponibles. -## Identifiants (ne jamais commit) +## Identifiants (ne jamais committer) -Les tests live découvrent les identifiants de la même manière que le CLI. Conséquences pratiques : +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-le de la même manière que `openclaw models list` / la sélection de modèle. +- Si un test live indique « pas d’identifiants », déboguez-le comme vous débogueriez `openclaw models list` / la sélection de modèle. - Profils d’authentification par agent : `~/.openclaw/agents//agent/auth-profiles.json` (c’est ce que « clés de profil » signifie dans les tests live) - Configuration : `~/.openclaw/openclaw.json` (ou `OPENCLAW_CONFIG_PATH`) -- Ancien répertoire d’état : `~/.openclaw/credentials/` (copié dans le home live préparé lorsqu’il est présent, mais pas dans le magasin principal de clés de profil) -- Les exécutions locales live copient par défaut la configuration active, les fichiers `auth-profiles.json` par agent, l’ancien `credentials/` et les répertoires d’authentification CLI externes pris en charge dans un home de test temporaire ; les homes live préparés ignorent `workspace/` et `sandboxes/`, et les remplacements de chemin `agents.*.workspace` / `agentDir` sont supprimés afin que les sondes n’utilisent pas votre véritable espace de travail hôte. +- Répertoire d’état hérité : `~/.openclaw/credentials/` (copié dans le home live préparé lorsqu’il est présent, mais pas dans le stockage principal de clés de profil) +- Les exécutions live locales copient par défaut la configuration active, les fichiers `auth-profiles.json` par agent, le répertoire hérité `credentials/` et les répertoires d’auth CLI externes pris en charge dans un home de test temporaire ; les homes live préparés ignorent `workspace/` et `sandboxes/`, et les remplacements de chemin `agents.*.workspace` / `agentDir` sont retirés afin que les sondes restent en dehors de votre véritable espace de travail hôte. Si vous voulez vous appuyer sur des clés d’environnement (par exemple exportées dans votre `~/.profile`), exécutez les tests locaux après `source ~/.profile`, ou utilisez les exécuteurs Docker ci-dessous (ils peuvent monter `~/.profile` dans le conteneur). ## Live Deepgram (transcription audio) - Test : `src/media-understanding/providers/deepgram/audio.live.test.ts` -- Activation : `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live 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` ## Live BytePlus coding plan - Test : `src/agents/byteplus.live.test.ts` -- Activation : `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts` -- Remplacement facultatif du modèle : `BYTEPLUS_CODING_MODEL=ark-code-latest` +- Activer : `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts` +- Remplacement de modèle facultatif : `BYTEPLUS_CODING_MODEL=ark-code-latest` ## Live média de workflow ComfyUI - Test : `extensions/comfy/comfy.live.test.ts` -- Activation : `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` -- Portée : - - Exerce les chemins image, vidéo et `music_generate` du comfy intégré - - Ignore chaque capacité à moins que `models.providers.comfy.` soit configuré - - Utile après avoir modifié l’envoi de workflow comfy, le polling, les téléchargements ou l’enregistrement du Plugin +- Activer : `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` +- Périmètre : + - Exerce les chemins image, vidéo et `music_generate` du comfy embarqué + - Ignore chaque capacité sauf si `models.providers.comfy.` est configuré + - Utile après des modifications de soumission de workflow comfy, polling, téléchargements ou enregistrement de Plugin ## Live génération d’images - Test : `src/image-generation/runtime.live.test.ts` - Commande : `pnpm test:live src/image-generation/runtime.live.test.ts` - Harnais : `pnpm test:live:media image` -- Portée : - - Énumère chaque Plugin fournisseur de génération d’images enregistré - - Charge les variables d’environnement de fournisseur manquantes depuis votre shell de connexion (`~/.profile`) avant les sondes - - Utilise par défaut les clés API live/env avant les profils d’authentification stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas de vrais identifiants du shell - - Ignore les fournisseurs sans authentification/profil/modèle utilisable - - Exécute les variantes standard de génération d’images via la capacité runtime partagée : +- Périmètre : + - Énumère tous les Plugins fournisseurs de génération d’images enregistrés + - Charge les variables d’environnement fournisseur manquantes depuis votre shell de connexion (`~/.profile`) avant la sonde + - Utilise par défaut les clés API live/env avant les profils d’auth stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas les véritables identifiants du shell + - Ignore les fournisseurs sans auth/profil/modèle exploitable + - Exécute les variantes standard de génération d’images via la capacité d’exécution partagée : - `google:flash-generate` - `google:pro-generate` - `google:pro-edit` - `openai:default-generate` -- Fournisseurs intégrés actuellement couverts : +- Fournisseurs embarqués actuellement couverts : - `openai` - `google` - Restriction facultative : @@ -755,21 +754,21 @@ Si vous voulez vous appuyer sur des clés d’environnement (par exemple export - `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-1,google/gemini-3.1-flash-image-preview"` - `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit"` - Comportement d’authentification facultatif : - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour forcer l’authentification via magasin de profils et ignorer les remplacements uniquement fournis par l’environnement + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour imposer l’authentification du stockage de profils et ignorer les remplacements par environnement uniquement ## Live génération de musique - Test : `extensions/music-generation-providers.live.test.ts` -- Activation : `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts` +- Activer : `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts` - Harnais : `pnpm test:live:media music` -- Portée : - - Exerce le chemin partagé intégré des fournisseurs de génération de musique +- Périmètre : + - Exerce le chemin partagé embarqué de fournisseur de génération de musique - Couvre actuellement Google et MiniMax - - Charge les variables d’environnement de fournisseur depuis votre shell de connexion (`~/.profile`) avant les sondes - - Utilise par défaut les clés API live/env avant les profils d’authentification stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas de vrais identifiants du shell - - Ignore les fournisseurs sans authentification/profil/modèle utilisable - - Exécute les deux modes runtime déclarés lorsqu’ils sont disponibles : - - `generate` avec entrée basée uniquement sur prompt + - Charge les variables d’environnement fournisseur depuis votre shell de connexion (`~/.profile`) avant la sonde + - Utilise par défaut les clés API live/env avant les profils d’auth stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas les véritables identifiants du shell + - Ignore les fournisseurs sans auth/profil/modèle exploitable + - Exécute les deux modes d’exécution déclarés lorsqu’ils sont disponibles : + - `generate` avec une entrée uniquement sous forme de prompt - `edit` lorsque le fournisseur déclare `capabilities.edit.enabled` - Couverture actuelle de la voie partagée : - `google` : `generate`, `edit` @@ -779,51 +778,51 @@ Si vous voulez vous appuyer sur des clés d’environnement (par exemple export - `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"` - `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"` - Comportement d’authentification facultatif : - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour forcer l’authentification via magasin de profils et ignorer les remplacements uniquement fournis par l’environnement + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour imposer l’authentification du stockage de profils et ignorer les remplacements par environnement uniquement -## Live génération de vidéos +## Live génération de vidéo - Test : `extensions/video-generation-providers.live.test.ts` -- Activation : `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts` +- Activer : `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts` - Harnais : `pnpm test:live:media video` -- Portée : - - Exerce le chemin partagé intégré des fournisseurs de génération de vidéos - - Utilise par défaut le chemin de smoke sûr pour la release : fournisseurs hors FAL, une requête text-to-video par fournisseur, prompt lobster d’une seconde, et une limite d’opération par fournisseur issue de `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` par défaut) +- Périmètre : + - Exerce le chemin partagé embarqué de fournisseur de génération de vidéo + - Utilise par défaut le chemin smoke sûr pour les versions : fournisseurs hors FAL, une requête texte-vers-vidéo par fournisseur, prompt lobster d’une seconde, et un plafond d’opération par fournisseur issu de `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` par défaut) - Ignore FAL par défaut, car la latence de file d’attente côté fournisseur peut dominer le temps de release ; passez `--video-providers fal` ou `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` pour l’exécuter explicitement - - Charge les variables d’environnement de fournisseur depuis votre shell de connexion (`~/.profile`) avant les sondes - - Utilise par défaut les clés API live/env avant les profils d’authentification stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas de vrais identifiants du shell - - Ignore les fournisseurs sans authentification/profil/modèle utilisable - - N’exécute que `generate` par défaut + - Charge les variables d’environnement fournisseur depuis votre shell de connexion (`~/.profile`) avant la sonde + - Utilise par défaut les clés API live/env avant les profils d’auth stockés, afin que des clés de test obsolètes dans `auth-profiles.json` ne masquent pas les véritables identifiants du shell + - Ignore les fournisseurs sans auth/profil/modèle exploitable + - Exécute uniquement `generate` par défaut - Définissez `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` pour exécuter aussi les modes de transformation déclarés lorsqu’ils sont disponibles : - - `imageToVideo` lorsque le fournisseur déclare `capabilities.imageToVideo.enabled` et que le fournisseur/modèle sélectionné accepte une entrée image locale basée sur buffer dans le balayage partagé - - `videoToVideo` lorsque le fournisseur déclare `capabilities.videoToVideo.enabled` et que le fournisseur/modèle sélectionné accepte une entrée vidéo locale basée sur buffer dans le balayage partagé + - `imageToVideo` lorsque le fournisseur déclare `capabilities.imageToVideo.enabled` et que le fournisseur/modèle sélectionné accepte une entrée image locale adossée à un buffer dans le balayage partagé + - `videoToVideo` lorsque le fournisseur déclare `capabilities.videoToVideo.enabled` et que le fournisseur/modèle sélectionné accepte une entrée vidéo locale adossée à un buffer dans le balayage partagé - Fournisseurs `imageToVideo` actuellement déclarés mais ignorés dans le balayage partagé : - - `vydra`, car le `veo3` intégré est uniquement textuel et le `kling` intégré nécessite une URL d’image distante + - `vydra` parce que le `veo3` embarqué est texte uniquement et que le `kling` embarqué nécessite une URL d’image distante - Couverture Vydra spécifique au fournisseur : - `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts` - - ce fichier exécute `veo3` text-to-video ainsi qu’une voie `kling` qui utilise par défaut une fixture d’URL d’image distante - - Couverture live actuelle de `videoToVideo` : + - ce fichier exécute `veo3` texte-vers-vidéo ainsi qu’une voie `kling` qui utilise par défaut un fixture d’URL d’image distante + - Couverture live actuelle `videoToVideo` : - `runway` uniquement lorsque le modèle sélectionné est `runway/gen4_aleph` - Fournisseurs `videoToVideo` actuellement déclarés mais ignorés dans le balayage partagé : - - `alibaba`, `qwen`, `xai`, car ces chemins nécessitent actuellement des URL de référence distantes `http(s)` / MP4 - - `google`, car la voie Gemini/Veo partagée actuelle utilise une entrée locale basée sur buffer et ce chemin n’est pas accepté dans le balayage partagé - - `openai`, car la voie partagée actuelle ne garantit pas l’accès spécifique à l’organisation pour l’inpaint/remix vidéo + - `alibaba`, `qwen`, `xai` parce que ces chemins nécessitent actuellement des URL de référence distantes `http(s)` / MP4 + - `google` parce que la voie partagée Gemini/Veo actuelle utilise une entrée locale adossée à un buffer et que ce chemin n’est pas accepté dans le balayage partagé + - `openai` parce que la voie partagée actuelle n’offre pas de garanties d’accès spécifiques à l’organisation pour l’inpaint/remix vidéo - Restriction facultative : - `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="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=""` pour inclure tous les fournisseurs dans le balayage par défaut, y compris FAL - - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` pour réduire la limite d’opération de chaque fournisseur lors d’une exécution smoke agressive + - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` pour réduire le plafond d’opération de chaque fournisseur lors d’un smoke agressif - Comportement d’authentification facultatif : - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour forcer l’authentification via magasin de profils et ignorer les remplacements uniquement fournis par l’environnement + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour imposer l’authentification du stockage de profils et ignorer les remplacements par environnement uniquement ## Harnais live média - Commande : `pnpm test:live:media` - Objectif : - - Exécute les suites live partagées d’image, de musique et de vidéo via un point d’entrée natif au dépôt - - Charge automatiquement les variables d’environnement de fournisseur manquantes depuis `~/.profile` - - Restreint automatiquement chaque suite, par défaut, aux fournisseurs qui disposent actuellement d’une authentification exploitable - - Réutilise `scripts/test-live.mjs`, afin que le comportement Heartbeat et le mode silencieux restent cohérents + - Exécute les suites live partagées image, musique et vidéo via un seul point d’entrée natif du dépôt + - Charge automatiquement les variables d’environnement fournisseur manquantes depuis `~/.profile` + - Restreint automatiquement chaque suite aux fournisseurs qui ont actuellement une authentification exploitable par défaut + - Réutilise `scripts/test-live.mjs`, de sorte que le comportement de Heartbeat et de mode silencieux reste cohérent - Exemples : - `pnpm test:live:media` - `pnpm test:live:media image video --providers openai,google,minimax` @@ -834,72 +833,72 @@ Si vous voulez vous appuyer sur des clés d’environnement (par exemple export Ces exécuteurs Docker se répartissent en deux catégories : -- Exécuteurs de modèles live : `test:docker:live-models` et `test:docker:live-gateway` n’exécutent que leur fichier live à clés de profil correspondant à l’intérieur de l’image Docker du dépôt (`src/agents/models.profiles.live.test.ts` et `src/gateway/gateway-models.profiles.live.test.ts`), en montant votre répertoire de configuration local et votre espace de travail (et en chargeant `~/.profile` s’il est monté). Les points d’entrée locaux correspondants sont `test:live:models-profiles` et `test:live:gateway-profiles`. -- Les exécuteurs live Docker utilisent par défaut une limite de smoke plus petite afin qu’un balayage Docker complet reste praticable : +- Exécuteurs live de modèles : `test:docker:live-models` et `test:docker:live-gateway` n’exécutent que leur fichier live de clés de profil correspondant dans l’image Docker du dépôt (`src/agents/models.profiles.live.test.ts` et `src/gateway/gateway-models.profiles.live.test.ts`), en montant votre répertoire de configuration local et votre espace de travail (et en chargeant `~/.profile` s’il est monté). Les points d’entrée locaux correspondants sont `test:live:models-profiles` et `test:live:gateway-profiles`. +- Les exécuteurs Docker live utilisent par défaut un plafond de smoke plus petit afin qu’un balayage Docker complet reste pratique : `test:docker:live-models` utilise par défaut `OPENCLAW_LIVE_MAX_MODELS=12`, et `test:docker:live-gateway` utilise par défaut `OPENCLAW_LIVE_GATEWAY_SMOKE=1`, `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8`, `OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000`, et `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. Remplacez ces variables d’environnement lorsque vous - voulez explicitement le balayage exhaustif plus large. -- `test:docker:all` construit une fois l’image live Docker via `test:docker:live-build`, puis la réutilise pour les deux voies live Docker. -- Exécuteurs de smoke de conteneur : `test:docker:openwebui`, `test:docker:onboard`, `test:docker:gateway-network`, `test:docker:mcp-channels` et `test:docker:plugins` démarrent un ou plusieurs conteneurs réels et vérifient des chemins d’intégration de plus haut niveau. + souhaitez explicitement le balayage exhaustif plus large. +- `test:docker:all` construit l’image Docker live une fois via `test:docker:live-build`, puis la réutilise pour les deux voies Docker live. +- Exécuteurs smoke de conteneur : `test:docker:openwebui`, `test:docker:onboard`, `test:docker:gateway-network`, `test:docker:mcp-channels` et `test:docker:plugins` démarrent un ou plusieurs vrais conteneurs et vérifient des chemins d’intégration de plus haut niveau. -Les exécuteurs Docker de modèles live montent aussi en bind uniquement les homes d’authentification CLI nécessaires (ou tous ceux pris en charge lorsque l’exécution n’est pas restreinte), puis les copient dans le home du conteneur avant l’exécution afin que l’OAuth CLI externe puisse actualiser les jetons sans modifier le magasin d’authentification de l’hôte : +Les exécuteurs Docker live de modèles montent également en bind uniquement les homes d’authentification CLI nécessaires (ou tous ceux pris en charge lorsque l’exécution n’est pas restreinte), puis les copient dans le home du conteneur avant l’exécution afin que l’OAuth des CLI externes puisse rafraîchir les jetons sans modifier le stockage d’authentification de l’hôte : - Modèles directs : `pnpm test:docker:live-models` (script : `scripts/test-live-models-docker.sh`) -- Smoke d’attachement ACP : `pnpm test:docker:live-acp-bind` (script : `scripts/test-live-acp-bind-docker.sh`) -- Smoke du backend CLI : `pnpm test:docker:live-cli-backend` (script : `scripts/test-live-cli-backend-docker.sh`) +- Smoke ACP bind : `pnpm test:docker:live-acp-bind` (script : `scripts/test-live-acp-bind-docker.sh`) +- Smoke backend CLI : `pnpm test:docker:live-cli-backend` (script : `scripts/test-live-cli-backend-docker.sh`) - Smoke du harnais app-server Codex : `pnpm test:docker:live-codex-harness` (script : `scripts/test-live-codex-harness-docker.sh`) - Gateway + agent dev : `pnpm test:docker:live-gateway` (script : `scripts/test-live-gateway-models-docker.sh`) - Smoke live Open WebUI : `pnpm test:docker:openwebui` (script : `scripts/e2e/openwebui-docker.sh`) -- Assistant d’onboarding (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`) -- Pont de canal MCP (Gateway initialisée + pont stdio + smoke brut des frames de notification Claude) : `pnpm test:docker:mcp-channels` (script : `scripts/e2e/mcp-channels-docker.sh`) +- Assistant d’onboarding (TTY, scaffolding complet) : `pnpm test:docker:onboard` (script : `scripts/e2e/onboard-docker.sh`) +- Réseau Gateway (deux conteneurs, auth WS + santé) : `pnpm test:docker:gateway-network` (script : `scripts/e2e/gateway-network-docker.sh`) +- Pont de canal MCP (Gateway préensemencé + pont stdio + smoke brut de trame de notification Claude) : `pnpm test:docker:mcp-channels` (script : `scripts/e2e/mcp-channels-docker.sh`) - Plugins (smoke d’installation + alias `/plugin` + sémantique de redémarrage du bundle Claude) : `pnpm test:docker:plugins` (script : `scripts/e2e/plugins-docker.sh`) -Les exécuteurs Docker de modèles live montent aussi en bind le checkout actuel en lecture seule et -le préparent dans un répertoire de travail temporaire à l’intérieur du conteneur. Cela garde l’image runtime -légère tout en exécutant Vitest sur votre source/configuration locale exacte. -L’étape de préparation ignore les gros caches purement locaux et les sorties de build de l’application, telles que -`.pnpm-store`, `.worktrees`, `__openclaw_vitest__`, et les répertoires `.build` locaux à l’application ou les sorties -Gradle, afin que les exécutions live Docker ne passent pas des minutes à copier +Les exécuteurs Docker live de modèles montent aussi en bind le checkout courant en lecture seule et +le préparent dans un répertoire de travail temporaire à l’intérieur du conteneur. Cela garde l’image d’exécution +légère tout en exécutant Vitest sur vos sources/configurations locales exactes. +L’étape de préparation ignore les gros caches locaux uniquement et les sorties de build d’app telles que +`.pnpm-store`, `.worktrees`, `__openclaw_vitest__`, ainsi que les répertoires de sortie `.build` ou +Gradle locaux à l’application, afin que les exécutions Docker live ne passent pas des minutes à copier des artefacts spécifiques à la machine. Ils définissent aussi `OPENCLAW_SKIP_CHANNELS=1` afin que les sondes live Gateway ne démarrent pas -de vrais workers de canal Telegram/Discord/etc. à l’intérieur du conteneur. -`test:docker:live-models` exécute toujours `pnpm test:live`, donc faites aussi passer -`OPENCLAW_LIVE_GATEWAY_*` lorsque vous devez restreindre ou exclure la couverture -live Gateway de cette voie Docker. +de vrais workers de canal Telegram/Discord/etc. dans le conteneur. +`test:docker:live-models` exécute tout de même `pnpm test:live`, donc faites aussi passer +`OPENCLAW_LIVE_GATEWAY_*` lorsque vous devez restreindre ou exclure la couverture live Gateway de cette voie Docker. `test:docker:openwebui` est un smoke de compatibilité de plus haut niveau : il démarre un conteneur Gateway OpenClaw avec les points de terminaison HTTP compatibles OpenAI activés, -démarre un conteneur Open WebUI épinglé sur cette Gateway, se connecte via +démarre un conteneur Open WebUI épinglé contre cette Gateway, se connecte via Open WebUI, vérifie que `/api/models` expose `openclaw/default`, puis envoie une vraie requête de chat via le proxy `/api/chat/completions` d’Open WebUI. La première exécution peut être sensiblement plus lente, car Docker peut devoir récupérer l’image -Open WebUI et Open WebUI peut devoir terminer sa propre configuration à froid. -Cette voie attend une clé de modèle live utilisable, et `OPENCLAW_PROFILE_FILE` -(`~/.profile` par défaut) est le moyen principal de la fournir dans les exécutions Docker. -Les exécutions réussies affichent une petite charge JSON telle que `{ "ok": true, "model": +Open WebUI et Open WebUI peut devoir terminer sa propre configuration de démarrage à froid. +Cette voie attend une clé de modèle live exploitable, et `OPENCLAW_PROFILE_FILE` +(`~/.profile` par défaut) est le principal moyen de la fournir dans les exécutions Dockerisées. +Les exécutions réussies affichent une petite charge utile JSON comme `{ "ok": true, "model": "openclaw/default", ... }`. -`test:docker:mcp-channels` est volontairement déterministe et ne nécessite pas -de vrai compte Telegram, Discord ou iMessage. Il démarre une -Gateway initialisée en conteneur, lance un second conteneur qui exécute `openclaw mcp serve`, puis -vérifie la découverte des conversations routées, la lecture des transcriptions, les métadonnées des pièces jointes, -le comportement de la file d’événements live, le routage des envois sortants, et les notifications de canal + -autorisation de type Claude sur le vrai pont stdio MCP. La vérification des notifications -inspecte directement les frames MCP stdio brutes afin que le smoke valide ce que le -pont émet réellement, et pas seulement ce qu’un SDK client particulier expose par hasard. +`test:docker:mcp-channels` est volontairement déterministe et ne nécessite pas de +vrai compte Telegram, Discord ou iMessage. Il démarre un conteneur Gateway +préensemencé, démarre un second conteneur qui lance `openclaw mcp serve`, puis +vérifie la découverte de conversation routée, les lectures de transcription, les métadonnées des pièces jointes, +le comportement de la file d’événements live, le routage d’envoi sortant, et les notifications de canal + +autorisations de type Claude sur le vrai pont MCP stdio. La vérification des notifications +inspecte directement les trames MCP stdio brutes, afin que le smoke valide ce que le +pont émet réellement, et pas seulement ce qu’un SDK client donné expose par hasard. -Smoke manuel ACP en langage courant pour les fils (hors CI) : +Smoke manuel ACP de fil en langage naturel (hors CI) : - `bun scripts/dev/discord-acp-plain-language-smoke.ts --channel ...` -- Conservez ce script pour les workflows de régression/débogage. Il pourra être de nouveau nécessaire pour valider le routage des fils ACP, donc ne le supprimez pas. +- Conservez ce script pour les workflows de régression/débogage. Il pourrait être nécessaire à nouveau pour la validation du routage de fil ACP, donc ne le supprimez pas. Variables d’environnement utiles : - `OPENCLAW_CONFIG_DIR=...` (par défaut : `~/.openclaw`) monté sur `/home/node/.openclaw` - `OPENCLAW_WORKSPACE_DIR=...` (par défaut : `~/.openclaw/workspace`) monté sur `/home/node/.openclaw/workspace` -- `OPENCLAW_PROFILE_FILE=...` (par défaut : `~/.profile`) monté sur `/home/node/.profile` et chargé avant l’exécution des tests +- `OPENCLAW_PROFILE_FILE=...` (par défaut : `~/.profile`) monté sur `/home/node/.profile` et chargé avant d’exécuter les tests +- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1` pour vérifier uniquement les variables d’environnement chargées depuis `OPENCLAW_PROFILE_FILE`, en utilisant des répertoires de config/espace de travail temporaires et sans montages d’authentification CLI externes - `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (par défaut : `~/.cache/openclaw/docker-cli-tools`) monté sur `/home/node/.npm-global` pour les installations CLI mises en cache dans Docker - Les répertoires/fichiers d’authentification CLI externes sous `$HOME` sont montés en lecture seule sous `/host-auth...`, puis copiés dans `/home/node/...` avant le démarrage des tests - Répertoires par défaut : `.minimax` @@ -908,69 +907,69 @@ Variables d’environnement utiles : - Remplacement manuel avec `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none`, ou une liste séparée par des virgules comme `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex` - `OPENCLAW_LIVE_GATEWAY_MODELS=...` / `OPENCLAW_LIVE_MODELS=...` pour restreindre l’exécution - `OPENCLAW_LIVE_GATEWAY_PROVIDERS=...` / `OPENCLAW_LIVE_PROVIDERS=...` pour filtrer les fournisseurs dans le conteneur -- `OPENCLAW_SKIP_DOCKER_BUILD=1` pour réutiliser une image `openclaw:local-live` existante lors des réexécutions qui ne nécessitent pas de reconstruction -- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour s’assurer que les identifiants proviennent du magasin de profils (et non de l’environnement) +- `OPENCLAW_SKIP_DOCKER_BUILD=1` pour réutiliser une image `openclaw:local-live` existante lors de relances qui n’ont pas besoin d’une reconstruction +- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` pour s’assurer que les identifiants proviennent du stockage de profils (et non de l’environnement) - `OPENCLAW_OPENWEBUI_MODEL=...` pour choisir le modèle exposé par la Gateway pour le smoke Open WebUI -- `OPENCLAW_OPENWEBUI_PROMPT=...` pour remplacer le prompt de vérification du nonce utilisé par le smoke Open WebUI +- `OPENCLAW_OPENWEBUI_PROMPT=...` pour remplacer le prompt de vérification de nonce utilisé par le smoke Open WebUI - `OPENWEBUI_IMAGE=...` pour remplacer la balise d’image Open WebUI épinglée -## Vérification de la documentation +## Vérification de cohérence de la documentation Exécutez les vérifications de documentation après des modifications de doc : `pnpm check:docs`. Exécutez la validation complète des ancres Mintlify lorsque vous avez aussi besoin de vérifier les titres dans la page : `pnpm docs:check-links:anchors`. -## Régression hors ligne (compatible CI) +## Régression hors ligne (sans risque pour la CI) -Il s’agit de régressions de « pipeline réel » sans vrais fournisseurs : +Il s’agit de régressions de « vrai pipeline » sans vrais fournisseurs : -- Appel d’outil Gateway (OpenAI simulé, vraie boucle gateway + agent) : `src/gateway/gateway.test.ts` (cas : "runs a mock OpenAI tool call end-to-end via gateway agent loop") -- Assistant Gateway (WS `wizard.start`/`wizard.next`, écrit config + auth imposée) : `src/gateway/gateway.test.ts` (cas : "runs wizard over ws and writes auth token config") +- Appel d’outils Gateway (OpenAI simulé, vraie boucle Gateway + agent) : `src/gateway/gateway.test.ts` (cas : "runs a mock OpenAI tool call end-to-end via gateway agent loop") +- Assistant Gateway (WS `wizard.start`/`wizard.next`, écriture de config + auth imposée) : `src/gateway/gateway.test.ts` (cas : "runs wizard over ws and writes auth token config") ## Évaluations de fiabilité d’agent (Skills) -Nous avons déjà quelques tests compatibles CI qui se comportent comme des « évaluations de fiabilité d’agent » : +Nous disposons déjà de quelques tests sans risque pour la CI qui se comportent comme des « évaluations de fiabilité d’agent » : -- Appel d’outil simulé via la vraie boucle gateway + agent (`src/gateway/gateway.test.ts`). -- Flux end-to-end de l’assistant qui valident le câblage des sessions et les effets de configuration (`src/gateway/gateway.test.ts`). +- Appel d’outils simulé à travers la vraie boucle Gateway + agent (`src/gateway/gateway.test.ts`). +- Flux d’assistant end-to-end qui valident le câblage de session et les effets de configuration (`src/gateway/gateway.test.ts`). Ce qui manque encore pour les Skills (voir [Skills](/fr/tools/skills)) : -- **Prise de décision :** lorsque des Skills sont listées dans le prompt, l’agent choisit-il la bonne Skill (ou évite-t-il celles qui ne sont pas pertinentes) ? +- **Prise de décision :** lorsque les Skills sont listés dans le prompt, l’agent choisit-il le bon skill (ou évite-t-il ceux qui ne sont pas pertinents) ? - **Conformité :** l’agent lit-il `SKILL.md` avant utilisation et suit-il les étapes/arguments requis ? -- **Contrats de workflow :** scénarios multi-tours qui vérifient l’ordre des outils, le report de l’historique de session et les limites du sandbox. +- **Contrats de workflow :** scénarios multi-tours qui vérifient l’ordre des outils, le report de l’historique de session et les limites du bac à sable. Les futures évaluations doivent d’abord rester déterministes : -- Un exécuteur de scénarios utilisant des fournisseurs simulés pour vérifier les appels d’outils + leur ordre, les lectures de fichiers de Skill et le câblage des sessions. -- Une petite suite de scénarios centrés sur les Skills (utiliser vs éviter, garde-fous, injection de prompt). -- Des évaluations live facultatives (opt-in, contrôlées par l’environnement) seulement après la mise en place de la suite compatible CI. +- Un exécuteur de scénarios utilisant des fournisseurs simulés pour vérifier les appels d’outils + leur ordre, les lectures de fichiers de skill et le câblage de session. +- Une petite suite de scénarios centrés sur les skills (utiliser vs éviter, gating, injection de prompt). +- Des évaluations live facultatives (opt-in, protégées par env) uniquement après la mise en place de la suite sans risque pour la CI. ## Tests de contrat (forme des plugins et des canaux) Les tests de contrat vérifient que chaque plugin et canal enregistré respecte son -contrat d’interface. Ils itèrent sur tous les plugins découverts et exécutent une suite de +contrat d’interface. Ils parcourent tous les plugins découverts et exécutent une suite de vérifications de forme et de comportement. La voie unitaire par défaut `pnpm test` -ignore intentionnellement ces fichiers partagés de raccord et de smoke ; exécutez explicitement -les commandes de contrat lorsque vous touchez des surfaces partagées de canal ou de fournisseur. +ignore volontairement ces fichiers partagés de jonction et de smoke ; exécutez explicitement +les commandes de contrat lorsque vous touchez à des surfaces partagées de canal ou de fournisseur. ### Commandes - Tous les contrats : `pnpm test:contracts` -- Contrats de canal uniquement : `pnpm test:contracts:channels` -- Contrats de fournisseur uniquement : `pnpm test:contracts:plugins` +- Contrats de canaux uniquement : `pnpm test:contracts:channels` +- Contrats de fournisseurs uniquement : `pnpm test:contracts:plugins` -### Contrats de canal +### Contrats de canaux Situés dans `src/channels/plugins/contracts/*.contract.test.ts` : -- **plugin** - Forme de base du Plugin (id, nom, capacités) +- **plugin** - Forme de base du plugin (id, nom, capacités) - **setup** - Contrat de l’assistant de configuration -- **session-binding** - Comportement d’attachement de session -- **outbound-payload** - Structure de la charge des messages +- **session-binding** - Comportement de liaison de session +- **outbound-payload** - Structure de la charge utile du message - **inbound** - Gestion des messages entrants -- **actions** - Gestionnaires d’action du canal -- **threading** - Gestion des identifiants de fil -- **directory** - API d’annuaire/de liste +- **actions** - Gestionnaires d’actions de canal +- **threading** - Gestion des ids de fil +- **directory** - API de répertoire/liste - **group-policy** - Application de la politique de groupe ### Contrats de statut des fournisseurs @@ -984,32 +983,32 @@ Situés dans `src/plugins/contracts/*.contract.test.ts`. Situés dans `src/plugins/contracts/*.contract.test.ts` : -- **auth** - Contrat de flux d’authentification +- **auth** - Contrat du flux d’authentification - **auth-choice** - Choix/sélection d’authentification -- **catalog** - API de catalogue de modèles +- **catalog** - API du catalogue de modèles - **discovery** - Découverte de Plugin - **loader** - Chargement de Plugin -- **runtime** - Runtime du fournisseur -- **shape** - Forme/interface du Plugin +- **runtime** - Exécution du fournisseur +- **shape** - Forme/interface de Plugin - **wizard** - Assistant de configuration ### Quand les exécuter -- Après modification des exportations ou sous-chemins de plugin-sdk +- Après modification des exports ou sous-chemins de plugin-sdk - Après ajout ou modification d’un Plugin de canal ou de fournisseur -- Après refactorisation de l’enregistrement ou de la découverte des plugins +- Après refactorisation de l’enregistrement ou de la découverte des Plugins -Les tests de contrat s’exécutent dans CI et ne nécessitent pas de vraies clés API. +Les tests de contrat s’exécutent en CI et ne nécessitent pas de vraies clés API. -## Ajouter des régressions (guide) +## Ajouter des régressions (recommandations) Lorsque vous corrigez un problème de fournisseur/modèle découvert en live : -- Ajoutez si possible une régression compatible CI (fournisseur simulé/stub, ou capture de la transformation exacte de forme de requête) -- Si le problème est intrinsèquement limité au live (limites de débit, politiques d’authentification), gardez le test live étroit et opt-in via des variables d’environnement -- Préférez cibler la plus petite couche qui détecte le bogue : - - bogue de conversion/rejeu de requête fournisseur → test de modèles directs - - bogue de pipeline gateway session/historique/outils → smoke Gateway live ou test mock Gateway compatible CI -- Garde-fou de traversée SecretRef : - - `src/secrets/exec-secret-ref-id-parity.test.ts` dérive une cible échantillonnée par classe SecretRef à partir des métadonnées du registre (`listSecretTargetRegistryEntries()`), puis vérifie que les identifiants exec de segments de traversée sont rejetés. - - Si vous ajoutez une nouvelle famille de cibles SecretRef `includeInPlan` dans `src/secrets/target-registry-data.ts`, mettez à jour `classifyTargetClass` dans ce test. Le test échoue intentionnellement sur les identifiants de cible non classifiés afin qu’aucune nouvelle classe ne puisse être ignorée silencieusement. +- Ajoutez si possible une régression sans risque pour la CI (fournisseur simulé/bouchonné, ou capture exacte de la transformation de forme de requête) +- Si le problème est intrinsèquement live uniquement (limites de débit, politiques d’authentification), gardez le test live étroit et opt-in via des variables d’environnement +- Préférez cibler la plus petite couche qui détecte le bug : + - bug de conversion/rejeu de requête fournisseur → test de modèles directs + - bug de pipeline Gateway session/historique/outils → smoke live Gateway ou test simulé Gateway sans risque pour la CI +- Garde-fou de parcours SecretRef : + - `src/secrets/exec-secret-ref-id-parity.test.ts` dérive une cible échantillonnée par classe SecretRef à partir des métadonnées du registre (`listSecretTargetRegistryEntries()`), puis vérifie que les ids exec de segment de parcours sont rejetés. + - Si vous ajoutez une nouvelle famille de cibles SecretRef `includeInPlan` dans `src/secrets/target-registry-data.ts`, mettez à jour `classifyTargetClass` dans ce test. Le test échoue volontairement sur les ids de cible non classifiés afin que les nouvelles classes ne puissent pas être ignorées silencieusement. diff --git a/docs/fr/providers/github-copilot.md b/docs/fr/providers/github-copilot.md index 4500ad3af..6eaf361c6 100644 --- a/docs/fr/providers/github-copilot.md +++ b/docs/fr/providers/github-copilot.md @@ -1,27 +1,27 @@ --- read_when: - - Vous voulez utiliser GitHub Copilot comme fournisseur de modèles - - Vous avez besoin du flux `openclaw models auth login-github-copilot` -summary: Connectez-vous à GitHub Copilot depuis OpenClaw à l’aide du flux d’appareil + - Vous souhaitez utiliser GitHub Copilot comme fournisseur de modèles + - Vous avez besoin du flux `openclaw models auth login-github-copilot`. +summary: Connectez-vous à GitHub Copilot depuis OpenClaw en utilisant le flux d’appareil title: GitHub Copilot x-i18n: - generated_at: "2026-04-12T23:30:51Z" + generated_at: "2026-04-15T14:40:31Z" model: gpt-5.4 provider: openai - source_hash: 51fee006e7d4e78e37b0c29356b0090b132de727d99b603441767d3fb642140b + source_hash: b8258fecff22fb73b057de878462941f6eb86d0c5f775c5eac4840e95ba5eccf source_path: providers/github-copilot.md workflow: 15 --- # GitHub Copilot -GitHub Copilot est l’assistant de codage IA de GitHub. Il donne accès aux modèles Copilot pour votre compte GitHub et votre forfait. OpenClaw peut utiliser Copilot comme fournisseur de modèles de deux façons différentes. +GitHub Copilot est l’assistant de programmation par IA de GitHub. Il fournit un accès aux modèles Copilot pour votre compte et votre forfait GitHub. OpenClaw peut utiliser Copilot comme fournisseur de modèles de deux façons différentes. ## Deux façons d’utiliser Copilot dans OpenClaw - Utilisez le flux natif de connexion par appareil pour obtenir un jeton GitHub, puis l’échanger contre des jetons d’API Copilot lorsque OpenClaw s’exécute. C’est le chemin **par défaut** et le plus simple, car il ne nécessite pas VS Code. + Utilisez le flux natif de connexion par appareil pour obtenir un jeton GitHub, puis l’échanger contre des jetons d’API Copilot lors de l’exécution d’OpenClaw. Il s’agit du chemin **par défaut** et du plus simple, car il ne nécessite pas VS Code. @@ -29,7 +29,7 @@ GitHub Copilot est l’assistant de codage IA de GitHub. Il donne accès aux mod openclaw models auth login-github-copilot ``` - Il vous sera demandé de visiter une URL et de saisir un code à usage unique. Gardez le terminal ouvert jusqu’à la fin du processus. + Il vous sera demandé de visiter une URL et de saisir un code à usage unique. Gardez le terminal ouvert jusqu’à la fin de l’opération. ```bash @@ -52,17 +52,17 @@ GitHub Copilot est l’assistant de codage IA de GitHub. Il donne accès aux mod Utilisez l’extension VS Code **Copilot Proxy** comme pont local. OpenClaw communique avec le point de terminaison `/v1` du proxy et utilise la liste de modèles que vous y configurez. - Choisissez cette option si vous utilisez déjà Copilot Proxy dans VS Code ou si vous devez passer par lui. Vous devez activer le Plugin et garder l’extension VS Code en cours d’exécution. + Choisissez cette option si vous utilisez déjà Copilot Proxy dans VS Code ou si vous devez passer par lui. Vous devez activer le Plugin et laisser l’extension VS Code en cours d’exécution. -## Drapeaux facultatifs +## Indicateurs facultatifs -| Drapeau | Description | -| ------------- | ---------------------------------------------------------- | -| `--yes` | Ignorer la demande de confirmation | +| Flag | Description | +| --------------- | --------------------------------------------------- | +| `--yes` | Ignorer l’invite de confirmation | | `--set-default` | Appliquer également le modèle par défaut recommandé du fournisseur | ```bash @@ -75,47 +75,87 @@ openclaw models auth login --provider github-copilot --method device --set-defau - Le flux de connexion par appareil nécessite un TTY interactif. Exécutez-le directement dans un terminal, pas dans un script non interactif ni dans un pipeline CI. + Le flux de connexion par appareil nécessite un TTY interactif. Exécutez-le directement dans un terminal, et non dans un script non interactif ou un pipeline CI. - La disponibilité des modèles Copilot dépend de votre forfait GitHub. Si un modèle est refusé, essayez un autre ID (par exemple `github-copilot/gpt-4.1`). + La disponibilité des modèles Copilot dépend de votre forfait GitHub. Si un modèle est refusé, essayez un autre identifiant (par exemple `github-copilot/gpt-4.1`). - Les ID de modèles Claude utilisent automatiquement le transport Anthropic Messages. Les modèles GPT, série o et Gemini conservent le transport OpenAI Responses. OpenClaw sélectionne le transport correct en fonction de la référence du modèle. + Les identifiants de modèles Claude utilisent automatiquement le transport Anthropic Messages. Les modèles GPT, de série o et Gemini conservent le transport OpenAI Responses. OpenClaw sélectionne le transport correct en fonction de la référence du modèle. - OpenClaw résout l’authentification Copilot à partir des variables d’environnement selon l’ordre de priorité suivant : + OpenClaw résout l’authentification Copilot à partir des variables d’environnement dans l’ordre de priorité suivant : - | Priorité | Variable | Remarques | - | -------- | ---------------------- | -------------------------------------- | + | Priority | Variable | Notes | + | -------- | --------------------- | -------------------------------- | | 1 | `COPILOT_GITHUB_TOKEN` | Priorité la plus élevée, spécifique à Copilot | - | 2 | `GH_TOKEN` | Jeton GitHub CLI (secours) | - | 3 | `GITHUB_TOKEN` | Jeton GitHub standard (priorité la plus basse) | + | 2 | `GH_TOKEN` | Jeton GitHub CLI (repli) | + | 3 | `GITHUB_TOKEN` | Jeton GitHub standard (priorité la plus basse) | Lorsque plusieurs variables sont définies, OpenClaw utilise celle ayant la priorité la plus élevée. - Le flux de connexion par appareil (`openclaw models auth login-github-copilot`) stocke son jeton dans le magasin de profils d’authentification et a priorité sur toutes les variables d’environnement. + Le flux de connexion par appareil (`openclaw models auth login-github-copilot`) stocke + son jeton dans le magasin de profils d’authentification et a priorité sur toutes les variables d’environnement. - La connexion stocke un jeton GitHub dans le magasin de profils d’authentification et l’échange contre un jeton d’API Copilot lorsque OpenClaw s’exécute. Vous n’avez pas besoin de gérer le jeton manuellement. + La connexion stocke un jeton GitHub dans le magasin de profils d’authentification et l’échange contre un jeton d’API Copilot lors de l’exécution d’OpenClaw. Vous n’avez pas besoin de gérer le jeton manuellement. -Nécessite un TTY interactif. Exécutez la commande de connexion directement dans un terminal, pas dans un script sans interface ni dans une tâche CI. +Nécessite un TTY interactif. Exécutez la commande de connexion directement dans un terminal, et non dans un script sans interface ou une tâche CI. -## Liens associés +## Intégrations de recherche en mémoire + +GitHub Copilot peut également servir de fournisseur d’intégrations pour la +[recherche en mémoire](/fr/concepts/memory-search). Si vous avez un abonnement Copilot et +vous êtes connecté, OpenClaw peut l’utiliser pour les intégrations sans clé d’API distincte. + +### Détection automatique + +Lorsque `memorySearch.provider` vaut `"auto"` (par défaut), GitHub Copilot est essayé +avec une priorité de 15 -- après les intégrations locales mais avant OpenAI et les autres fournisseurs payants. Si un jeton GitHub est disponible, OpenClaw découvre les modèles +d’intégration disponibles via l’API Copilot et sélectionne automatiquement le meilleur. + +### Configuration explicite + +```json5 +{ + agents: { + defaults: { + memorySearch: { + provider: "github-copilot", + // Facultatif : remplacer le modèle détecté automatiquement + model: "text-embedding-3-small", + }, + }, + }, +} +``` + +### Fonctionnement + +1. OpenClaw résout votre jeton GitHub (à partir des variables d’environnement ou du profil d’authentification). +2. L’échange contre un jeton d’API Copilot de courte durée. +3. Interroge le point de terminaison Copilot `/models` pour découvrir les modèles d’intégration disponibles. +4. Sélectionne le meilleur modèle (préfère `text-embedding-3-small`). +5. Envoie les requêtes d’intégration au point de terminaison Copilot `/embeddings`. + +La disponibilité des modèles dépend de votre forfait GitHub. Si aucun modèle d’intégration n’est +disponible, OpenClaw ignore Copilot et essaie le fournisseur suivant. + +## Associé Choisir les fournisseurs, les références de modèles et le comportement de basculement. - Détails d’authentification et règles de réutilisation des identifiants. + Détails sur l’authentification et règles de réutilisation des identifiants. diff --git a/docs/fr/providers/ollama.md b/docs/fr/providers/ollama.md index 89952a21a..6350bbc95 100644 --- a/docs/fr/providers/ollama.md +++ b/docs/fr/providers/ollama.md @@ -1,36 +1,36 @@ --- read_when: - - Vous souhaitez exécuter OpenClaw avec des modèles cloud ou locaux via Ollama - - Vous avez besoin d'instructions de configuration et de paramétrage pour Ollama + - Vous voulez exécuter OpenClaw avec des modèles cloud ou locaux via Ollama + - Vous avez besoin d’un guide de configuration et de paramétrage pour Ollama summary: Exécuter OpenClaw avec Ollama (modèles cloud et locaux) title: Ollama x-i18n: - generated_at: "2026-04-12T23:31:49Z" + generated_at: "2026-04-15T14:41:03Z" model: gpt-5.4 provider: openai - source_hash: ec796241b884ca16ec7077df4f3f1910e2850487bb3ea94f8fdb37c77e02b219 + source_hash: 098e083e0fc484bddb5270eb630c55d7832039b462d1710372b6afece5cefcdf source_path: providers/ollama.md workflow: 15 --- # Ollama -Ollama est un runtime LLM local qui facilite l'exécution de modèles open source sur votre machine. OpenClaw s'intègre à l'API native d'Ollama (`/api/chat`), prend en charge le streaming et l'appel d'outils, et peut découvrir automatiquement les modèles Ollama locaux lorsque vous activez cette option avec `OLLAMA_API_KEY` (ou un profil d'authentification) et que vous ne définissez pas d'entrée explicite `models.providers.ollama`. +OpenClaw s’intègre à l’API native d’Ollama (`/api/chat`) pour les modèles cloud hébergés et les serveurs Ollama locaux/autohébergés. Vous pouvez utiliser Ollama selon trois modes : `Cloud + Local` via un hôte Ollama accessible, `Cloud only` sur `https://ollama.com`, ou `Local only` via un hôte Ollama accessible. -**Utilisateurs d'Ollama distant** : n'utilisez pas l'URL compatible OpenAI `/v1` (`http://host:11434/v1`) avec OpenClaw. Cela casse l'appel d'outils et les modèles peuvent produire du JSON d'outil brut en texte brut. Utilisez plutôt l'URL de l'API native Ollama : `baseUrl: "http://host:11434"` (sans `/v1`). +**Utilisateurs d’Ollama à distance** : n’utilisez pas l’URL compatible OpenAI `/v1` (`http://host:11434/v1`) avec OpenClaw. Cela casse l’appel d’outils et les modèles peuvent produire du JSON d’outil brut sous forme de texte brut. Utilisez plutôt l’URL de l’API native d’Ollama : `baseUrl: "http://host:11434"` (sans `/v1`). -## Prise en main +## Premiers pas Choisissez votre méthode de configuration et votre mode préférés. - - **Idéal pour :** le chemin le plus rapide vers une configuration Ollama fonctionnelle avec découverte automatique des modèles. + + **Idéal pour :** le chemin le plus rapide vers une configuration Ollama cloud ou locale fonctionnelle. - + ```bash openclaw onboard ``` @@ -38,13 +38,12 @@ Choisissez votre méthode de configuration et votre mode préférés. Sélectionnez **Ollama** dans la liste des fournisseurs. - - **Cloud + Local** — modèles hébergés dans le cloud et modèles locaux ensemble - - **Local** — modèles locaux uniquement - - Si vous choisissez **Cloud + Local** et que vous n'êtes pas connecté à ollama.com, l'onboarding ouvre un flux de connexion dans le navigateur. + - **Cloud + Local** — hôte Ollama local plus modèles cloud routés via cet hôte + - **Cloud only** — modèles Ollama hébergés via `https://ollama.com` + - **Local only** — modèles locaux uniquement - L'onboarding découvre les modèles disponibles et suggère des valeurs par défaut. Il télécharge automatiquement le modèle sélectionné s'il n'est pas disponible localement. + `Cloud only` demande `OLLAMA_API_KEY` et suggère des valeurs par défaut cloud hébergées. `Cloud + Local` et `Local only` demandent une URL de base Ollama, découvrent les modèles disponibles et téléchargent automatiquement le modèle local sélectionné s’il n’est pas encore disponible. `Cloud + Local` vérifie aussi si cet hôte Ollama est connecté pour l’accès cloud. ```bash @@ -61,7 +60,7 @@ Choisissez votre méthode de configuration et votre mode préférés. --accept-risk ``` - Vous pouvez aussi spécifier une URL de base ou un modèle personnalisés : + Vous pouvez éventuellement indiquer une URL de base ou un modèle personnalisé : ```bash openclaw onboard --non-interactive \ @@ -74,13 +73,15 @@ Choisissez votre méthode de configuration et votre mode préférés. - **Idéal pour :** un contrôle total de l'installation, du téléchargement des modèles et de la configuration. + **Idéal pour :** un contrôle complet de la configuration cloud ou locale. - - Téléchargez-le depuis [ollama.com/download](https://ollama.com/download). + + - **Cloud + Local** : installez Ollama, connectez-vous avec `ollama signin` et acheminez les requêtes cloud via cet hôte + - **Cloud only** : utilisez `https://ollama.com` avec une `OLLAMA_API_KEY` + - **Local only** : installez Ollama depuis [ollama.com/download](https://ollama.com/download) - + ```bash ollama pull gemma4 # ou @@ -89,22 +90,18 @@ Choisissez votre méthode de configuration et votre mode préférés. ollama pull llama3.3 ``` - - Si vous souhaitez aussi les modèles cloud : - - ```bash - ollama signin - ``` - - Définissez n'importe quelle valeur pour la clé API (Ollama n'exige pas de vraie clé) : + Pour `Cloud only`, utilisez votre vraie `OLLAMA_API_KEY`. Pour les configurations reposant sur un hôte, n’importe quelle valeur fictive fonctionne : ```bash - # Définir la variable d'environnement + # Cloud + export OLLAMA_API_KEY="your-ollama-api-key" + + # Local-only export OLLAMA_API_KEY="ollama-local" # Ou configurer dans votre fichier de configuration - openclaw config set models.providers.ollama.apiKey "ollama-local" + openclaw config set models.providers.ollama.apiKey "OLLAMA_API_KEY" ``` @@ -134,38 +131,43 @@ Choisissez votre méthode de configuration et votre mode préférés. - Les modèles cloud vous permettent d'exécuter des modèles hébergés dans le cloud en parallèle de vos modèles locaux. Exemples : `kimi-k2.5:cloud`, `minimax-m2.7:cloud` et `glm-5.1:cloud` -- ceux-ci **n'exigent pas** de `ollama pull` local. + `Cloud + Local` utilise un hôte Ollama accessible comme point de contrôle pour les modèles locaux et cloud. Il s’agit du flux hybride recommandé par Ollama. - Sélectionnez le mode **Cloud + Local** pendant la configuration. L'assistant vérifie si vous êtes connecté et ouvre un flux de connexion dans le navigateur si nécessaire. Si l'authentification ne peut pas être vérifiée, l'assistant revient aux modèles locaux par défaut. + Utilisez **Cloud + Local** pendant la configuration. OpenClaw demande l’URL de base Ollama, découvre les modèles locaux sur cet hôte et vérifie si l’hôte est connecté pour l’accès cloud avec `ollama signin`. Lorsque l’hôte est connecté, OpenClaw suggère aussi des valeurs par défaut cloud hébergées comme `kimi-k2.5:cloud`, `minimax-m2.7:cloud` et `glm-5.1:cloud`. - Vous pouvez aussi vous connecter directement sur [ollama.com/signin](https://ollama.com/signin). - - OpenClaw suggère actuellement ces valeurs cloud par défaut : `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`. + Si l’hôte n’est pas encore connecté, OpenClaw conserve une configuration locale uniquement jusqu’à ce que vous exécutiez `ollama signin`. - - En mode local uniquement, OpenClaw découvre les modèles depuis l'instance Ollama locale. Aucune connexion cloud n'est nécessaire. + + `Cloud only` s’exécute sur l’API hébergée d’Ollama à l’adresse `https://ollama.com`. - OpenClaw suggère actuellement `gemma4` comme modèle local par défaut. + Utilisez **Cloud only** pendant la configuration. OpenClaw demande `OLLAMA_API_KEY`, définit `baseUrl: "https://ollama.com"` et initialise la liste des modèles cloud hébergés. Ce chemin **n’exige pas** de serveur Ollama local ni `ollama signin`. + + + + + En mode local uniquement, OpenClaw découvre les modèles à partir de l’instance Ollama configurée. Ce chemin est destiné aux serveurs Ollama locaux ou autohébergés. + + OpenClaw suggère actuellement `gemma4` comme valeur locale par défaut. -## Découverte de modèles (fournisseur implicite) +## Découverte des modèles (fournisseur implicite) -Lorsque vous définissez `OLLAMA_API_KEY` (ou un profil d'authentification) et que vous **ne** définissez **pas** `models.providers.ollama`, OpenClaw découvre les modèles depuis l'instance Ollama locale à l'adresse `http://127.0.0.1:11434`. +Lorsque vous définissez `OLLAMA_API_KEY` (ou un profil d’authentification) et que vous **ne définissez pas** `models.providers.ollama`, OpenClaw découvre les modèles à partir de l’instance Ollama locale à l’adresse `http://127.0.0.1:11434`. -| Comportement | Détail | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Requête de catalogue | Interroge `/api/tags` | -| Détection des capacités | Utilise des consultations `/api/show` au mieux pour lire `contextWindow` et détecter les capacités (y compris la vision) | -| Modèles de vision | Les modèles avec une capacité `vision` signalée par `/api/show` sont marqués comme compatibles image (`input: ["text", "image"]`), OpenClaw injecte donc automatiquement les images dans l'invite | -| Détection du raisonnement | Marque `reasoning` avec une heuristique sur le nom du modèle (`r1`, `reasoning`, `think`) | -| Limites de jetons | Définit `maxTokens` sur la limite maximale de jetons Ollama par défaut utilisée par OpenClaw | -| Coûts | Définit tous les coûts sur `0` | +| Comportement | Détail | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Requête du catalogue | Interroge `/api/tags` | +| Détection des capacités | Utilise des recherches `/api/show` au mieux pour lire `contextWindow` et détecter les capacités (y compris la vision) | +| Modèles avec vision | Les modèles avec une capacité `vision` signalée par `/api/show` sont marqués comme compatibles image (`input: ["text", "image"]`), afin qu’OpenClaw injecte automatiquement les images dans le prompt | +| Détection du raisonnement | Marque `reasoning` avec une heuristique basée sur le nom du modèle (`r1`, `reasoning`, `think`) | +| Limites de jetons | Définit `maxTokens` sur la limite maximale de jetons Ollama par défaut utilisée par OpenClaw | +| Coûts | Définit tous les coûts à `0` | -Cela évite les entrées de modèle manuelles tout en gardant le catalogue aligné avec l'instance Ollama locale. +Cela évite les entrées de modèle manuelles tout en gardant le catalogue aligné sur l’instance Ollama locale. ```bash # Voir quels modèles sont disponibles @@ -173,54 +175,54 @@ ollama list openclaw models list ``` -Pour ajouter un nouveau modèle, téléchargez-le simplement avec Ollama : +Pour ajouter un nouveau modèle, il suffit de le télécharger avec Ollama : ```bash ollama pull mistral ``` -Le nouveau modèle sera automatiquement découvert et disponible à l'utilisation. +Le nouveau modèle sera automatiquement découvert et disponible à l’utilisation. -Si vous définissez explicitement `models.providers.ollama`, la découverte automatique est ignorée et vous devez définir les modèles manuellement. Consultez la section de configuration explicite ci-dessous. +Si vous définissez explicitement `models.providers.ollama`, la découverte automatique est ignorée et vous devez définir les modèles manuellement. Voir la section de configuration explicite ci-dessous. ## Configuration - Le moyen le plus simple d'activer Ollama est via une variable d'environnement : + Le chemin le plus simple pour activer le mode local uniquement passe par une variable d’environnement : ```bash export OLLAMA_API_KEY="ollama-local" ``` - Si `OLLAMA_API_KEY` est défini, vous pouvez omettre `apiKey` dans l'entrée du fournisseur et OpenClaw le renseignera pour les vérifications de disponibilité. + Si `OLLAMA_API_KEY` est défini, vous pouvez omettre `apiKey` dans l’entrée du fournisseur et OpenClaw le renseignera pour les vérifications de disponibilité. - Utilisez une configuration explicite lorsque Ollama s'exécute sur un autre hôte/port, que vous souhaitez forcer des fenêtres de contexte ou des listes de modèles spécifiques, ou que vous voulez des définitions de modèles entièrement manuelles. + Utilisez une configuration explicite si vous voulez une configuration cloud hébergée, si Ollama s’exécute sur un autre hôte/port, si vous voulez forcer des fenêtres de contexte ou des listes de modèles spécifiques, ou si vous voulez des définitions de modèles entièrement manuelles. ```json5 { models: { providers: { ollama: { - baseUrl: "http://ollama-host:11434", - apiKey: "ollama-local", + baseUrl: "https://ollama.com", + apiKey: "OLLAMA_API_KEY", api: "ollama", models: [ { - id: "gpt-oss:20b", - name: "GPT-OSS 20B", + id: "kimi-k2.5:cloud", + name: "kimi-k2.5:cloud", reasoning: false, - input: ["text"], + input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, - contextWindow: 8192, - maxTokens: 8192 * 10 + contextWindow: 128000, + maxTokens: 8192 } ] } @@ -232,7 +234,7 @@ Si vous définissez explicitement `models.providers.ollama`, la découverte auto - Si Ollama s'exécute sur un autre hôte ou port (la configuration explicite désactive la découverte automatique, définissez donc les modèles manuellement) : + Si Ollama s’exécute sur un autre hôte ou port (la configuration explicite désactive la découverte automatique, définissez donc les modèles manuellement) : ```json5 { @@ -240,8 +242,8 @@ Si vous définissez explicitement `models.providers.ollama`, la découverte auto providers: { ollama: { apiKey: "ollama-local", - baseUrl: "http://ollama-host:11434", // Pas de /v1 - utilisez l'URL de l'API native Ollama - api: "ollama", // Définissez-le explicitement pour garantir le comportement natif d'appel d'outils + baseUrl: "http://ollama-host:11434", // Pas de /v1 - utilisez l’URL de l’API native Ollama + api: "ollama", // Définissez-la explicitement pour garantir le comportement natif d’appel d’outils }, }, }, @@ -249,7 +251,7 @@ Si vous définissez explicitement `models.providers.ollama`, la découverte auto ``` - N'ajoutez pas `/v1` à l'URL. Le chemin `/v1` utilise le mode compatible OpenAI, où l'appel d'outils n'est pas fiable. Utilisez l'URL de base Ollama sans suffixe de chemin. + N’ajoutez pas `/v1` à l’URL. Le chemin `/v1` utilise le mode compatible OpenAI, dans lequel l’appel d’outils n’est pas fiable. Utilisez l’URL de base Ollama sans suffixe de chemin. @@ -276,11 +278,11 @@ Une fois configurés, tous vos modèles Ollama sont disponibles : OpenClaw prend en charge **Ollama Web Search** comme fournisseur `web_search` intégré. -| Propriété | Détail | +| Propriété | Détail | | ----------- | ----------------------------------------------------------------------------------------------------------------- | -| Hôte | Utilise votre hôte Ollama configuré (`models.providers.ollama.baseUrl` lorsqu'il est défini, sinon `http://127.0.0.1:11434`) | -| Authentification | Sans clé | -| Condition requise | Ollama doit être en cours d'exécution et connecté avec `ollama signin` | +| Hôte | Utilise votre hôte Ollama configuré (`models.providers.ollama.baseUrl` lorsqu’il est défini, sinon `http://127.0.0.1:11434`) | +| Authentification | Sans clé | +| Condition requise | Ollama doit être en cours d’exécution et connecté avec `ollama signin` | Choisissez **Ollama Web Search** pendant `openclaw onboard` ou `openclaw configure --section web`, ou définissez : @@ -297,7 +299,7 @@ Choisissez **Ollama Web Search** pendant `openclaw onboard` ou `openclaw configu ``` -Pour la configuration complète et les détails de comportement, consultez [Ollama Web Search](/fr/tools/ollama-search). +Pour tous les détails de configuration et de comportement, voir [Ollama Web Search](/fr/tools/ollama-search). ## Configuration avancée @@ -305,7 +307,7 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - **L'appel d'outils n'est pas fiable en mode compatible OpenAI.** Utilisez ce mode uniquement si vous avez besoin du format OpenAI pour un proxy et que vous ne dépendez pas du comportement natif d'appel d'outils. + **L’appel d’outils n’est pas fiable en mode compatible OpenAI.** Utilisez ce mode uniquement si vous avez besoin du format OpenAI pour un proxy et que vous ne dépendez pas du comportement natif d’appel d’outils. Si vous devez utiliser à la place le point de terminaison compatible OpenAI (par exemple derrière un proxy qui ne prend en charge que le format OpenAI), définissez explicitement `api: "openai-completions"` : @@ -326,9 +328,9 @@ Pour la configuration complète et les détails de comportement, consultez [Olla } ``` - Ce mode peut ne pas prendre en charge simultanément le streaming et l'appel d'outils. Vous devrez peut-être désactiver le streaming avec `params: { streaming: false }` dans la configuration du modèle. + Ce mode peut ne pas prendre en charge simultanément le streaming et l’appel d’outils. Vous devrez peut-être désactiver le streaming avec `params: { streaming: false }` dans la configuration du modèle. - Lorsque `api: "openai-completions"` est utilisé avec Ollama, OpenClaw injecte `options.num_ctx` par défaut afin qu'Ollama ne revienne pas silencieusement à une fenêtre de contexte de 4096. Si votre proxy/upstream rejette les champs `options` inconnus, désactivez ce comportement : + Lorsque `api: "openai-completions"` est utilisé avec Ollama, OpenClaw injecte `options.num_ctx` par défaut afin qu’Ollama ne revienne pas silencieusement à une fenêtre de contexte de 4096. Si votre proxy/amont rejette les champs `options` inconnus, désactivez ce comportement : ```json5 { @@ -349,7 +351,7 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - Pour les modèles découverts automatiquement, OpenClaw utilise la fenêtre de contexte signalée par Ollama lorsqu'elle est disponible ; sinon, il revient à la fenêtre de contexte Ollama par défaut utilisée par OpenClaw. + Pour les modèles découverts automatiquement, OpenClaw utilise la fenêtre de contexte signalée par Ollama lorsqu’elle est disponible ; sinon, il revient à la fenêtre de contexte Ollama par défaut utilisée par OpenClaw. Vous pouvez remplacer `contextWindow` et `maxTokens` dans la configuration explicite du fournisseur : @@ -374,31 +376,31 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - OpenClaw traite par défaut comme compatibles avec le raisonnement les modèles dont le nom contient `deepseek-r1`, `reasoning` ou `think`. + OpenClaw considère par défaut que les modèles portant des noms comme `deepseek-r1`, `reasoning` ou `think` sont capables de raisonnement. ```bash ollama pull deepseek-r1:32b ``` - Aucune configuration supplémentaire n'est nécessaire -- OpenClaw les marque automatiquement. + Aucune configuration supplémentaire n’est nécessaire -- OpenClaw les marque automatiquement. - Ollama est gratuit et s'exécute en local, donc tous les coûts de modèle sont définis à $0. Cela s'applique aussi bien aux modèles découverts automatiquement qu'aux modèles définis manuellement. + Ollama est gratuit et s’exécute localement, donc tous les coûts des modèles sont définis à 0 $. Cela s’applique aussi bien aux modèles découverts automatiquement qu’aux modèles définis manuellement. - Le Plugin Ollama intégré enregistre un fournisseur d'embeddings de mémoire pour - la [recherche mémoire](/fr/concepts/memory). Il utilise l'URL de base Ollama + Le Plugin Ollama intégré enregistre un fournisseur d’embeddings de mémoire pour la + [recherche en mémoire](/fr/concepts/memory). Il utilise l’URL de base Ollama et la clé API configurées. - | Propriété | Valeur | + | Property | Value | | ------------- | ------------------- | | Modèle par défaut | `nomic-embed-text` | - | Téléchargement automatique | Oui — le modèle d'embedding est téléchargé automatiquement s'il n'est pas présent localement | + | Téléchargement automatique | Oui — le modèle d’embedding est téléchargé automatiquement s’il n’est pas présent localement | - Pour sélectionner Ollama comme fournisseur d'embeddings pour la recherche mémoire : + Pour sélectionner Ollama comme fournisseur d’embeddings pour la recherche en mémoire : ```json5 { @@ -413,10 +415,10 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - L'intégration Ollama d'OpenClaw utilise par défaut l'**API native Ollama** (`/api/chat`), qui prend entièrement en charge simultanément le streaming et l'appel d'outils. Aucune configuration particulière n'est nécessaire. + L’intégration Ollama d’OpenClaw utilise par défaut l’**API native d’Ollama** (`/api/chat`), qui prend entièrement en charge simultanément le streaming et l’appel d’outils. Aucune configuration particulière n’est nécessaire. - Si vous devez utiliser le point de terminaison compatible OpenAI, consultez la section « Mode hérité compatible OpenAI » ci-dessus. Le streaming et l'appel d'outils peuvent ne pas fonctionner simultanément dans ce mode. + Si vous devez utiliser le point de terminaison compatible OpenAI, consultez la section « Mode hérité compatible OpenAI » ci-dessus. Le streaming et l’appel d’outils peuvent ne pas fonctionner simultanément dans ce mode. @@ -426,13 +428,13 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - Assurez-vous qu'Ollama est en cours d'exécution, que vous avez défini `OLLAMA_API_KEY` (ou un profil d'authentification), et que vous n'avez **pas** défini d'entrée explicite `models.providers.ollama` : + Assurez-vous qu’Ollama est en cours d’exécution, que vous avez défini `OLLAMA_API_KEY` (ou un profil d’authentification), et que vous **n’avez pas** défini d’entrée `models.providers.ollama` explicite : ```bash ollama serve ``` - Vérifiez que l'API est accessible : + Vérifiez que l’API est accessible : ```bash curl http://localhost:11434/api/tags @@ -441,7 +443,7 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - Si votre modèle n'est pas listé, téléchargez-le localement ou définissez-le explicitement dans `models.providers.ollama`. + Si votre modèle n’apparaît pas dans la liste, téléchargez-le localement ou définissez-le explicitement dans `models.providers.ollama`. ```bash ollama list # Voir ce qui est installé @@ -453,10 +455,10 @@ Pour la configuration complète et les détails de comportement, consultez [Olla - Vérifiez qu'Ollama fonctionne sur le bon port : + Vérifiez qu’Ollama s’exécute sur le bon port : ```bash - # Vérifier si Ollama est en cours d'exécution + # Vérifier si Ollama est en cours d’exécution ps aux | grep ollama # Ou redémarrer Ollama @@ -467,20 +469,20 @@ Pour la configuration complète et les détails de comportement, consultez [Olla -Aide supplémentaire : [Dépannage](/fr/help/troubleshooting) et [FAQ](/fr/help/faq). +Plus d’aide : [Dépannage](/fr/help/troubleshooting) et [FAQ](/fr/help/faq). -## Voir aussi +## En lien - Vue d'ensemble de tous les fournisseurs, des références de modèles et du comportement de basculement. + Vue d’ensemble de tous les fournisseurs, des références de modèles et du comportement de basculement. Comment choisir et configurer les modèles. - Configuration complète et détails de comportement pour la recherche web alimentée par Ollama. + Détails complets de configuration et de comportement pour la recherche web alimentée par Ollama. Référence complète de configuration. diff --git a/docs/fr/reference/memory-config.md b/docs/fr/reference/memory-config.md index 80a3ab42a..95b3ed426 100644 --- a/docs/fr/reference/memory-config.md +++ b/docs/fr/reference/memory-config.md @@ -1,96 +1,92 @@ --- read_when: - - Vous souhaitez configurer des fournisseurs de recherche mémoire ou des modèles d’embeddings + - Vous souhaitez configurer les fournisseurs de recherche en mémoire ou les modèles d’intégration - Vous souhaitez configurer le backend QMD - - Vous souhaitez ajuster la recherche hybride, MMR ou la décroissance temporelle - - Vous souhaitez activer l’indexation mémoire multimodale -summary: Tous les réglages de configuration pour la recherche mémoire, les fournisseurs d’embeddings, QMD, la recherche hybride et l’indexation multimodale + - Vous souhaitez ajuster la recherche hybride, le MMR ou la décroissance temporelle + - Vous souhaitez activer l’indexation de mémoire multimodale +summary: Tous les paramètres de configuration pour la recherche en mémoire, les fournisseurs d’intégrations, QMD, la recherche hybride et l’indexation multimodale title: Référence de configuration de la mémoire x-i18n: - generated_at: "2026-04-12T23:33:24Z" + generated_at: "2026-04-15T14:40:55Z" model: gpt-5.4 provider: openai - source_hash: 299ca9b69eea292ea557a2841232c637f5c1daf2bc0f73c0a42f7c0d8d566ce2 + source_hash: 334c3c4dac08e864487047d3822c75f96e9e7a97c38be4b4e0cd9e63c4489a53 source_path: reference/memory-config.md workflow: 15 --- # Référence de configuration de la mémoire -Cette page liste tous les réglages de configuration pour la recherche mémoire d’OpenClaw. Pour -les vues d’ensemble conceptuelles, voir : +Cette page répertorie tous les paramètres de configuration de la recherche en mémoire d’OpenClaw. Pour des vues d’ensemble conceptuelles, voir : -- [Memory Overview](/fr/concepts/memory) -- comment fonctionne la mémoire -- [Builtin Engine](/fr/concepts/memory-builtin) -- backend SQLite par défaut -- [QMD Engine](/fr/concepts/memory-qmd) -- sidecar local-first -- [Memory Search](/fr/concepts/memory-search) -- pipeline de recherche et réglages -- [Active Memory](/fr/concepts/active-memory) -- activation du sous-agent mémoire pour les sessions interactives +- [Vue d’ensemble de la mémoire](/fr/concepts/memory) -- fonctionnement de la mémoire +- [Moteur intégré](/fr/concepts/memory-builtin) -- backend SQLite par défaut +- [Moteur QMD](/fr/concepts/memory-qmd) -- sidecar local-first +- [Recherche en mémoire](/fr/concepts/memory-search) -- pipeline de recherche et réglage +- [Active Memory](/fr/concepts/active-memory) -- activation du sous-agent de mémoire pour les sessions interactives -Tous les paramètres de recherche mémoire se trouvent sous `agents.defaults.memorySearch` dans -`openclaw.json`, sauf indication contraire. +Tous les paramètres de recherche en mémoire se trouvent sous `agents.defaults.memorySearch` dans `openclaw.json`, sauf indication contraire. -Si vous recherchez le bouton de fonctionnalité **Active Memory** et la configuration du sous-agent, -cela se trouve sous `plugins.entries.active-memory` plutôt que sous `memorySearch`. +Si vous recherchez le bouton de fonctionnalité **Active Memory** et la configuration du sous-agent, ils se trouvent sous `plugins.entries.active-memory` plutôt que sous `memorySearch`. -Active Memory utilise un modèle à deux conditions : +Active Memory utilise un modèle à deux conditions : -1. le plugin doit être activé et cibler l’id d’agent actuel -2. la requête doit être une session de chat persistante interactive admissible +1. le Plugin doit être activé et cibler l’identifiant d’agent actuel +2. la requête doit correspondre à une session de chat persistante interactive admissible -Voir [Active Memory](/fr/concepts/active-memory) pour le modèle d’activation, -la configuration gérée par le Plugin, la persistance des transcriptions et le modèle de déploiement sécurisé. +Voir [Active Memory](/fr/concepts/active-memory) pour le modèle d’activation, la configuration détenue par le Plugin, la persistance des transcriptions et le modèle de déploiement sûr. --- ## Sélection du fournisseur -| Clé | Type | Par défaut | Description | -| ---------- | --------- | ---------------- | ------------------------------------------------------------------------------------------- | -| `provider` | `string` | détection automatique | ID d’adaptateur d’embeddings : `openai`, `gemini`, `voyage`, `mistral`, `bedrock`, `ollama`, `local` | -| `model` | `string` | valeur par défaut du fournisseur | Nom du modèle d’embeddings | -| `fallback` | `string` | `"none"` | ID d’adaptateur de repli lorsque le principal échoue | -| `enabled` | `boolean` | `true` | Activer ou désactiver la recherche mémoire | +| Key | Type | Default | Description | +| ---------- | --------- | ---------------- | ------------------------------------------------------------------------------------------------------------- | +| `provider` | `string` | détecté automatiquement | ID de l’adaptateur d’intégration : `bedrock`, `gemini`, `github-copilot`, `local`, `mistral`, `ollama`, `openai`, `voyage` | +| `model` | `string` | valeur par défaut du fournisseur | Nom du modèle d’intégration | +| `fallback` | `string` | `"none"` | ID de l’adaptateur de secours en cas d’échec du principal | +| `enabled` | `boolean` | `true` | Activer ou désactiver la recherche en mémoire | ### Ordre de détection automatique -Lorsque `provider` n’est pas défini, OpenClaw sélectionne le premier disponible : +Lorsque `provider` n’est pas défini, OpenClaw sélectionne le premier disponible : 1. `local` -- si `memorySearch.local.modelPath` est configuré et que le fichier existe. -2. `openai` -- si une clé OpenAI peut être résolue. -3. `gemini` -- si une clé Gemini peut être résolue. -4. `voyage` -- si une clé Voyage peut être résolue. -5. `mistral` -- si une clé Mistral peut être résolue. -6. `bedrock` -- si la chaîne d’identifiants AWS SDK peut être résolue (rôle d’instance, clés d’accès, profil, SSO, identité web ou configuration partagée). +2. `github-copilot` -- si un jeton GitHub Copilot peut être résolu (variable d’environnement ou profil d’authentification). +3. `openai` -- si une clé OpenAI peut être résolue. +4. `gemini` -- si une clé Gemini peut être résolue. +5. `voyage` -- si une clé Voyage peut être résolue. +6. `mistral` -- si une clé Mistral peut être résolue. +7. `bedrock` -- si la chaîne d’identifiants AWS SDK est résolue (rôle d’instance, clés d’accès, profil, SSO, identité web ou configuration partagée). -`ollama` est pris en charge mais n’est pas détecté automatiquement (définissez-le explicitement). +`ollama` est pris en charge, mais n’est pas détecté automatiquement (définissez-le explicitement). -### Résolution des clés API +### Résolution des clés d’API -Les embeddings distants nécessitent une clé API. Bedrock utilise à la place la -chaîne d’identifiants par défaut AWS SDK (rôles d’instance, SSO, clés d’accès). +Les intégrations distantes nécessitent une clé d’API. Bedrock utilise à la place la chaîne d’identifiants par défaut de l’AWS SDK (rôles d’instance, SSO, clés d’accès). -| Fournisseur | Variable d’environnement | Clé de configuration | -| ----------- | ----------------------------- | ---------------------------------- | -| OpenAI | `OPENAI_API_KEY` | `models.providers.openai.apiKey` | -| Gemini | `GEMINI_API_KEY` | `models.providers.google.apiKey` | -| Voyage | `VOYAGE_API_KEY` | `models.providers.voyage.apiKey` | -| Mistral | `MISTRAL_API_KEY` | `models.providers.mistral.apiKey` | -| Bedrock | chaîne d’identifiants AWS | Aucune clé API nécessaire | -| Ollama | `OLLAMA_API_KEY` (espace réservé) | -- | +| Provider | Env var | Config key | +| -------------- | -------------------------------------------------- | --------------------------------- | +| Bedrock | chaîne d’identifiants AWS | Aucune clé d’API requise | +| Gemini | `GEMINI_API_KEY` | `models.providers.google.apiKey` | +| GitHub Copilot | `COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, `GITHUB_TOKEN` | Profil d’authentification via connexion par appareil | +| Mistral | `MISTRAL_API_KEY` | `models.providers.mistral.apiKey` | +| Ollama | `OLLAMA_API_KEY` (espace réservé) | -- | +| OpenAI | `OPENAI_API_KEY` | `models.providers.openai.apiKey` | +| Voyage | `VOYAGE_API_KEY` | `models.providers.voyage.apiKey` | -Codex OAuth couvre uniquement le chat/les complétions et ne satisfait pas les -requêtes d’embeddings. +L’authentification OAuth Codex couvre uniquement le chat/les complétions et ne satisfait pas les requêtes d’intégration. --- -## Configuration du point de terminaison distant +## Configuration des points de terminaison distants -Pour des points de terminaison compatibles OpenAI personnalisés ou pour remplacer les valeurs par défaut du fournisseur : +Pour les points de terminaison personnalisés compatibles OpenAI ou le remplacement des valeurs par défaut du fournisseur : -| Clé | Type | Description | -| ---------------- | -------- | ------------------------------------------------ | -| `remote.baseUrl` | `string` | URL de base API personnalisée | -| `remote.apiKey` | `string` | Remplacer la clé API | +| Key | Type | Description | +| ---------------- | -------- | -------------------------------------------------- | +| `remote.baseUrl` | `string` | URL de base d’API personnalisée | +| `remote.apiKey` | `string` | Remplacer la clé d’API | | `remote.headers` | `object` | En-têtes HTTP supplémentaires (fusionnés avec les valeurs par défaut du fournisseur) | ```json5 @@ -114,22 +110,21 @@ Pour des points de terminaison compatibles OpenAI personnalisés ou pour remplac ## Configuration spécifique à Gemini -| Clé | Type | Par défaut | Description | +| Key | Type | Default | Description | | ---------------------- | -------- | ---------------------- | ------------------------------------------ | -| `model` | `string` | `gemini-embedding-001` | Prend aussi en charge `gemini-embedding-2-preview` | -| `outputDimensionality` | `number` | `3072` | Pour Embedding 2 : 768, 1536 ou 3072 | +| `model` | `string` | `gemini-embedding-001` | Prend également en charge `gemini-embedding-2-preview` | +| `outputDimensionality` | `number` | `3072` | Pour Embedding 2 : 768, 1536 ou 3072 | -Modifier le modèle ou `outputDimensionality` déclenche une réindexation complète automatique. +La modification du modèle ou de `outputDimensionality` déclenche une réindexation complète automatique. --- -## Configuration des embeddings Bedrock +## Configuration des intégrations Bedrock -Bedrock utilise la chaîne d’identifiants par défaut AWS SDK -- aucune clé API n’est nécessaire. -Si OpenClaw s’exécute sur EC2 avec un rôle d’instance activé pour Bedrock, définissez simplement le -fournisseur et le modèle : +Bedrock utilise la chaîne d’identifiants par défaut de l’AWS SDK -- aucune clé d’API requise. +Si OpenClaw s’exécute sur EC2 avec un rôle d’instance activé pour Bedrock, définissez simplement le fournisseur et le modèle : ```json5 { @@ -144,48 +139,45 @@ fournisseur et le modèle : } ``` -| Clé | Type | Par défaut | Description | -| ---------------------- | -------- | ------------------------------ | ------------------------------------ | -| `model` | `string` | `amazon.titan-embed-text-v2:0` | Tout ID de modèle d’embeddings Bedrock | -| `outputDimensionality` | `number` | valeur par défaut du modèle | Pour Titan V2 : 256, 512 ou 1024 | +| Key | Type | Default | Description | +| ---------------------- | -------- | ------------------------------ | ------------------------------- | +| `model` | `string` | `amazon.titan-embed-text-v2:0` | Tout ID de modèle d’intégration Bedrock | +| `outputDimensionality` | `number` | valeur par défaut du modèle | Pour Titan V2 : 256, 512 ou 1024 | ### Modèles pris en charge -Les modèles suivants sont pris en charge (avec détection de famille et dimensions -par défaut) : +Les modèles suivants sont pris en charge (avec détection de famille et dimensions par défaut) : -| ID du modèle | Fournisseur | Dimensions par défaut | Dimensions configurables | -| ------------------------------------------ | ----------- | --------------------- | ------------------------ | -| `amazon.titan-embed-text-v2:0` | Amazon | 1024 | 256, 512, 1024 | -| `amazon.titan-embed-text-v1` | Amazon | 1536 | -- | -| `amazon.titan-embed-g1-text-02` | Amazon | 1536 | -- | -| `amazon.titan-embed-image-v1` | Amazon | 1024 | -- | -| `amazon.nova-2-multimodal-embeddings-v1:0` | Amazon | 1024 | 256, 384, 1024, 3072 | -| `cohere.embed-english-v3` | Cohere | 1024 | -- | -| `cohere.embed-multilingual-v3` | Cohere | 1024 | -- | -| `cohere.embed-v4:0` | Cohere | 1536 | 256-1536 | -| `twelvelabs.marengo-embed-3-0-v1:0` | TwelveLabs | 512 | -- | -| `twelvelabs.marengo-embed-2-7-v1:0` | TwelveLabs | 1024 | -- | +| Model ID | Provider | Default Dims | Configurable Dims | +| ------------------------------------------ | ---------- | ------------ | -------------------- | +| `amazon.titan-embed-text-v2:0` | Amazon | 1024 | 256, 512, 1024 | +| `amazon.titan-embed-text-v1` | Amazon | 1536 | -- | +| `amazon.titan-embed-g1-text-02` | Amazon | 1536 | -- | +| `amazon.titan-embed-image-v1` | Amazon | 1024 | -- | +| `amazon.nova-2-multimodal-embeddings-v1:0` | Amazon | 1024 | 256, 384, 1024, 3072 | +| `cohere.embed-english-v3` | Cohere | 1024 | -- | +| `cohere.embed-multilingual-v3` | Cohere | 1024 | -- | +| `cohere.embed-v4:0` | Cohere | 1536 | 256-1536 | +| `twelvelabs.marengo-embed-3-0-v1:0` | TwelveLabs | 512 | -- | +| `twelvelabs.marengo-embed-2-7-v1:0` | TwelveLabs | 1024 | -- | -Les variantes suffixées par débit (par exemple `amazon.titan-embed-text-v1:2:8k`) héritent -de la configuration du modèle de base. +Les variantes suffixées par débit (par exemple `amazon.titan-embed-text-v1:2:8k`) héritent de la configuration du modèle de base. -### Auth +### Authentification -L’auth Bedrock utilise l’ordre standard de résolution des identifiants AWS SDK : +L’authentification Bedrock utilise l’ordre standard de résolution des identifiants de l’AWS SDK : 1. Variables d’environnement (`AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`) 2. Cache de jetons SSO -3. Identifiants par jeton d’identité web +3. Identifiants de jeton d’identité web 4. Fichiers partagés d’identifiants et de configuration 5. Identifiants de métadonnées ECS ou EC2 -La région est résolue à partir de `AWS_REGION`, `AWS_DEFAULT_REGION`, du -`baseUrl` du fournisseur `amazon-bedrock`, ou utilise par défaut `us-east-1`. +La région est résolue à partir de `AWS_REGION`, `AWS_DEFAULT_REGION`, du `baseUrl` du fournisseur `amazon-bedrock`, ou prend par défaut `us-east-1`. -### Permissions IAM +### Autorisations IAM -Le rôle ou l’utilisateur IAM doit disposer de : +Le rôle ou l’utilisateur IAM doit disposer de : ```json { @@ -195,7 +187,7 @@ Le rôle ou l’utilisateur IAM doit disposer de : } ``` -Pour le moindre privilège, limitez `InvokeModel` au modèle spécifique : +Pour le principe du moindre privilège, limitez `InvokeModel` au modèle spécifique : ``` arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0 @@ -203,44 +195,44 @@ arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0 --- -## Configuration des embeddings locaux +## Configuration des intégrations locales -| Clé | Type | Par défaut | Description | -| --------------------- | -------- | ---------------------- | ------------------------------------ | -| `local.modelPath` | `string` | téléchargé automatiquement | Chemin vers le fichier de modèle GGUF | -| `local.modelCacheDir` | `string` | valeur par défaut node-llama-cpp | Répertoire de cache pour les modèles téléchargés | +| Key | Type | Default | Description | +| --------------------- | -------- | ---------------------- | ------------------------------- | +| `local.modelPath` | `string` | téléchargé automatiquement | Chemin vers le fichier de modèle GGUF | +| `local.modelCacheDir` | `string` | valeur par défaut de node-llama-cpp | Répertoire de cache pour les modèles téléchargés | -Modèle par défaut : `embeddinggemma-300m-qat-Q8_0.gguf` (~0,6 Go, téléchargé automatiquement). -Nécessite une build native : `pnpm approve-builds` puis `pnpm rebuild node-llama-cpp`. +Modèle par défaut : `embeddinggemma-300m-qat-Q8_0.gguf` (~0,6 Go, téléchargé automatiquement). +Nécessite une build native : `pnpm approve-builds` puis `pnpm rebuild node-llama-cpp`. --- ## Configuration de la recherche hybride -Tous sous `memorySearch.query.hybrid` : +Tout se trouve sous `memorySearch.query.hybrid` : -| Clé | Type | Par défaut | Description | -| --------------------- | --------- | ---------- | ---------------------------------------- | -| `enabled` | `boolean` | `true` | Activer la recherche hybride BM25 + vecteur | -| `vectorWeight` | `number` | `0.7` | Poids des scores vectoriels (0-1) | -| `textWeight` | `number` | `0.3` | Poids des scores BM25 (0-1) | -| `candidateMultiplier` | `number` | `4` | Multiplicateur de taille du vivier de candidats | +| Key | Type | Default | Description | +| --------------------- | --------- | ------- | ---------------------------------- | +| `enabled` | `boolean` | `true` | Activer la recherche hybride BM25 + vectorielle | +| `vectorWeight` | `number` | `0.7` | Poids des scores vectoriels (0-1) | +| `textWeight` | `number` | `0.3` | Poids des scores BM25 (0-1) | +| `candidateMultiplier` | `number` | `4` | Multiplicateur de taille du groupe de candidats | ### MMR (diversité) -| Clé | Type | Par défaut | Description | -| ------------- | --------- | ---------- | -------------------------------------------- | -| `mmr.enabled` | `boolean` | `false` | Activer le reclassement MMR | -| `mmr.lambda` | `number` | `0.7` | 0 = diversité maximale, 1 = pertinence maximale | +| Key | Type | Default | Description | +| ------------- | --------- | ------- | ------------------------------------ | +| `mmr.enabled` | `boolean` | `false` | Activer le reranking MMR | +| `mmr.lambda` | `number` | `0.7` | 0 = diversité maximale, 1 = pertinence maximale | ### Décroissance temporelle (récence) -| Clé | Type | Par défaut | Description | -| ---------------------------- | --------- | ---------- | ------------------------------------ | -| `temporalDecay.enabled` | `boolean` | `false` | Activer le boost de récence | -| `temporalDecay.halfLifeDays` | `number` | `30` | Le score est divisé par deux tous les N jours | +| Key | Type | Default | Description | +| ---------------------------- | --------- | ------- | ------------------------- | +| `temporalDecay.enabled` | `boolean` | `false` | Activer le boost de récence | +| `temporalDecay.halfLifeDays` | `number` | `30` | Le score est divisé par deux tous les N jours | -Les fichiers persistants (`MEMORY.md`, fichiers non datés dans `memory/`) ne subissent jamais de décroissance. +Les fichiers pérennes (`MEMORY.md`, fichiers non datés dans `memory/`) ne sont jamais affectés par la décroissance. ### Exemple complet @@ -265,10 +257,10 @@ Les fichiers persistants (`MEMORY.md`, fichiers non datés dans `memory/`) ne su --- -## Chemins mémoire supplémentaires +## Chemins de mémoire supplémentaires -| Clé | Type | Description | -| ------------ | ---------- | -------------------------------------------- | +| Key | Type | Description | +| ------------ | ---------- | ---------------------------------------- | | `extraPaths` | `string[]` | Répertoires ou fichiers supplémentaires à indexer | ```json5 @@ -283,15 +275,12 @@ Les fichiers persistants (`MEMORY.md`, fichiers non datés dans `memory/`) ne su } ``` -Les chemins peuvent être absolus ou relatifs à l’espace de travail. Les répertoires sont analysés -récursivement à la recherche de fichiers `.md`. La gestion des liens symboliques dépend du backend actif : -le moteur intégré ignore les liens symboliques, tandis que QMD suit le comportement du scanner QMD -sous-jacent. +Les chemins peuvent être absolus ou relatifs à l’espace de travail. Les répertoires sont analysés récursivement à la recherche de fichiers `.md`. La gestion des liens symboliques dépend du backend actif : le moteur intégré ignore les liens symboliques, tandis que QMD suit le comportement du scanner QMD sous-jacent. Pour la recherche de transcriptions inter-agents à portée d’agent, utilisez `agents.list[].memorySearch.qmd.extraCollections` au lieu de `memory.qmd.paths`. Ces collections supplémentaires suivent la même forme `{ path, name, pattern? }`, mais -elles sont fusionnées par agent et peuvent conserver des noms partagés explicites lorsque le chemin +elles sont fusionnées par agent et peuvent préserver des noms partagés explicites lorsque le chemin pointe en dehors de l’espace de travail actuel. Si le même chemin résolu apparaît à la fois dans `memory.qmd.paths` et `memorySearch.qmd.extraCollections`, QMD conserve la première entrée et ignore le doublon. @@ -300,135 +289,135 @@ Si le même chemin résolu apparaît à la fois dans `memory.qmd.paths` et ## Mémoire multimodale (Gemini) -Indexez des images et de l’audio en plus du Markdown à l’aide de Gemini Embedding 2 : +Indexez des images et de l’audio en plus du Markdown à l’aide de Gemini Embedding 2 : -| Clé | Type | Par défaut | Description | -| ------------------------- | ---------- | ---------- | ---------------------------------------- | -| `multimodal.enabled` | `boolean` | `false` | Activer l’indexation multimodale | -| `multimodal.modalities` | `string[]` | -- | `["image"]`, `["audio"]` ou `["all"]` | -| `multimodal.maxFileBytes` | `number` | `10000000` | Taille maximale des fichiers à indexer | +| Key | Type | Default | Description | +| ------------------------- | ---------- | ---------- | -------------------------------------- | +| `multimodal.enabled` | `boolean` | `false` | Activer l’indexation multimodale | +| `multimodal.modalities` | `string[]` | -- | `["image"]`, `["audio"]` ou `["all"]` | +| `multimodal.maxFileBytes` | `number` | `10000000` | Taille maximale des fichiers pour l’indexation | -S’applique uniquement aux fichiers de `extraPaths`. Les racines mémoire par défaut restent limitées au Markdown. +S’applique uniquement aux fichiers dans `extraPaths`. Les racines de mémoire par défaut restent limitées au Markdown. Nécessite `gemini-embedding-2-preview`. `fallback` doit être `"none"`. -Formats pris en charge : `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif` -(images) ; `.mp3`, `.wav`, `.ogg`, `.opus`, `.m4a`, `.aac`, `.flac` (audio). +Formats pris en charge : `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif` +(images) ; `.mp3`, `.wav`, `.ogg`, `.opus`, `.m4a`, `.aac`, `.flac` (audio). --- -## Cache des embeddings +## Cache d’intégration -| Clé | Type | Par défaut | Description | -| ------------------ | --------- | ---------- | ------------------------------------- | -| `cache.enabled` | `boolean` | `false` | Mettre en cache les embeddings de segments dans SQLite | -| `cache.maxEntries` | `number` | `50000` | Nombre maximal d’embeddings en cache | +| Key | Type | Default | Description | +| ------------------ | --------- | ------- | -------------------------------- | +| `cache.enabled` | `boolean` | `false` | Mettre en cache les intégrations de segments dans SQLite | +| `cache.maxEntries` | `number` | `50000` | Nombre maximal d’intégrations en cache | -Évite de recalculer les embeddings d’un texte inchangé lors d’une réindexation ou de mises à jour de transcription. +Empêche de recalculer les intégrations d’un texte inchangé lors de la réindexation ou des mises à jour de transcription. --- ## Indexation par lots -| Clé | Type | Par défaut | Description | -| ----------------------------- | --------- | ---------- | -------------------------------- | -| `remote.batch.enabled` | `boolean` | `false` | Activer l’API d’embeddings par lots | -| `remote.batch.concurrency` | `number` | `2` | Tâches par lots en parallèle | -| `remote.batch.wait` | `boolean` | `true` | Attendre la fin du lot | -| `remote.batch.pollIntervalMs` | `number` | -- | Intervalle d’interrogation | -| `remote.batch.timeoutMinutes` | `number` | -- | Délai maximal du lot | +| Key | Type | Default | Description | +| ----------------------------- | --------- | ------- | -------------------------- | +| `remote.batch.enabled` | `boolean` | `false` | Activer l’API d’intégration par lots | +| `remote.batch.concurrency` | `number` | `2` | Tâches par lots parallèles | +| `remote.batch.wait` | `boolean` | `true` | Attendre la fin des lots | +| `remote.batch.pollIntervalMs` | `number` | -- | Intervalle d’interrogation | +| `remote.batch.timeoutMinutes` | `number` | -- | Délai d’expiration des lots | -Disponible pour `openai`, `gemini` et `voyage`. Le traitement par lots OpenAI est généralement -le plus rapide et le moins coûteux pour les grands remplissages initiaux. +Disponible pour `openai`, `gemini` et `voyage`. L’indexation par lots OpenAI est généralement +la plus rapide et la moins coûteuse pour les gros remplissages initiaux. --- -## Recherche mémoire de session (expérimental) +## Recherche en mémoire de session (expérimental) -Indexez les transcriptions de session et exposez-les via `memory_search` : +Indexez les transcriptions de session et exposez-les via `memory_search` : -| Clé | Type | Par défaut | Description | -| ----------------------------- | ---------- | ------------- | --------------------------------------------- | -| `experimental.sessionMemory` | `boolean` | `false` | Activer l’indexation des sessions | -| `sources` | `string[]` | `["memory"]` | Ajouter `"sessions"` pour inclure les transcriptions | -| `sync.sessions.deltaBytes` | `number` | `100000` | Seuil en octets pour la réindexation | -| `sync.sessions.deltaMessages` | `number` | `50` | Seuil en nombre de messages pour la réindexation | +| Key | Type | Default | Description | +| ----------------------------- | ---------- | ------------ | --------------------------------------- | +| `experimental.sessionMemory` | `boolean` | `false` | Activer l’indexation des sessions | +| `sources` | `string[]` | `["memory"]` | Ajouter `"sessions"` pour inclure les transcriptions | +| `sync.sessions.deltaBytes` | `number` | `100000` | Seuil en octets pour la réindexation | +| `sync.sessions.deltaMessages` | `number` | `50` | Seuil en messages pour la réindexation | -L’indexation des sessions est facultative et s’exécute de manière asynchrone. Les résultats peuvent être légèrement -obsolètes. Les journaux de session résident sur le disque ; considérez donc l’accès au système de fichiers comme la frontière de confiance. +L’indexation des sessions est optionnelle et s’exécute de manière asynchrone. Les résultats peuvent être légèrement +obsolètes. Les journaux de session sont stockés sur disque ; considérez donc l’accès au système de fichiers comme la +limite de confiance. --- -## Accélération vectorielle SQLite (`sqlite-vec`) +## Accélération vectorielle SQLite (sqlite-vec) -| Clé | Type | Par défaut | Description | -| ---------------------------- | --------- | ---------- | ---------------------------------------- | -| `store.vector.enabled` | `boolean` | `true` | Utiliser `sqlite-vec` pour les requêtes vectorielles | -| `store.vector.extensionPath` | `string` | intégré | Remplacer le chemin de `sqlite-vec` | +| Key | Type | Default | Description | +| ---------------------------- | --------- | ------- | --------------------------------- | +| `store.vector.enabled` | `boolean` | `true` | Utiliser sqlite-vec pour les requêtes vectorielles | +| `store.vector.extensionPath` | `string` | bundled | Remplacer le chemin de sqlite-vec | -Lorsque `sqlite-vec` n’est pas disponible, OpenClaw se replie automatiquement sur une -similarité cosinus en processus. +Lorsque sqlite-vec n’est pas disponible, OpenClaw revient automatiquement à la similarité cosinus en mémoire de processus. --- ## Stockage de l’index -| Clé | Type | Par défaut | Description | -| --------------------- | -------- | ------------------------------------ | -------------------------------------------- | +| Key | Type | Default | Description | +| --------------------- | -------- | ------------------------------------- | ------------------------------------------- | | `store.path` | `string` | `~/.openclaw/memory/{agentId}.sqlite` | Emplacement de l’index (prend en charge le jeton `{agentId}`) | -| `store.fts.tokenizer` | `string` | `unicode61` | Tokenizer FTS5 (`unicode61` ou `trigram`) | +| `store.fts.tokenizer` | `string` | `unicode61` | Tokenizer FTS5 (`unicode61` ou `trigram`) | --- ## Configuration du backend QMD Définissez `memory.backend = "qmd"` pour l’activer. Tous les paramètres QMD se trouvent sous -`memory.qmd` : +`memory.qmd` : -| Clé | Type | Par défaut | Description | -| ------------------------ | --------- | ---------- | -------------------------------------------- | -| `command` | `string` | `qmd` | Chemin de l’exécutable QMD | -| `searchMode` | `string` | `search` | Commande de recherche : `search`, `vsearch`, `query` | -| `includeDefaultMemory` | `boolean` | `true` | Indexer automatiquement `MEMORY.md` + `memory/**/*.md` | -| `paths[]` | `array` | -- | Chemins supplémentaires : `{ name, path, pattern? }` | -| `sessions.enabled` | `boolean` | `false` | Indexer les transcriptions de session | -| `sessions.retentionDays` | `number` | -- | Rétention des transcriptions | -| `sessions.exportDir` | `string` | -- | Répertoire d’export | +| Key | Type | Default | Description | +| ------------------------ | --------- | -------- | -------------------------------------------- | +| `command` | `string` | `qmd` | Chemin de l’exécutable QMD | +| `searchMode` | `string` | `search` | Commande de recherche : `search`, `vsearch`, `query` | +| `includeDefaultMemory` | `boolean` | `true` | Indexer automatiquement `MEMORY.md` + `memory/**/*.md` | +| `paths[]` | `array` | -- | Chemins supplémentaires : `{ name, path, pattern? }` | +| `sessions.enabled` | `boolean` | `false` | Indexer les transcriptions de session | +| `sessions.retentionDays` | `number` | -- | Rétention des transcriptions | +| `sessions.exportDir` | `string` | -- | Répertoire d’exportation | -OpenClaw privilégie les formes actuelles de collection QMD et de requête MCP, mais conserve -la compatibilité avec les anciennes versions de QMD en se repliant sur les drapeaux de collection -hérités `--mask` et sur les anciens noms d’outils MCP lorsque nécessaire. +OpenClaw privilégie les formes actuelles de collection QMD et de requête MCP, mais maintient +la compatibilité avec les anciennes versions de QMD en revenant aux indicateurs de collection hérités `--mask` +et aux anciens noms d’outils MCP lorsque nécessaire. -Les remplacements de modèles QMD restent du côté QMD, et non dans la configuration OpenClaw. Si vous devez +Les remplacements de modèle QMD restent du côté de QMD, et non dans la configuration d’OpenClaw. Si vous devez remplacer globalement les modèles de QMD, définissez des variables d’environnement telles que -`QMD_EMBED_MODEL`, `QMD_RERANK_MODEL` et `QMD_GENERATE_MODEL` dans l’environnement -runtime de la gateway. +`QMD_EMBED_MODEL`, `QMD_RERANK_MODEL` et `QMD_GENERATE_MODEL` dans l’environnement d’exécution +de la Gateway. ### Planification des mises à jour -| Clé | Type | Par défaut | Description | -| ------------------------- | --------- | ---------- | -------------------------------------------- | -| `update.interval` | `string` | `5m` | Intervalle d’actualisation | -| `update.debounceMs` | `number` | `15000` | Anti-rebond des changements de fichiers | -| `update.onBoot` | `boolean` | `true` | Actualiser au démarrage | -| `update.waitForBootSync` | `boolean` | `false` | Bloquer le démarrage jusqu’à la fin de l’actualisation | -| `update.embedInterval` | `string` | -- | Cadence distincte pour les embeddings | -| `update.commandTimeoutMs` | `number` | -- | Délai maximal pour les commandes QMD | -| `update.updateTimeoutMs` | `number` | -- | Délai maximal pour les opérations de mise à jour QMD | -| `update.embedTimeoutMs` | `number` | -- | Délai maximal pour les opérations d’embeddings QMD | +| Key | Type | Default | Description | +| ------------------------- | --------- | ------- | ------------------------------------- | +| `update.interval` | `string` | `5m` | Intervalle de rafraîchissement | +| `update.debounceMs` | `number` | `15000` | Anti-rebond des modifications de fichiers | +| `update.onBoot` | `boolean` | `true` | Rafraîchir au démarrage | +| `update.waitForBootSync` | `boolean` | `false` | Bloquer le démarrage jusqu’à la fin du rafraîchissement | +| `update.embedInterval` | `string` | -- | Cadence d’intégration distincte | +| `update.commandTimeoutMs` | `number` | -- | Délai d’expiration pour les commandes QMD | +| `update.updateTimeoutMs` | `number` | -- | Délai d’expiration pour les opérations de mise à jour QMD | +| `update.embedTimeoutMs` | `number` | -- | Délai d’expiration pour les opérations d’intégration QMD | ### Limites -| Clé | Type | Par défaut | Description | -| ------------------------- | -------- | ---------- | ---------------------------------- | -| `limits.maxResults` | `number` | `6` | Nombre maximal de résultats de recherche | -| `limits.maxSnippetChars` | `number` | -- | Limiter la longueur des extraits | -| `limits.maxInjectedChars` | `number` | -- | Limiter le nombre total de caractères injectés | -| `limits.timeoutMs` | `number` | `4000` | Délai maximal de recherche | +| Key | Type | Default | Description | +| ------------------------- | -------- | ------- | -------------------------- | +| `limits.maxResults` | `number` | `6` | Nombre maximal de résultats de recherche | +| `limits.maxSnippetChars` | `number` | -- | Limiter la longueur des extraits | +| `limits.maxInjectedChars` | `number` | -- | Limiter le nombre total de caractères injectés | +| `limits.timeoutMs` | `number` | `4000` | Délai d’expiration de la recherche | ### Portée -Contrôle quelles sessions peuvent recevoir des résultats de recherche QMD. Même schéma que -[`session.sendPolicy`](/fr/gateway/configuration-reference#session) : +Contrôle quelles sessions peuvent recevoir les résultats de recherche QMD. Même schéma que +[`session.sendPolicy`](/fr/gateway/configuration-reference#session) : ```json5 { @@ -443,23 +432,23 @@ Contrôle quelles sessions peuvent recevoir des résultats de recherche QMD. Mê } ``` -La valeur par défaut fournie autorise les sessions directes et en canal, tout en refusant -toujours les groupes. +La valeur par défaut fournie autorise les sessions directes et de canal, tout en refusant +les groupes. -La valeur par défaut est limitée aux MP. `match.keyPrefix` correspond à la clé de session normalisée ; +La valeur par défaut est DM-only. `match.keyPrefix` correspond à la clé de session normalisée ; `match.rawKeyPrefix` correspond à la clé brute, y compris `agent::`. ### Citations -`memory.citations` s’applique à tous les backends : +`memory.citations` s’applique à tous les backends : -| Valeur | Comportement | -| ---------------- | ---------------------------------------------------- | -| `auto` (par défaut) | Inclure un pied de page `Source: ` dans les extraits | -| `on` | Toujours inclure le pied de page | -| `off` | Omettre le pied de page (le chemin est tout de même transmis à l’agent en interne) | +| Value | Behavior | +| ---------------- | --------------------------------------------------- | +| `auto` (par défaut) | Inclure le pied de page `Source: ` dans les extraits | +| `on` | Toujours inclure le pied de page | +| `off` | Omettre le pied de page (le chemin est toujours transmis à l’agent en interne) | -### Exemple QMD complet +### Exemple complet QMD ```json5 { @@ -482,9 +471,9 @@ La valeur par défaut est limitée aux MP. `match.keyPrefix` correspond à la cl --- -## Dreaming (expérimental) +## Dreaming -Dreaming est configuré sous `plugins.entries.memory-core.config.dreaming`, +Dreaming se configure sous `plugins.entries.memory-core.config.dreaming`, et non sous `agents.defaults.memorySearch`. Dreaming s’exécute comme un balayage planifié unique et utilise en interne des phases light/deep/REM comme @@ -494,10 +483,10 @@ Pour le comportement conceptuel et les commandes slash, voir [Dreaming](/fr/conc ### Paramètres utilisateur -| Clé | Type | Par défaut | Description | -| ----------- | --------- | ------------ | -------------------------------------------------- | -| `enabled` | `boolean` | `false` | Activer ou désactiver complètement Dreaming | -| `frequency` | `string` | `0 3 * * *` | Cadence Cron facultative pour le balayage complet de Dreaming | +| Key | Type | Default | Description | +| ----------- | --------- | ----------- | ------------------------------------------------- | +| `enabled` | `boolean` | `false` | Activer ou désactiver complètement Dreaming | +| `frequency` | `string` | `0 3 * * *` | Cadence Cron facultative pour le balayage complet de Dreaming | ### Exemple @@ -518,8 +507,8 @@ Pour le comportement conceptuel et les commandes slash, voir [Dreaming](/fr/conc } ``` -Remarques : +Remarques : -- Dreaming écrit l’état machine dans `memory/.dreams/`. -- Dreaming écrit la sortie narrative lisible par un humain dans `DREAMS.md` (ou dans `dreams.md` existant). -- La politique de phases light/deep/REM et les seuils sont des comportements internes, pas une configuration destinée à l’utilisateur. +- Dreaming écrit son état machine dans `memory/.dreams/`. +- Dreaming écrit une sortie narrative lisible par des humains dans `DREAMS.md` (ou `dreams.md` existant). +- La stratégie de phases light/deep/REM et les seuils sont un comportement interne, et non une configuration destinée à l’utilisateur. diff --git a/docs/fr/reference/wizard.md b/docs/fr/reference/wizard.md index 0dd0fb9be..19445c065 100644 --- a/docs/fr/reference/wizard.md +++ b/docs/fr/reference/wizard.md @@ -1,34 +1,34 @@ --- read_when: - - Rechercher une étape ou un drapeau d’onboarding spécifique + - Recherche d’une étape ou d’un drapeau d’onboarding spécifique - Automatiser l’onboarding avec le mode non interactif - Déboguer le comportement de l’onboarding sidebarTitle: Onboarding Reference -summary: 'Référence complète pour l’onboarding CLI : chaque étape, drapeau et champ de configuration' -title: Référence de l’onboarding +summary: 'Référence complète pour l’onboarding de la CLI : chaque étape, drapeau et champ de configuration' +title: Référence d’onboarding x-i18n: - generated_at: "2026-04-07T06:55:19Z" + generated_at: "2026-04-15T14:40:53Z" model: gpt-5.4 provider: openai - source_hash: a142b9ec4323fabb9982d05b64375d2b4a4007dffc910acbee3a38ff871a7236 + source_hash: 1db3ff789422617634e6624f9d12c18b6a6c573721226b9c0fa6f6b7956ef33d source_path: reference/wizard.md workflow: 15 --- -# Référence de l’onboarding +# Référence d’onboarding -Ceci est la référence complète pour `openclaw onboard`. -Pour une vue d’ensemble de haut niveau, voir [Onboarding (CLI)](/fr/start/wizard). +Voici la référence complète de `openclaw onboard`. +Pour une vue d’ensemble de haut niveau, consultez [Onboarding (CLI)](/fr/start/wizard). ## Détails du flux (mode local) - + - Si `~/.openclaw/openclaw.json` existe, choisissez **Conserver / Modifier / Réinitialiser**. - - Relancer l’onboarding **n’efface rien** sauf si vous choisissez explicitement **Réinitialiser** - (ou passez `--reset`). - - La CLI `--reset` utilise par défaut `config+creds+sessions` ; utilisez `--reset-scope full` - pour supprimer aussi l’espace de travail. + - Relancer l’onboarding n’efface **rien** à moins que vous choisissiez explicitement **Réinitialiser** + (ou que vous passiez `--reset`). + - Le drapeau CLI `--reset` utilise par défaut `config+creds+sessions` ; utilisez `--reset-scope full` + pour supprimer également l’espace de travail. - Si la configuration est invalide ou contient des clés héritées, l’assistant s’arrête et vous demande d’exécuter `openclaw doctor` avant de continuer. - La réinitialisation utilise `trash` (jamais `rm`) et propose les portées suivantes : @@ -38,28 +38,28 @@ Pour une vue d’ensemble de haut niveau, voir [Onboarding (CLI)](/fr/start/wiza - **Clé API Anthropic** : utilise `ANTHROPIC_API_KEY` si présent ou demande une clé, puis l’enregistre pour l’utilisation du daemon. - - **Clé API Anthropic** : choix d’assistant Anthropic préféré dans onboarding/configure. - - **Jeton de configuration Anthropic** : toujours disponible dans onboarding/configure, même si OpenClaw préfère maintenant réutiliser Claude CLI quand c’est possible. - - **Abonnement OpenAI Code (Codex) (Codex CLI)** : si `~/.codex/auth.json` existe, l’onboarding peut le réutiliser. Les identifiants Codex CLI réutilisés restent gérés par Codex CLI ; à expiration, OpenClaw relit d’abord cette source et, lorsque le provider peut les rafraîchir, réécrit l’identifiant rafraîchi dans le stockage Codex au lieu d’en prendre lui-même la gestion. + - **Clé API Anthropic** : choix d’assistant Anthropic privilégié dans l’onboarding/configuration. + - **Jeton de configuration Anthropic** : toujours disponible dans l’onboarding/configuration, bien qu’OpenClaw préfère désormais la réutilisation de Claude CLI lorsqu’elle est disponible. + - **Abonnement OpenAI Code (Codex) (Codex CLI)** : si `~/.codex/auth.json` existe, l’onboarding peut le réutiliser. Les identifiants Codex CLI réutilisés restent gérés par Codex CLI ; à l’expiration, OpenClaw relit d’abord cette source et, lorsque le fournisseur peut les actualiser, écrit l’identifiant actualisé dans le stockage Codex au lieu d’en prendre lui-même la gestion. - **Abonnement OpenAI Code (Codex) (OAuth)** : flux navigateur ; collez le `code#state`. - - Définit `agents.defaults.model` sur `openai-codex/gpt-5.4` lorsque le modèle n’est pas défini ou correspond à `openai/*`. + - Définit `agents.defaults.model` sur `openai-codex/gpt-5.4` lorsque le modèle n’est pas défini ou vaut `openai/*`. - **Clé API OpenAI** : utilise `OPENAI_API_KEY` si présent ou demande une clé, puis la stocke dans les profils d’authentification. - - Définit `agents.defaults.model` sur `openai/gpt-5.4` lorsque le modèle n’est pas défini, correspond à `openai/*` ou à `openai-codex/*`. - - **Clé API xAI (Grok)** : demande `XAI_API_KEY` et configure xAI comme provider de modèle. - - **OpenCode** : demande `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`, à obtenir sur https://opencode.ai/auth) et vous laisse choisir le catalogue Zen ou Go. - - **Ollama** : demande l’URL de base Ollama, propose le mode **Cloud + Local** ou **Local**, découvre les modèles disponibles et récupère automatiquement le modèle local sélectionné si nécessaire. + - Définit `agents.defaults.model` sur `openai/gpt-5.4` lorsque le modèle n’est pas défini, vaut `openai/*` ou `openai-codex/*`. + - **Clé API xAI (Grok)** : demande `XAI_API_KEY` et configure xAI comme fournisseur de modèle. + - **OpenCode** : demande `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`, à obtenir sur https://opencode.ai/auth) et vous permet de choisir le catalogue Zen ou Go. + - **Ollama** : propose d’abord **Cloud + Local**, **Cloud only** ou **Local only**. `Cloud only` demande `OLLAMA_API_KEY` et utilise `https://ollama.com` ; les modes adossés à l’hôte demandent l’URL de base Ollama, détectent les modèles disponibles et récupèrent automatiquement le modèle local sélectionné si nécessaire ; `Cloud + Local` vérifie aussi si cet hôte Ollama est connecté pour l’accès cloud. - Plus de détails : [Ollama](/fr/providers/ollama) - **Clé API** : stocke la clé pour vous. - **Vercel AI Gateway (proxy multi-modèles)** : demande `AI_GATEWAY_API_KEY`. - Plus de détails : [Vercel AI Gateway](/fr/providers/vercel-ai-gateway) - **Cloudflare AI Gateway** : demande l’ID de compte, l’ID Gateway et `CLOUDFLARE_AI_GATEWAY_API_KEY`. - Plus de détails : [Cloudflare AI Gateway](/fr/providers/cloudflare-ai-gateway) - - **MiniMax** : la configuration est écrite automatiquement ; la valeur hébergée par défaut est `MiniMax-M2.7`. + - **MiniMax** : la configuration est écrite automatiquement ; le modèle hébergé par défaut est `MiniMax-M2.7`. La configuration par clé API utilise `minimax/...`, et la configuration OAuth utilise `minimax-portal/...`. - Plus de détails : [MiniMax](/fr/providers/minimax) - - **StepFun** : la configuration est écrite automatiquement pour StepFun standard ou Step Plan sur les endpoints Chine ou globaux. - - Standard inclut actuellement `step-3.5-flash`, et Step Plan inclut aussi `step-3.5-flash-2603`. + - **StepFun** : la configuration est écrite automatiquement pour StepFun standard ou Step Plan sur les points de terminaison Chine ou globaux. + - La version standard inclut actuellement `step-3.5-flash`, et Step Plan inclut également `step-3.5-flash-2603`. - Plus de détails : [StepFun](/fr/providers/stepfun) - **Synthetic (compatible Anthropic)** : demande `SYNTHETIC_API_KEY`. - Plus de détails : [Synthetic](/fr/providers/synthetic) @@ -67,89 +67,89 @@ Pour une vue d’ensemble de haut niveau, voir [Onboarding (CLI)](/fr/start/wiza - **Kimi Coding** : la configuration est écrite automatiquement. - Plus de détails : [Moonshot AI (Kimi + Kimi Coding)](/fr/providers/moonshot) - **Ignorer** : aucune authentification n’est encore configurée. - - Choisissez un modèle par défaut parmi les options détectées (ou saisissez manuellement provider/model). Pour une meilleure qualité et un risque plus faible d’injection de prompt, choisissez le modèle de dernière génération le plus robuste disponible dans votre pile de providers. - - L’onboarding exécute une vérification du modèle et avertit si le modèle configuré est inconnu ou si l’authentification est manquante. - - Le mode de stockage des clés API utilise par défaut des valeurs de profil d’authentification en clair. Utilisez `--secret-input-mode ref` pour stocker à la place des références adossées à des variables d’environnement (par exemple `keyRef: { source: "env", provider: "default", id: "OPENAI_API_KEY" }`). - - Les profils d’authentification se trouvent dans `~/.openclaw/agents//agent/auth-profiles.json` (clés API + OAuth). `~/.openclaw/credentials/oauth.json` est une source héritée réservée à l’importation. + - Choisissez un modèle par défaut parmi les options détectées (ou saisissez manuellement provider/model). Pour une qualité optimale et un risque plus faible d’injection de prompt, choisissez le modèle le plus puissant et de dernière génération disponible dans votre pile de fournisseurs. + - L’onboarding exécute une vérification du modèle et affiche un avertissement si le modèle configuré est inconnu ou si l’authentification manque. + - Le mode de stockage des clés API utilise par défaut des valeurs de profils d’authentification en texte brut. Utilisez `--secret-input-mode ref` pour stocker à la place des références adossées à l’environnement (par exemple `keyRef: { source: "env", provider: "default", id: "OPENAI_API_KEY" }`). + - Les profils d’authentification se trouvent dans `~/.openclaw/agents//agent/auth-profiles.json` (clés API + OAuth). `~/.openclaw/credentials/oauth.json` est un mécanisme hérité réservé à l’importation. - Plus de détails : [/concepts/oauth](/fr/concepts/oauth) - Astuce pour environnement headless/serveur : terminez OAuth sur une machine avec navigateur, puis copiez + Astuce pour les environnements headless/serveur : terminez OAuth sur une machine disposant d’un navigateur, puis copiez le `auth-profiles.json` de cet agent (par exemple - `~/.openclaw/agents//agent/auth-profiles.json`, ou le chemin correspondant - `$OPENCLAW_STATE_DIR/...`) vers l’hôte Gateway. `credentials/oauth.json` + `~/.openclaw/agents//agent/auth-profiles.json`, ou le chemin + correspondant sous `$OPENCLAW_STATE_DIR/...`) vers l’hôte Gateway. `credentials/oauth.json` n’est qu’une source d’importation héritée. - - Valeur par défaut `~/.openclaw/workspace` (configurable). - - Initialise les fichiers d’espace de travail nécessaires au rituel d’amorçage de l’agent. + - Valeur par défaut : `~/.openclaw/workspace` (configurable). + - Initialise les fichiers d’espace de travail nécessaires au rituel de bootstrap de l’agent. - Disposition complète de l’espace de travail + guide de sauvegarde : [Espace de travail de l’agent](/fr/concepts/agent-workspace) - - Port, mode de liaison, mode d’authentification, exposition Tailscale. + - Port, bind, mode d’authentification, exposition Tailscale. - Recommandation d’authentification : conservez **Token** même pour loopback afin que les clients WS locaux doivent s’authentifier. - En mode token, la configuration interactive propose : - - **Générer/stocker un token en clair** (par défaut) - - **Utiliser SecretRef** (opt-in) - - Le démarrage rapide réutilise les SecretRef `gateway.auth.token` existants via les providers `env`, `file` et `exec` pour la sonde d’onboarding/l’amorçage du tableau de bord. - - Si ce SecretRef est configuré mais ne peut pas être résolu, l’onboarding échoue tôt avec un message de correction clair au lieu de dégrader silencieusement l’authentification d’exécution. - - En mode mot de passe, la configuration interactive prend également en charge le stockage en clair ou SecretRef. - - Chemin SecretRef pour token en mode non interactif : `--gateway-token-ref-env `. + - **Générer/stocker un token en texte brut** (par défaut) + - **Utiliser SecretRef** (optionnel) + - Quickstart réutilise les SecretRef `gateway.auth.token` existants sur les fournisseurs `env`, `file` et `exec` pour le bootstrap de la sonde d’onboarding/du tableau de bord. + - Si ce SecretRef est configuré mais ne peut pas être résolu, l’onboarding échoue tôt avec un message de correction clair au lieu de dégrader silencieusement l’authentification à l’exécution. + - En mode mot de passe, la configuration interactive prend également en charge le stockage en texte brut ou via SecretRef. + - Chemin SecretRef de token non interactif : `--gateway-token-ref-env `. - Nécessite une variable d’environnement non vide dans l’environnement du processus d’onboarding. - Ne peut pas être combiné avec `--gateway-token`. - - Désactivez l’authentification uniquement si vous faites totalement confiance à chaque processus local. - - Les liaisons hors loopback nécessitent toujours une authentification. + - Désactivez l’authentification uniquement si vous faites entièrement confiance à chaque processus local. + - Les binds non loopback exigent toujours une authentification. - - [WhatsApp](/fr/channels/whatsapp) : connexion QR facultative. + - [WhatsApp](/fr/channels/whatsapp) : connexion par QR facultative. - [Telegram](/fr/channels/telegram) : token de bot. - [Discord](/fr/channels/discord) : token de bot. - - [Google Chat](/fr/channels/googlechat) : JSON de compte de service + audience webhook. - - [Mattermost](/fr/channels/mattermost) (plugin) : token de bot + URL de base. + - [Google Chat](/fr/channels/googlechat) : JSON de compte de service + audience Webhook. + - [Mattermost](/fr/channels/mattermost) (Plugin) : token de bot + URL de base. - [Signal](/fr/channels/signal) : installation facultative de `signal-cli` + configuration du compte. - [BlueBubbles](/fr/channels/bluebubbles) : **recommandé pour iMessage** ; URL du serveur + mot de passe + webhook. - [iMessage](/fr/channels/imessage) : chemin CLI `imsg` hérité + accès à la base de données. - - Sécurité des messages privés : le mode par défaut est l’appairage. Le premier message privé envoie un code ; approuvez-le via `openclaw pairing approve ` ou utilisez des listes d’autorisation. + - Sécurité des DM : l’appairage est le mode par défaut. Le premier DM envoie un code ; approuvez-le via `openclaw pairing approve ` ou utilisez des listes d’autorisation. - - Choisissez un provider pris en charge tel que Brave, DuckDuckGo, Exa, Firecrawl, Gemini, Grok, Kimi, MiniMax Search, Ollama Web Search, Perplexity, SearXNG ou Tavily (ou ignorez cette étape). - - Les providers adossés à une API peuvent utiliser des variables d’environnement ou une configuration existante pour une configuration rapide ; les providers sans clé utilisent à la place leurs prérequis spécifiques. + - Choisissez un fournisseur pris en charge comme Brave, DuckDuckGo, Exa, Firecrawl, Gemini, Grok, Kimi, MiniMax Search, Ollama Web Search, Perplexity, SearXNG ou Tavily (ou ignorez cette étape). + - Les fournisseurs adossés à une API peuvent utiliser des variables d’environnement ou une configuration existante pour une configuration rapide ; les fournisseurs sans clé utilisent à la place leurs prérequis spécifiques. - Ignorez avec `--skip-search`. - Configurez plus tard : `openclaw configure --section web`. - macOS : LaunchAgent - Nécessite une session utilisateur connectée ; pour un environnement headless, utilisez un LaunchDaemon personnalisé (non fourni). - - Linux (et Windows via WSL2) : unité systemd utilisateur - - L’onboarding tente d’activer le lingering via `loginctl enable-linger ` afin que la Gateway reste active après déconnexion. - - Peut demander sudo (écrit dans `/var/lib/systemd/linger`) ; il essaie d’abord sans sudo. - - **Sélection du runtime :** Node (recommandé ; requis pour WhatsApp/Telegram). Bun est **non recommandé**. - - Si l’authentification par token nécessite un token et que `gateway.auth.token` est géré par SecretRef, l’installation du daemon le valide mais ne conserve pas les valeurs de token en clair résolues dans les métadonnées d’environnement du service supervisé. - - Si l’authentification par token nécessite un token et que le SecretRef de token configuré n’est pas résolu, l’installation du daemon est bloquée avec des indications exploitables. - - Si `gateway.auth.token` et `gateway.auth.password` sont tous deux configurés et que `gateway.auth.mode` n’est pas défini, l’installation du daemon est bloquée jusqu’à ce que le mode soit défini explicitement. + - Linux (et Windows via WSL2) : unité utilisateur systemd + - L’onboarding tente d’activer le lingering via `loginctl enable-linger ` afin que la Gateway reste active après la déconnexion. + - Peut demander sudo (écriture dans `/var/lib/systemd/linger`) ; il essaie d’abord sans sudo. + - **Sélection du runtime :** Node (recommandé ; requis pour WhatsApp/Telegram). Bun est **déconseillé**. + - Si l’authentification par token exige un token et que `gateway.auth.token` est géré par SecretRef, l’installation du daemon le valide mais ne persiste pas les valeurs de token en texte brut résolues dans les métadonnées d’environnement du service superviseur. + - Si l’authentification par token exige un token et que le SecretRef de token configuré n’est pas résolu, l’installation du daemon est bloquée avec des instructions exploitables. + - Si `gateway.auth.token` et `gateway.auth.password` sont tous deux configurés et que `gateway.auth.mode` n’est pas défini, l’installation du daemon est bloquée jusqu’à ce que le mode soit explicitement défini. - Démarre la Gateway (si nécessaire) et exécute `openclaw health`. - - Astuce : `openclaw status --deep` ajoute la sonde de santé Gateway en direct à la sortie d’état, y compris les sondes de canal lorsqu’elles sont prises en charge (nécessite une Gateway joignable). + - Astuce : `openclaw status --deep` ajoute la sonde d’état de santé de la Gateway en direct à la sortie d’état, y compris les sondes de canaux lorsque prises en charge (nécessite une Gateway accessible). - - Lit les Skills disponibles et vérifie les exigences. - - Vous permet de choisir un gestionnaire de nœuds : **npm / pnpm** (bun non recommandé). + - Lit les Skills disponibles et vérifie les prérequis. + - Vous permet de choisir un gestionnaire Node : **npm / pnpm** (bun est déconseillé). - Installe les dépendances facultatives (certaines utilisent Homebrew sur macOS). - - Résumé + étapes suivantes, y compris les applications iOS/Android/macOS pour des fonctionnalités supplémentaires. + - Résumé + prochaines étapes, y compris les applications iOS/Android/macOS pour des fonctionnalités supplémentaires. -Si aucune interface graphique n’est détectée, l’onboarding affiche les instructions de redirection de port SSH pour l’interface de contrôle au lieu d’ouvrir un navigateur. -Si les assets de l’interface de contrôle sont absents, l’onboarding tente de les construire ; la solution de repli est `pnpm ui:build` (installe automatiquement les dépendances UI). +Si aucune interface graphique n’est détectée, l’onboarding affiche des instructions de redirection de port SSH pour l’interface de contrôle au lieu d’ouvrir un navigateur. +Si les ressources de l’interface de contrôle sont absentes, l’onboarding tente de les construire ; la solution de repli est `pnpm ui:build` (installe automatiquement les dépendances de l’interface). ## Mode non interactif -Utilisez `--non-interactive` pour automatiser ou script l’onboarding : +Utilisez `--non-interactive` pour automatiser ou scriptiser l’onboarding : ```bash openclaw onboard --non-interactive \ @@ -163,7 +163,7 @@ openclaw onboard --non-interactive \ --skip-skills ``` -Ajoutez `--json` pour un résumé lisible par machine. +Ajoutez `--json` pour obtenir un résumé lisible par machine. Token Gateway SecretRef en mode non interactif : @@ -176,13 +176,13 @@ openclaw onboard --non-interactive \ --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN ``` -`--gateway-token` et `--gateway-token-ref-env` sont mutuellement exclusifs. +`--gateway-token` et `--gateway-token-ref-env` s’excluent mutuellement. -`--json` **n’implique pas** le mode non interactif. Utilisez `--non-interactive` (et `--workspace`) pour les scripts. +`--json` n’implique **pas** le mode non interactif. Utilisez `--non-interactive` (et `--workspace`) pour les scripts. -Des exemples de commandes spécifiques aux providers sont disponibles dans [Automatisation CLI](/fr/start/wizard-cli-automation#provider-specific-examples). +Des exemples de commandes spécifiques aux fournisseurs se trouvent dans [Automatisation CLI](/fr/start/wizard-cli-automation#provider-specific-examples). Utilisez cette page de référence pour la sémantique des drapeaux et l’ordre des étapes. ### Ajouter un agent (mode non interactif) @@ -201,18 +201,18 @@ openclaw agents add work \ La Gateway expose le flux d’onboarding via RPC (`wizard.start`, `wizard.next`, `wizard.cancel`, `wizard.status`). Les clients (application macOS, interface de contrôle) peuvent afficher les étapes sans réimplémenter la logique d’onboarding. -## Configuration Signal (`signal-cli`) +## Configuration de Signal (`signal-cli`) L’onboarding peut installer `signal-cli` depuis les releases GitHub : -- Télécharge l’asset de release approprié. -- Le stocke sous `~/.openclaw/tools/signal-cli//`. +- Télécharge la ressource de release appropriée. +- La stocke sous `~/.openclaw/tools/signal-cli//`. - Écrit `channels.signal.cliPath` dans votre configuration. Remarques : - Les builds JVM nécessitent **Java 21**. -- Les builds natifs sont utilisés lorsqu’ils sont disponibles. +- Les builds natives sont utilisées lorsqu’elles sont disponibles. - Windows utilise WSL2 ; l’installation de signal-cli suit le flux Linux à l’intérieur de WSL. ## Ce que l’assistant écrit @@ -220,12 +220,12 @@ Remarques : Champs typiques dans `~/.openclaw/openclaw.json` : - `agents.defaults.workspace` -- `agents.defaults.model` / `models.providers` (si Minimax est choisi) -- `tools.profile` (l’onboarding local utilise par défaut `"coding"` lorsqu’il n’est pas défini ; les valeurs explicites existantes sont préservées) -- `gateway.*` (mode, liaison, authentification, Tailscale) +- `agents.defaults.model` / `models.providers` (si MiniMax est choisi) +- `tools.profile` (l’onboarding local utilise par défaut `"coding"` lorsqu’il n’est pas défini ; les valeurs explicites existantes sont conservées) +- `gateway.*` (mode, bind, auth, tailscale) - `session.dmScope` (détails du comportement : [Référence de configuration CLI](/fr/start/wizard-cli-reference#outputs-and-internals)) - `channels.telegram.botToken`, `channels.discord.token`, `channels.matrix.*`, `channels.signal.*`, `channels.imessage.*` -- Listes d’autorisation de canal (Slack/Discord/Matrix/Microsoft Teams) lorsque vous activez cette option pendant les invites (les noms sont résolus vers des identifiants lorsque c’est possible). +- Listes d’autorisation de canaux (Slack/Discord/Matrix/Microsoft Teams) lorsque vous activez cette option pendant les invites (les noms sont résolus en ID lorsque c’est possible). - `skills.install.nodeManager` - `setup --node-manager` accepte `npm`, `pnpm` ou `bun`. - La configuration manuelle peut toujours utiliser `yarn` en définissant directement `skills.install.nodeManager`. @@ -235,18 +235,18 @@ Champs typiques dans `~/.openclaw/openclaw.json` : - `wizard.lastRunCommand` - `wizard.lastRunMode` -`openclaw agents add` écrit `agents.list[]` et éventuellement `bindings`. +`openclaw agents add` écrit dans `agents.list[]` et `bindings` en option. Les identifiants WhatsApp sont stockés sous `~/.openclaw/credentials/whatsapp//`. Les sessions sont stockées sous `~/.openclaw/agents//sessions/`. Certains canaux sont fournis sous forme de plugins. Lorsque vous en choisissez un pendant la configuration, l’onboarding -vous demandera de l’installer (npm ou chemin local) avant de pouvoir le configurer. +vous invitera à l’installer (npm ou un chemin local) avant qu’il puisse être configuré. ## Documentation associée - Vue d’ensemble de l’onboarding : [Onboarding (CLI)](/fr/start/wizard) - Onboarding de l’application macOS : [Onboarding](/fr/start/onboarding) -- Référence de configuration : [Configuration Gateway](/fr/gateway/configuration) -- Providers : [WhatsApp](/fr/channels/whatsapp), [Telegram](/fr/channels/telegram), [Discord](/fr/channels/discord), [Google Chat](/fr/channels/googlechat), [Signal](/fr/channels/signal), [BlueBubbles](/fr/channels/bluebubbles) (iMessage), [iMessage](/fr/channels/imessage) (hérité) -- Skills : [Skills](/fr/tools/skills), [Configuration Skills](/fr/tools/skills-config) +- Référence de configuration : [Configuration de la Gateway](/fr/gateway/configuration) +- Fournisseurs : [WhatsApp](/fr/channels/whatsapp), [Telegram](/fr/channels/telegram), [Discord](/fr/channels/discord), [Google Chat](/fr/channels/googlechat), [Signal](/fr/channels/signal), [BlueBubbles](/fr/channels/bluebubbles) (iMessage), [iMessage](/fr/channels/imessage) (hérité) +- Skills : [Skills](/fr/tools/skills), [Configuration des Skills](/fr/tools/skills-config) diff --git a/docs/fr/start/wizard-cli-reference.md b/docs/fr/start/wizard-cli-reference.md index 9298c055e..ab537b8da 100644 --- a/docs/fr/start/wizard-cli-reference.md +++ b/docs/fr/start/wizard-cli-reference.md @@ -1,15 +1,15 @@ --- read_when: - Vous avez besoin du comportement détaillé de `openclaw onboard` - - Vous déboguez les résultats d'onboarding ou intégrez des clients d'onboarding + - Vous déboguez les résultats de l’onboarding ou intégrez des clients d’onboarding sidebarTitle: CLI reference -summary: Référence complète du flux de configuration de la CLI, de la configuration de l'authentification et des modèles, des sorties et des éléments internes +summary: Référence complète du flux de configuration de la CLI, de la configuration d’authentification/modèle, des sorties et des éléments internes title: Référence de configuration de la CLI x-i18n: - generated_at: "2026-04-06T03:13:18Z" + generated_at: "2026-04-15T14:40:59Z" model: gpt-5.4 provider: openai - source_hash: 92f379b34a2b48c68335dae4f759117c770f018ec51b275f4f40421c6b3abb23 + source_hash: 61ca679caca3b43fa02388294007f89db22d343e49e10b61d8d118cd8fbb7369 source_path: start/wizard-cli-reference.md workflow: 15 --- @@ -17,83 +17,83 @@ x-i18n: # Référence de configuration de la CLI Cette page est la référence complète pour `openclaw onboard`. -Pour le guide rapide, consultez [Onboarding (CLI)](/fr/start/wizard). +Pour le guide rapide, voir [Onboarding (CLI)](/fr/start/wizard). -## Ce que fait l'assistant +## Ce que fait l’assistant Le mode local (par défaut) vous guide à travers : -- La configuration du modèle et de l'authentification (abonnement OpenAI Code OAuth, Anthropic Claude CLI ou clé API, ainsi que les options MiniMax, GLM, Ollama, Moonshot, StepFun et AI Gateway) -- L'emplacement de l'espace de travail et les fichiers d'initialisation -- Les paramètres de la passerelle (port, liaison, authentification, tailscale) -- Les canaux et les fournisseurs (Telegram, WhatsApp, Discord, Google Chat, Mattermost, Signal, BlueBubbles et d'autres plugins de canal intégrés) -- L'installation du daemon (LaunchAgent, unité utilisateur systemd ou tâche planifiée Windows native avec solution de secours via le dossier Startup) -- La vérification d'état -- La configuration des Skills +- la configuration du modèle et de l’authentification (OAuth de l’abonnement OpenAI Code, Anthropic Claude CLI ou clé API, ainsi que les options MiniMax, GLM, Ollama, Moonshot, StepFun et AI Gateway) +- l’emplacement de l’espace de travail et les fichiers d’initialisation +- les paramètres du Gateway (port, bind, authentification, tailscale) +- les canaux et fournisseurs (Telegram, WhatsApp, Discord, Google Chat, Mattermost, Signal, BlueBubbles et autres Plugins de canal intégrés) +- l’installation du daemon (LaunchAgent, unité utilisateur systemd ou tâche planifiée Windows native avec solution de repli via le dossier Startup) +- la vérification de santé +- la configuration des Skills -Le mode distant configure cette machine pour se connecter à une passerelle située ailleurs. -Il n'installe ni ne modifie quoi que ce soit sur l'hôte distant. +Le mode distant configure cette machine pour qu’elle se connecte à un Gateway situé ailleurs. +Il n’installe ni ne modifie quoi que ce soit sur l’hôte distant. ## Détails du flux local - Si `~/.openclaw/openclaw.json` existe, choisissez Conserver, Modifier ou Réinitialiser. - - Réexécuter l'assistant n'efface rien à moins de choisir explicitement Réinitialiser (ou de passer `--reset`). - - La CLI `--reset` utilise par défaut `config+creds+sessions` ; utilisez `--reset-scope full` pour supprimer aussi l'espace de travail. - - Si la configuration est invalide ou contient des clés héritées, l'assistant s'arrête et vous demande d'exécuter `openclaw doctor` avant de continuer. - - La réinitialisation utilise `trash` et propose plusieurs périmètres : + - Relancer l’assistant n’efface rien sauf si vous choisissez explicitement Réinitialiser (ou passez `--reset`). + - L’option CLI `--reset` utilise par défaut `config+creds+sessions` ; utilisez `--reset-scope full` pour supprimer aussi l’espace de travail. + - Si la configuration est invalide ou contient des clés héritées, l’assistant s’arrête et vous demande d’exécuter `openclaw doctor` avant de continuer. + - La réinitialisation utilise `trash` et propose les portées suivantes : - Configuration uniquement - - Configuration + identifiants + sessions - - Réinitialisation complète (supprime aussi l'espace de travail) + - Configuration + informations d’authentification + sessions + - Réinitialisation complète (supprime aussi l’espace de travail) - - La matrice complète des options figure dans [Options d'authentification et de modèle](#options-dauthentification-et-de-modele). + - La matrice complète des options se trouve dans [Options d’authentification et de modèle](#options-dauthentification-et-de-modèle). - Par défaut `~/.openclaw/workspace` (configurable). - - Initialise les fichiers de l'espace de travail nécessaires au rituel d'amorçage du premier démarrage. - - Structure de l'espace de travail : [Espace de travail de l'agent](/fr/concepts/agent-workspace). + - Initialise les fichiers d’espace de travail nécessaires au rituel de bootstrap du premier lancement. + - Structure de l’espace de travail : [Espace de travail de l’agent](/fr/concepts/agent-workspace). - - - Demande le port, la liaison, le mode d'authentification et l'exposition tailscale. - - Recommandé : garder l'authentification par jeton activée même pour loopback afin que les clients WS locaux doivent s'authentifier. + + - Demande le port, le bind, le mode d’authentification et l’exposition tailscale. + - Recommandé : conserver l’authentification par jeton activée même pour le loopback afin que les clients WS locaux doivent s’authentifier. - En mode jeton, la configuration interactive propose : - **Générer/stocker un jeton en clair** (par défaut) - - **Utiliser SecretRef** (option) - - En mode mot de passe, la configuration interactive prend aussi en charge le stockage en clair ou SecretRef. - - Chemin SecretRef pour jeton en mode non interactif : `--gateway-token-ref-env `. - - Nécessite une variable d'environnement non vide dans l'environnement du processus d'onboarding. + - **Utiliser SecretRef** (optionnel) + - En mode mot de passe, la configuration interactive prend également en charge le stockage en clair ou SecretRef. + - Chemin SecretRef non interactif pour le jeton : `--gateway-token-ref-env `. + - Nécessite une variable d’environnement non vide dans l’environnement du processus d’onboarding. - Ne peut pas être combiné avec `--gateway-token`. - - Désactivez l'authentification uniquement si vous faites entièrement confiance à chaque processus local. - - Les liaisons non-loopback exigent toujours une authentification. + - Désactivez l’authentification uniquement si vous faites entièrement confiance à tous les processus locaux. + - Les binds non loopback exigent toujours une authentification. - [WhatsApp](/fr/channels/whatsapp) : connexion QR facultative - [Telegram](/fr/channels/telegram) : jeton de bot - [Discord](/fr/channels/discord) : jeton de bot - - [Google Chat](/fr/channels/googlechat) : JSON de compte de service + audience webhook + - [Google Chat](/fr/channels/googlechat) : JSON de compte de service + audience du Webhook - [Mattermost](/fr/channels/mattermost) : jeton de bot + URL de base - [Signal](/fr/channels/signal) : installation facultative de `signal-cli` + configuration du compte - - [BlueBubbles](/fr/channels/bluebubbles) : recommandé pour iMessage ; URL du serveur + mot de passe + webhook - - [iMessage](/fr/channels/imessage) : chemin CLI hérité `imsg` + accès à la base de données - - Sécurité des messages privés : l'appairage est utilisé par défaut. Le premier message privé envoie un code ; approuvez-le via - `openclaw pairing approve ` ou utilisez des listes d'autorisation. + - [BlueBubbles](/fr/channels/bluebubbles) : recommandé pour iMessage ; URL du serveur + mot de passe + Webhook + - [iMessage](/fr/channels/imessage) : chemin CLI `imsg` hérité + accès à la base de données + - Sécurité des messages privés : le mode par défaut est l’appairage. Le premier message privé envoie un code ; approuvez-le via + `openclaw pairing approve ` ou utilisez des listes d’autorisation. - macOS : LaunchAgent - - Nécessite une session utilisateur connectée ; pour un environnement headless, utilisez un LaunchDaemon personnalisé (non fourni). + - Nécessite une session utilisateur connectée ; pour un mode headless, utilisez un LaunchDaemon personnalisé (non fourni). - Linux et Windows via WSL2 : unité utilisateur systemd - - L'assistant tente `loginctl enable-linger ` afin que la passerelle reste active après la déconnexion. - - Peut demander sudo (écrit dans `/var/lib/systemd/linger`) ; il essaie d'abord sans sudo. + - L’assistant tente `loginctl enable-linger ` afin que le Gateway reste actif après la déconnexion. + - Peut demander sudo (écrit dans `/var/lib/systemd/linger`) ; il essaie d’abord sans sudo. - Windows natif : tâche planifiée en priorité - - Si la création de la tâche est refusée, OpenClaw bascule vers un élément de connexion par utilisateur dans le dossier Startup et démarre immédiatement la passerelle. - - Les tâches planifiées restent préférées car elles fournissent un meilleur état du superviseur. - - Sélection de l'environnement d'exécution : Node (recommandé ; requis pour WhatsApp et Telegram). Bun n'est pas recommandé. + - Si la création de la tâche est refusée, OpenClaw revient à un élément de connexion par utilisateur dans le dossier Startup et démarre immédiatement le Gateway. + - Les tâches planifiées restent préférées car elles offrent un meilleur statut de supervision. + - Sélection de l’environnement d’exécution : Node (recommandé ; requis pour WhatsApp et Telegram). Bun n’est pas recommandé. - - - Démarre la passerelle (si nécessaire) et exécute `openclaw health`. - - `openclaw status --deep` ajoute la sonde d'état en direct de la passerelle à la sortie de statut, y compris les sondes de canaux lorsqu'elles sont prises en charge. + + - Démarre le Gateway (si nécessaire) et exécute `openclaw health`. + - `openclaw status --deep` ajoute la sonde de santé du Gateway en direct à la sortie d’état, y compris les sondes de canal lorsqu’elles sont prises en charge. - Lit les Skills disponibles et vérifie les prérequis. @@ -101,58 +101,57 @@ Il n'installe ni ne modifie quoi que ce soit sur l'hôte distant. - Installe les dépendances facultatives (certaines utilisent Homebrew sur macOS). - - Résumé et étapes suivantes, y compris les options d'application iOS, Android et macOS. + - Résumé et étapes suivantes, y compris les options d’application iOS, Android et macOS. -Si aucune interface graphique n'est détectée, l'assistant affiche les instructions de transfert de port SSH pour l'interface de contrôle au lieu d'ouvrir un navigateur. -Si les ressources de l'interface de contrôle sont absentes, l'assistant tente de les construire ; la solution de secours est `pnpm ui:build` (installe automatiquement les dépendances de l'interface). +Si aucune interface graphique n’est détectée, l’assistant affiche des instructions de redirection de port SSH pour l’UI de contrôle au lieu d’ouvrir un navigateur. +Si les ressources de l’UI de contrôle sont absentes, l’assistant tente de les construire ; la solution de repli est `pnpm ui:build` (installe automatiquement les dépendances UI). ## Détails du mode distant -Le mode distant configure cette machine pour se connecter à une passerelle située ailleurs. +Le mode distant configure cette machine pour qu’elle se connecte à un Gateway situé ailleurs. -Le mode distant n'installe ni ne modifie quoi que ce soit sur l'hôte distant. +Le mode distant n’installe ni ne modifie quoi que ce soit sur l’hôte distant. -Ce que vous définissez : +Ce que vous configurez : -- URL de la passerelle distante (`ws://...`) -- Jeton si l'authentification de la passerelle distante est requise (recommandé) +- URL du Gateway distant (`ws://...`) +- Jeton si l’authentification du Gateway distant est requise (recommandé) -- Si la passerelle est limitée à loopback, utilisez un tunnel SSH ou un tailnet. -- Indices de découverte : +- Si le Gateway n’est accessible qu’en loopback, utilisez un tunnel SSH ou un tailnet. +- Indications de découverte : - macOS : Bonjour (`dns-sd`) - Linux : Avahi (`avahi-browse`) -## Options d'authentification et de modèle +## Options d’authentification et de modèle - Utilise `ANTHROPIC_API_KEY` si elle est présente ou demande une clé, puis l'enregistre pour l'utilisation par le daemon. + Utilise `ANTHROPIC_API_KEY` si elle est présente ou demande une clé, puis l’enregistre pour l’utilisation par le daemon. - Si `~/.codex/auth.json` existe, l'assistant peut le réutiliser. - Les identifiants Codex CLI réutilisés restent gérés par Codex CLI ; à l'expiration, OpenClaw - relit d'abord cette source et, lorsque le fournisseur peut l'actualiser, écrit - l'identifiant actualisé dans le stockage Codex au lieu d'en prendre lui-même - la gestion. + Si `~/.codex/auth.json` existe, l’assistant peut le réutiliser. + Les identifiants Codex CLI réutilisés restent gérés par Codex CLI ; à expiration, OpenClaw + relit d’abord cette source et, lorsque le fournisseur peut la rafraîchir, écrit + l’identifiant rafraîchi dans le stockage Codex au lieu d’en prendre lui-même la gestion. Flux navigateur ; collez `code#state`. - Définit `agents.defaults.model` sur `openai-codex/gpt-5.4` lorsque le modèle n'est pas défini ou vaut `openai/*`. + Définit `agents.defaults.model` sur `openai-codex/gpt-5.4` lorsque le modèle n’est pas défini ou vaut `openai/*`. - Utilise `OPENAI_API_KEY` si elle est présente ou demande une clé, puis stocke l'identifiant dans les profils d'authentification. + Utilise `OPENAI_API_KEY` si elle est présente ou demande une clé, puis stocke l’identifiant dans les profils d’authentification. - Définit `agents.defaults.model` sur `openai/gpt-5.4` lorsque le modèle n'est pas défini, vaut `openai/*` ou `openai-codex/*`. + Définit `agents.defaults.model` sur `openai/gpt-5.4` lorsque le modèle n’est pas défini, vaut `openai/*` ou `openai-codex/*`. @@ -170,7 +169,7 @@ Ce que vous définissez : Plus de détails : [Vercel AI Gateway](/fr/providers/vercel-ai-gateway). - Demande l'ID de compte, l'ID de passerelle et `CLOUDFLARE_AI_GATEWAY_API_KEY`. + Demande l’ID de compte, l’ID de Gateway et `CLOUDFLARE_AI_GATEWAY_API_KEY`. Plus de détails : [Cloudflare AI Gateway](/fr/providers/cloudflare-ai-gateway). @@ -179,8 +178,8 @@ Ce que vous définissez : Plus de détails : [MiniMax](/fr/providers/minimax). - La configuration est écrite automatiquement pour StepFun standard ou Step Plan sur des points de terminaison chinois ou globaux. - Standard inclut actuellement `step-3.5-flash`, et Step Plan inclut aussi `step-3.5-flash-2603`. + La configuration est écrite automatiquement pour StepFun standard ou Step Plan sur des points de terminaison Chine ou globaux. + La version standard inclut actuellement `step-3.5-flash`, et Step Plan inclut également `step-3.5-flash-2603`. Plus de détails : [StepFun](/fr/providers/stepfun). @@ -188,8 +187,10 @@ Ce que vous définissez : Plus de détails : [Synthetic](/fr/providers/synthetic). - Demande l'URL de base (par défaut `http://127.0.0.1:11434`), puis propose le mode Cloud + local ou local. - Détecte les modèles disponibles et suggère des valeurs par défaut. + Demande d’abord `Cloud + Local`, `Cloud only` ou `Local only`. + `Cloud only` utilise `OLLAMA_API_KEY` avec `https://ollama.com`. + Les modes adossés à l’hôte demandent l’URL de base (par défaut `http://127.0.0.1:11434`), découvrent les modèles disponibles et suggèrent des valeurs par défaut. + `Cloud + Local` vérifie également si cet hôte Ollama est connecté pour l’accès cloud. Plus de détails : [Ollama](/fr/providers/ollama). @@ -197,70 +198,69 @@ Ce que vous définissez : Plus de détails : [Moonshot AI (Kimi + Kimi Coding)](/fr/providers/moonshot). - Fonctionne avec des points de terminaison compatibles OpenAI et compatibles Anthropic. + Fonctionne avec les points de terminaison compatibles OpenAI et compatibles Anthropic. - L'onboarding interactif prend en charge les mêmes choix de stockage de clé API que les autres flux de clé API de fournisseur : - - **Coller la clé API maintenant** (en clair) - - **Utiliser une référence secrète** (référence d'environnement ou référence de fournisseur configurée, avec validation préalable) + L’onboarding interactif prend en charge les mêmes choix de stockage de clé API que les autres flux de clé API de fournisseur : + - **Coller une clé API maintenant** (en clair) + - **Utiliser une référence de secret** (référence env ou référence de fournisseur configuré, avec validation préliminaire) Indicateurs non interactifs : - `--auth-choice custom-api-key` - `--custom-base-url` - `--custom-model-id` - - `--custom-api-key` (facultatif ; revient à `CUSTOM_API_KEY`) - - `--custom-provider-id` (facultatif) - - `--custom-compatibility ` (facultatif ; `openai` par défaut) + - `--custom-api-key` (optionnel ; revient à `CUSTOM_API_KEY`) + - `--custom-provider-id` (optionnel) + - `--custom-compatibility ` (optionnel ; `openai` par défaut) - Laisse l'authentification non configurée. + Laisse l’authentification non configurée. Comportement du modèle : - Choisissez le modèle par défaut parmi les options détectées, ou saisissez manuellement le fournisseur et le modèle. -- Lorsque l'onboarding démarre à partir d'un choix d'authentification de fournisseur, le sélecteur de modèle privilégie +- Lorsque l’onboarding démarre à partir d’un choix d’authentification de fournisseur, le sélecteur de modèle privilégie automatiquement ce fournisseur. Pour Volcengine et BytePlus, cette même préférence - correspond aussi à leurs variantes coding-plan (`volcengine-plan/*`, + correspond aussi à leurs variantes de plan de codage (`volcengine-plan/*`, `byteplus-plan/*`). - Si ce filtre de fournisseur préféré serait vide, le sélecteur revient - au catalogue complet au lieu de n'afficher aucun modèle. -- L'assistant exécute une vérification du modèle et avertit si le modèle configuré est inconnu ou si l'authentification est manquante. + au catalogue complet au lieu de n’afficher aucun modèle. +- L’assistant exécute une vérification du modèle et avertit si le modèle configuré est inconnu ou si l’authentification manque. Chemins des identifiants et des profils : -- Profils d'authentification (clés API + OAuth) : `~/.openclaw/agents//agent/auth-profiles.json` +- Profils d’authentification (clés API + OAuth) : `~/.openclaw/agents//agent/auth-profiles.json` - Import OAuth hérité : `~/.openclaw/credentials/oauth.json` Mode de stockage des identifiants : -- Le comportement par défaut de l'onboarding conserve les clés API sous forme de valeurs en clair dans les profils d'authentification. -- `--secret-input-mode ref` active le mode référence à la place du stockage de clé en clair. - En configuration interactive, vous pouvez choisir l'un des deux : - - référence de variable d'environnement (par exemple `keyRef: { source: "env", provider: "default", id: "OPENAI_API_KEY" }`) +- Le comportement par défaut de l’onboarding conserve les clés API comme valeurs en clair dans les profils d’authentification. +- `--secret-input-mode ref` active le mode référence au lieu du stockage en clair des clés. + Dans la configuration interactive, vous pouvez choisir l’une des options suivantes : + - référence de variable d’environnement (par exemple `keyRef: { source: "env", provider: "default", id: "OPENAI_API_KEY" }`) - référence de fournisseur configuré (`file` ou `exec`) avec alias de fournisseur + id -- Le mode référence interactif exécute une validation préalable rapide avant l'enregistrement. - - Références d'environnement : valide le nom de la variable + la valeur non vide dans l'environnement d'onboarding courant. - - Références de fournisseur : valide la configuration du fournisseur et résout l'id demandé. - - Si la validation préalable échoue, l'onboarding affiche l'erreur et vous permet de réessayer. -- En mode non interactif, `--secret-input-mode ref` ne prend en charge que l'environnement. - - Définissez la variable d'environnement du fournisseur dans l'environnement du processus d'onboarding. - - Les indicateurs de clé en ligne (par exemple `--openai-api-key`) exigent que cette variable d'environnement soit définie ; sinon l'onboarding échoue immédiatement. - - Pour les fournisseurs personnalisés, le mode `ref` non interactif stocke `models.providers..apiKey` sous la forme `{ source: "env", provider: "default", id: "CUSTOM_API_KEY" }`. - - Dans ce cas de fournisseur personnalisé, `--custom-api-key` exige que `CUSTOM_API_KEY` soit défini ; sinon l'onboarding échoue immédiatement. -- Les identifiants d'authentification de la passerelle prennent en charge les choix en clair et SecretRef en configuration interactive : +- Le mode référence interactif exécute une validation préliminaire rapide avant l’enregistrement. + - Références env : valide le nom de la variable + une valeur non vide dans l’environnement actuel d’onboarding. + - Références fournisseur : valide la configuration du fournisseur et résout l’id demandé. + - Si la validation préliminaire échoue, l’onboarding affiche l’erreur et vous permet de réessayer. +- En mode non interactif, `--secret-input-mode ref` est uniquement adossé aux variables d’environnement. + - Définissez la variable d’environnement du fournisseur dans l’environnement du processus d’onboarding. + - Les indicateurs de clé inline (par exemple `--openai-api-key`) exigent que cette variable d’environnement soit définie ; sinon l’onboarding échoue immédiatement. + - Pour les fournisseurs personnalisés, le mode `ref` non interactif stocke `models.providers..apiKey` comme `{ source: "env", provider: "default", id: "CUSTOM_API_KEY" }`. + - Dans ce cas de fournisseur personnalisé, `--custom-api-key` exige que `CUSTOM_API_KEY` soit définie ; sinon l’onboarding échoue immédiatement. +- Les identifiants d’authentification du Gateway prennent en charge les choix en clair et SecretRef dans la configuration interactive : - Mode jeton : **Générer/stocker un jeton en clair** (par défaut) ou **Utiliser SecretRef**. - Mode mot de passe : en clair ou SecretRef. -- Chemin SecretRef pour jeton en mode non interactif : `--gateway-token-ref-env `. +- Chemin SecretRef non interactif pour le jeton : `--gateway-token-ref-env `. - Les configurations existantes en clair continuent de fonctionner sans changement. -Conseil pour les environnements headless et serveur : terminez OAuth sur une machine disposant d'un navigateur, puis copiez -le `auth-profiles.json` de cet agent (par exemple +Conseil pour les environnements headless et serveur : terminez OAuth sur une machine équipée d’un navigateur, puis copiez le `auth-profiles.json` de cet agent (par exemple `~/.openclaw/agents//agent/auth-profiles.json`, ou le chemin correspondant -`$OPENCLAW_STATE_DIR/...`) vers l'hôte de la passerelle. `credentials/oauth.json` -n'est qu'une source d'import héritée. +`$OPENCLAW_STATE_DIR/...`) vers l’hôte Gateway. `credentials/oauth.json` +n’est qu’une source d’importation héritée. ## Sorties et éléments internes @@ -268,51 +268,51 @@ n'est qu'une source d'import héritée. Champs typiques dans `~/.openclaw/openclaw.json` : - `agents.defaults.workspace` -- `agents.defaults.model` / `models.providers` (si Minimax est choisi) -- `tools.profile` (l'onboarding local utilise par défaut `"coding"` lorsqu'il n'est pas défini ; les valeurs explicites existantes sont conservées) -- `gateway.*` (mode, liaison, authentification, tailscale) -- `session.dmScope` (l'onboarding local définit par défaut cette valeur sur `per-channel-peer` lorsqu'elle n'est pas définie ; les valeurs explicites existantes sont conservées) +- `agents.defaults.model` / `models.providers` (si MiniMax est choisi) +- `tools.profile` (l’onboarding local utilise par défaut `"coding"` lorsqu’il n’est pas défini ; les valeurs explicites existantes sont conservées) +- `gateway.*` (mode, bind, auth, tailscale) +- `session.dmScope` (l’onboarding local utilise par défaut `per-channel-peer` lorsqu’il n’est pas défini ; les valeurs explicites existantes sont conservées) - `channels.telegram.botToken`, `channels.discord.token`, `channels.matrix.*`, `channels.signal.*`, `channels.imessage.*` -- Listes d'autorisation de canaux (Slack, Discord, Matrix, Microsoft Teams) lorsque vous activez l'option pendant les invites (les noms sont résolus en ID lorsque c'est possible) +- Listes d’autorisation de canaux (Slack, Discord, Matrix, Microsoft Teams) lorsque vous choisissez cette option pendant les invites (les noms sont résolus en ID lorsque c’est possible) - `skills.install.nodeManager` - - L'indicateur `setup --node-manager` accepte `npm`, `pnpm` ou `bun`. - - La configuration manuelle peut toujours définir ultérieurement `skills.install.nodeManager: "yarn"`. + - L’indicateur `setup --node-manager` accepte `npm`, `pnpm` ou `bun`. + - Une configuration manuelle peut toujours définir ensuite `skills.install.nodeManager: "yarn"`. - `wizard.lastRunAt` - `wizard.lastRunVersion` - `wizard.lastRunCommit` - `wizard.lastRunCommand` - `wizard.lastRunMode` -`openclaw agents add` écrit `agents.list[]` et des `bindings` facultatifs. +`openclaw agents add` écrit dans `agents.list[]` et dans `bindings` si nécessaire. -Les identifiants WhatsApp sont stockés sous `~/.openclaw/credentials/whatsapp//`. +Les identifiants WhatsApp sont placés sous `~/.openclaw/credentials/whatsapp//`. Les sessions sont stockées sous `~/.openclaw/agents//sessions/`. -Certains canaux sont fournis sous forme de plugins. Lorsqu'ils sont sélectionnés pendant la configuration, l'assistant -demande d'installer le plugin (npm ou chemin local) avant la configuration du canal. +Certains canaux sont fournis sous forme de plugins. Lorsqu’ils sont sélectionnés pendant la configuration, l’assistant +demande d’installer le plugin (npm ou chemin local) avant la configuration du canal. -RPC de l'assistant de passerelle : +RPC de l’assistant Gateway : - `wizard.start` - `wizard.next` - `wizard.cancel` - `wizard.status` -Les clients (application macOS et interface de contrôle) peuvent afficher les étapes sans réimplémenter la logique d'onboarding. +Les clients (application macOS et UI de contrôle) peuvent afficher les étapes sans réimplémenter la logique d’onboarding. -Comportement de la configuration Signal : +Comportement de la configuration de Signal : - Télécharge la ressource de version appropriée - La stocke sous `~/.openclaw/tools/signal-cli//` - Écrit `channels.signal.cliPath` dans la configuration -- Les builds JVM exigent Java 21 -- Les builds natifs sont utilisés lorsqu'ils sont disponibles -- Windows utilise WSL2 et suit le flux Linux signal-cli à l'intérieur de WSL +- Les builds JVM nécessitent Java 21 +- Les builds natifs sont utilisés lorsqu’ils sont disponibles +- Windows utilise WSL2 et suit le flux Linux `signal-cli` à l’intérieur de WSL ## Documentation associée -- Hub d'onboarding : [Onboarding (CLI)](/fr/start/wizard) +- Hub d’onboarding : [Onboarding (CLI)](/fr/start/wizard) - Automatisation et scripts : [Automatisation de la CLI](/fr/start/wizard-cli-automation) - Référence de commande : [`openclaw onboard`](/cli/onboard)