From 1bf37284fe34855f86158bd180c50100f30c7642 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 8 Apr 2026 06:57:41 +0000 Subject: [PATCH] chore(i18n): refresh fr translations --- docs/fr/channels/discord.md | 502 +++++----- docs/fr/concepts/dreaming.md | 115 ++- docs/fr/gateway/configuration-reference.md | 1045 ++++++++++---------- docs/fr/plugins/sdk-overview.md | 610 ++++++------ docs/fr/providers/google.md | 108 +- docs/fr/providers/ollama.md | 137 ++- 6 files changed, 1258 insertions(+), 1259 deletions(-) diff --git a/docs/fr/channels/discord.md b/docs/fr/channels/discord.md index dcc371b56..e19c9a294 100644 --- a/docs/fr/channels/discord.md +++ b/docs/fr/channels/discord.md @@ -1,50 +1,50 @@ --- read_when: - Travail sur les fonctionnalités du canal Discord -summary: État de prise en charge, capacités et configuration du bot Discord +summary: Statut de prise en charge, capacités et configuration du bot Discord title: Discord x-i18n: - generated_at: "2026-04-06T03:07:58Z" + generated_at: "2026-04-08T06:52:59Z" model: gpt-5.4 provider: openai - source_hash: 54af2176a1b4fa1681e3f07494def0c652a2730165058848000e71a59e2a9d08 + source_hash: 3cd2886fad941ae2129e681911309539e9a65a2352b777b538d7f4686a68f73f source_path: channels/discord.md workflow: 15 --- -# Discord (Bot API) +# Discord (API Bot) -Statut : prêt pour les messages privés et les canaux de serveur via la passerelle Discord officielle. +Statut : prêt pour les MP et les canaux de serveur via la passerelle Discord officielle. - Les messages privés Discord utilisent le mode d’appairage par défaut. + Les MP Discord sont en mode d'appairage par défaut. - Comportement natif des commandes et catalogue des commandes. + Comportement natif des commandes et catalogue de commandes. - + Diagnostics inter-canaux et flux de réparation. ## Configuration rapide -Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre serveur et l’appairer avec OpenClaw. Nous recommandons d’ajouter votre bot à votre propre serveur privé. Si vous n’en avez pas encore, [créez-en un d’abord](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (choisissez **Create My Own > For me and my friends**). +Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre serveur et l'appairer à OpenClaw. Nous vous recommandons d'ajouter votre bot à votre propre serveur privé. Si vous n'en avez pas encore, [créez-en un d'abord](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (choisissez **Create My Own > For me and my friends**). - Accédez au [Discord Developer Portal](https://discord.com/developers/applications) et cliquez sur **New Application**. Donnez-lui un nom comme « OpenClaw ». + Accédez au [Portail développeur Discord](https://discord.com/developers/applications) et cliquez sur **New Application**. Donnez-lui un nom comme « OpenClaw ». Cliquez sur **Bot** dans la barre latérale. Définissez le **Username** sur le nom que vous donnez à votre agent OpenClaw. - Toujours sur la page **Bot**, faites défiler jusqu’à **Privileged Gateway Intents** et activez : + Toujours sur la page **Bot**, faites défiler jusqu'à **Privileged Gateway Intents** et activez : - - **Message Content Intent** (obligatoire) - - **Server Members Intent** (recommandé ; requis pour les listes d’autorisation de rôles et la correspondance nom-vers-ID) + - **Message Content Intent** (requis) + - **Server Members Intent** (recommandé ; requis pour les listes d'autorisation de rôles et la correspondance nom-vers-ID) - **Presence Intent** (facultatif ; nécessaire uniquement pour les mises à jour de présence) @@ -53,17 +53,17 @@ Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre Revenez en haut de la page **Bot** et cliquez sur **Reset Token**. - Malgré le nom, cela génère votre premier jeton — rien n’est « réinitialisé ». + Malgré son nom, cela génère votre premier jeton — rien n'est réellement « réinitialisé ». - Copiez le jeton et enregistrez-le quelque part. C’est votre **Bot Token** et vous en aurez besoin sous peu. + Copiez le jeton et enregistrez-le quelque part. C'est votre **Bot Token** et vous en aurez besoin dans un instant. - - Cliquez sur **OAuth2** dans la barre latérale. Vous allez générer une URL d’invitation avec les bonnes autorisations pour ajouter le bot à votre serveur. + + Cliquez sur **OAuth2** dans la barre latérale. Vous allez générer une URL d'invitation avec les bonnes autorisations pour ajouter le bot à votre serveur. - Faites défiler jusqu’à **OAuth2 URL Generator** et activez : + Faites défiler jusqu'à **OAuth2 URL Generator** et activez : - `bot` - `applications.commands` @@ -77,30 +77,30 @@ Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre - Attach Files - Add Reactions (facultatif) - Copiez l’URL générée en bas, collez-la dans votre navigateur, sélectionnez votre serveur et cliquez sur **Continue** pour vous connecter. Vous devriez maintenant voir votre bot dans le serveur Discord. + Copiez l'URL générée en bas, collez-la dans votre navigateur, sélectionnez votre serveur, puis cliquez sur **Continue** pour vous connecter. Vous devriez maintenant voir votre bot dans le serveur Discord. - - De retour dans l’application Discord, vous devez activer le mode développeur afin de pouvoir copier les IDs internes. + + De retour dans l'application Discord, vous devez activer le mode développeur pour pouvoir copier les ID internes. - 1. Cliquez sur **User Settings** (icône d’engrenage à côté de votre avatar) → **Advanced** → activez **Developer Mode** - 2. Faites un clic droit sur l’**icône de votre serveur** dans la barre latérale → **Copy Server ID** - 3. Faites un clic droit sur votre **propre avatar** → **Copy User ID** + 1. Cliquez sur **User Settings** (icône d'engrenage à côté de votre avatar) → **Advanced** → activez **Developer Mode** + 2. Faites un clic droit sur l'**icône de votre serveur** dans la barre latérale → **Copy Server ID** + 3. Faites un clic droit sur **votre propre avatar** → **Copy User ID** - Enregistrez votre **Server ID** et votre **User ID** avec votre Bot Token — vous enverrez les trois à OpenClaw à l’étape suivante. + Enregistrez votre **Server ID** et votre **User ID** avec votre Bot Token — vous enverrez les trois à OpenClaw à l'étape suivante. - - Pour que l’appairage fonctionne, Discord doit permettre à votre bot de vous envoyer un message privé. Faites un clic droit sur l’**icône de votre serveur** → **Privacy Settings** → activez **Direct Messages**. + + Pour que l'appairage fonctionne, Discord doit autoriser votre bot à vous envoyer des MP. Faites un clic droit sur l'**icône de votre serveur** → **Privacy Settings** → activez **Direct Messages**. - Cela permet aux membres du serveur (y compris les bots) de vous envoyer des messages privés. Laissez cette option activée si vous souhaitez utiliser les messages privés Discord avec OpenClaw. Si vous prévoyez d’utiliser uniquement les canaux de serveur, vous pouvez désactiver les messages privés après l’appairage. + Cela permet aux membres du serveur (y compris les bots) de vous envoyer des MP. Gardez cette option activée si vous voulez utiliser les MP Discord avec OpenClaw. Si vous prévoyez uniquement d'utiliser des canaux de serveur, vous pouvez désactiver les MP après l'appairage. - - Le jeton de votre bot Discord est un secret (comme un mot de passe). Définissez-le sur la machine qui exécute OpenClaw avant d’envoyer un message à votre agent. + + Le jeton de votre bot Discord est un secret (comme un mot de passe). Définissez-le sur la machine qui exécute OpenClaw avant d'envoyer un message à votre agent. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -110,7 +110,7 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Si OpenClaw s’exécute déjà comme service en arrière-plan, redémarrez-le via l’application Mac OpenClaw ou en arrêtant puis redémarrant le processus `openclaw gateway run`. + Si OpenClaw s'exécute déjà comme service en arrière-plan, redémarrez-le via l'app Mac OpenClaw ou en arrêtant puis redémarrant le processus `openclaw gateway run`. @@ -118,12 +118,12 @@ openclaw gateway - Discutez avec votre agent OpenClaw sur n’importe quel canal existant (par ex. Telegram) et dites-lui. Si Discord est votre premier canal, utilisez plutôt l’onglet CLI / config. + Discutez avec votre agent OpenClaw sur n'importe quel canal existant (par ex. Telegram) et dites-lui. Si Discord est votre premier canal, utilisez plutôt l'onglet CLI / config. - > « J’ai déjà défini mon jeton de bot Discord dans la config. Merci de terminer la configuration Discord avec l’ID utilisateur `` et l’ID serveur ``. » + > « J'ai déjà défini le jeton de mon bot Discord dans la configuration. Merci de terminer la configuration de Discord avec l'ID utilisateur `` et l'ID serveur ``. » - Si vous préférez une config basée sur un fichier, définissez : + Si vous préférez une configuration basée sur un fichier, définissez : ```json5 { @@ -140,27 +140,27 @@ openclaw gateway } ``` - Secours env pour le compte par défaut : + Repli env pour le compte par défaut : ```bash DISCORD_BOT_TOKEN=... ``` - Les valeurs `token` en texte brut sont prises en charge. Les valeurs SecretRef sont également prises en charge pour `channels.discord.token` via les fournisseurs env/file/exec. Voir [Gestion des secrets](/fr/gateway/secrets). + Les valeurs `token` en texte brut sont prises en charge. Les valeurs SecretRef sont également prises en charge pour `channels.discord.token` avec les fournisseurs env/file/exec. Voir [Gestion des secrets](/fr/gateway/secrets). - - Attendez que la passerelle soit en cours d’exécution, puis envoyez un message privé à votre bot dans Discord. Il répondra avec un code d’appairage. + + Attendez que la passerelle soit en cours d'exécution, puis envoyez un MP à votre bot dans Discord. Il répondra avec un code d'appairage. - Envoyez le code d’appairage à votre agent sur votre canal existant : + Envoyez le code d'appairage à votre agent sur votre canal existant : - > « Approuve ce code d’appairage Discord : `` » + > « Approuve ce code d'appairage Discord : `` » @@ -172,29 +172,29 @@ openclaw pairing approve discord - Les codes d’appairage expirent après 1 heure. + Les codes d'appairage expirent après 1 heure. - Vous devriez maintenant pouvoir discuter avec votre agent dans Discord via message privé. + Vous devriez maintenant pouvoir discuter avec votre agent sur Discord via MP. -La résolution du jeton tient compte du compte. Les valeurs de jeton dans la config priment sur le secours env. `DISCORD_BOT_TOKEN` n’est utilisé que pour le compte par défaut. -Pour les appels sortants avancés (outil de message/actions de canal), un `token` explicite par appel est utilisé pour cet appel. Cela s’applique aux actions de type envoi et lecture/sondage (par exemple read/search/fetch/thread/pins/permissions). Les paramètres de politique de compte/retry proviennent toujours du compte sélectionné dans l’instantané runtime actif. +La résolution des jetons tient compte du compte. Les valeurs de jeton de configuration priment sur le repli env. `DISCORD_BOT_TOKEN` n'est utilisé que pour le compte par défaut. +Pour les appels sortants avancés (outil de message/actions de canal), un `token` explicite par appel est utilisé pour cet appel. Cela s'applique aux actions de type envoi et lecture/sondage (par exemple read/search/fetch/thread/pins/permissions). Les paramètres de politique de compte et de nouvelle tentative proviennent toujours du compte sélectionné dans l'instantané d'exécution actif. ## Recommandé : configurer un espace de travail de serveur -Une fois que les messages privés fonctionnent, vous pouvez configurer votre serveur Discord comme un espace de travail complet où chaque canal obtient sa propre session d’agent avec son propre contexte. Cela est recommandé pour les serveurs privés où il n’y a que vous et votre bot. +Une fois que les MP fonctionnent, vous pouvez configurer votre serveur Discord comme un espace de travail complet où chaque canal obtient sa propre session d'agent avec son propre contexte. C'est recommandé pour les serveurs privés où il n'y a que vous et votre bot. - - Cela permet à votre agent de répondre dans n’importe quel canal de votre serveur, pas seulement en message privé. + + Cela permet à votre agent de répondre dans n'importe quel canal de votre serveur, pas seulement dans les MP. - > « Ajoute mon ID de serveur Discord `` à la liste d’autorisation des serveurs » + > « Ajoute mon ID de serveur Discord `` à la liste d'autorisation des serveurs » @@ -220,14 +220,14 @@ Une fois que les messages privés fonctionnent, vous pouvez configurer votre ser - Par défaut, votre agent répond uniquement dans les canaux de serveur lorsqu’il est @mentionné. Pour un serveur privé, vous voudrez probablement qu’il réponde à chaque message. + Par défaut, votre agent ne répond dans les canaux de serveur que lorsqu'il est @mentionné. Pour un serveur privé, vous voudrez probablement qu'il réponde à chaque message. - > « Autorise mon agent à répondre sur ce serveur sans devoir être @mentionné » + > « Autorise mon agent à répondre sur ce serveur sans avoir besoin d'être @mentionné » - Définissez `requireMention: false` dans la config de votre serveur : + Définissez `requireMention: false` dans votre configuration de serveur : ```json5 { @@ -249,37 +249,37 @@ Une fois que les messages privés fonctionnent, vous pouvez configurer votre ser - Par défaut, la mémoire à long terme (MEMORY.md) n’est chargée que dans les sessions de messages privés. Les canaux de serveur ne chargent pas automatiquement MEMORY.md. + Par défaut, la mémoire à long terme (MEMORY.md) n'est chargée que dans les sessions MP. Les canaux de serveur ne chargent pas automatiquement MEMORY.md. - > « Quand je pose des questions dans les canaux Discord, utilise memory_search ou memory_get si tu as besoin de contexte à long terme depuis MEMORY.md. » + > « Quand je pose des questions dans des canaux Discord, utilise memory_search ou memory_get si tu as besoin de contexte à long terme depuis MEMORY.md. » - Si vous avez besoin d’un contexte partagé dans chaque canal, placez les instructions stables dans `AGENTS.md` ou `USER.md` (ils sont injectés pour chaque session). Conservez les notes à long terme dans `MEMORY.md` et accédez-y à la demande avec les outils de mémoire. + Si vous avez besoin d'un contexte partagé dans chaque canal, placez les instructions stables dans `AGENTS.md` ou `USER.md` (elles sont injectées pour chaque session). Gardez les notes à long terme dans `MEMORY.md` et accédez-y à la demande avec les outils de mémoire. -Créez maintenant quelques canaux sur votre serveur Discord et commencez à discuter. Votre agent peut voir le nom du canal, et chaque canal obtient sa propre session isolée — vous pouvez donc configurer `#coding`, `#home`, `#research`, ou tout autre élément adapté à votre flux de travail. +Créez maintenant quelques canaux sur votre serveur Discord et commencez à discuter. Votre agent peut voir le nom du canal, et chaque canal obtient sa propre session isolée — vous pouvez donc configurer `#coding`, `#home`, `#research`, ou ce qui convient à votre flux de travail. -## Modèle runtime +## Modèle d'exécution -- La passerelle possède la connexion Discord. -- Le routage des réponses est déterministe : les réponses entrantes sur Discord repartent vers Discord. -- Par défaut (`session.dmScope=main`), les conversations directes partagent la session principale de l’agent (`agent:main:main`). +- La passerelle gère la connexion Discord. +- Le routage des réponses est déterministe : les réponses entrantes Discord repartent vers Discord. +- Par défaut (`session.dmScope=main`), les discussions directes partagent la session principale de l'agent (`agent:main:main`). - Les canaux de serveur utilisent des clés de session isolées (`agent::discord:channel:`). -- Les messages privés de groupe sont ignorés par défaut (`channels.discord.dm.groupEnabled=false`). -- Les commandes slash natives s’exécutent dans des sessions de commande isolées (`agent::discord:slash:`), tout en transportant `CommandTargetSessionKey` vers la session de conversation routée. +- Les MP de groupe sont ignorés par défaut (`channels.discord.dm.groupEnabled=false`). +- Les commandes slash natives s'exécutent dans des sessions de commande isolées (`agent::discord:slash:`), tout en transportant `CommandTargetSessionKey` vers la session de conversation routée. -## Canaux de forum +## Canaux forum -Les canaux de forum et de médias Discord n’acceptent que les publications dans des fils. OpenClaw prend en charge deux façons de les créer : +Les canaux forum et média Discord n'acceptent que les publications dans des fils. OpenClaw prend en charge deux façons de les créer : -- Envoyez un message au parent du forum (`channel:`) pour créer automatiquement un fil. Le titre du fil utilise la première ligne non vide de votre message. -- Utilisez `openclaw message thread create` pour créer un fil directement. Ne passez pas `--message-id` pour les canaux de forum. +- Envoyer un message au parent du forum (`channel:`) pour créer automatiquement un fil. Le titre du fil utilise la première ligne non vide de votre message. +- Utiliser `openclaw message thread create` pour créer un fil directement. Ne passez pas `--message-id` pour les canaux forum. Exemple : envoyer au parent du forum pour créer un fil @@ -295,33 +295,33 @@ openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Les parents de forum n’acceptent pas les composants Discord. Si vous avez besoin de composants, envoyez au fil lui-même (`channel:`). +Les parents de forum n'acceptent pas les composants Discord. Si vous avez besoin de composants, envoyez au fil lui-même (`channel:`). ## Composants interactifs -OpenClaw prend en charge les conteneurs Discord components v2 pour les messages d’agent. Utilisez l’outil de message avec une charge utile `components`. Les résultats d’interaction sont renvoyés à l’agent comme des messages entrants normaux et suivent les paramètres Discord `replyToMode` existants. +OpenClaw prend en charge les conteneurs Discord components v2 pour les messages d'agent. Utilisez l'outil de message avec une charge utile `components`. Les résultats d'interaction sont renvoyés à l'agent comme des messages entrants normaux et suivent les paramètres Discord `replyToMode` existants. Blocs pris en charge : - `text`, `section`, `separator`, `actions`, `media-gallery`, `file` -- Les lignes d’action autorisent jusqu’à 5 boutons ou un seul menu de sélection +- Les rangées d'actions autorisent jusqu'à 5 boutons ou un seul menu de sélection - Types de sélection : `string`, `user`, `role`, `mentionable`, `channel` -Par défaut, les composants sont à usage unique. Définissez `components.reusable=true` pour permettre d’utiliser les boutons, sélections et formulaires plusieurs fois jusqu’à leur expiration. +Par défaut, les composants sont à usage unique. Définissez `components.reusable=true` pour autoriser l'utilisation multiple des boutons, sélections et formulaires jusqu'à leur expiration. -Pour restreindre qui peut cliquer sur un bouton, définissez `allowedUsers` sur ce bouton (IDs utilisateur Discord, tags ou `*`). Lorsqu’il est configuré, les utilisateurs non correspondants reçoivent un refus éphémère. +Pour restreindre qui peut cliquer sur un bouton, définissez `allowedUsers` sur ce bouton (ID utilisateur Discord, tags, ou `*`). Lorsque cette option est configurée, les utilisateurs sans correspondance reçoivent un refus éphémère. -Les commandes slash `/model` et `/models` ouvrent un sélecteur de modèle interactif avec des listes déroulantes de fournisseur et de modèle, ainsi qu’une étape Submit. La réponse du sélecteur est éphémère et seul l’utilisateur qui l’a invoqué peut l’utiliser. +Les commandes slash `/model` et `/models` ouvrent un sélecteur de modèle interactif avec des listes déroulantes de fournisseur et de modèle ainsi qu'une étape Submit. La réponse du sélecteur est éphémère et seul l'utilisateur qui l'a invoqué peut l'utiliser. Pièces jointes de fichier : - les blocs `file` doivent pointer vers une référence de pièce jointe (`attachment://`) - fournissez la pièce jointe via `media`/`path`/`filePath` (fichier unique) ; utilisez `media-gallery` pour plusieurs fichiers -- utilisez `filename` pour remplacer le nom d’envoi lorsqu’il doit correspondre à la référence de pièce jointe +- utilisez `filename` pour remplacer le nom de téléversement lorsqu'il doit correspondre à la référence de pièce jointe Formulaires modaux : -- ajoutez `components.modal` avec jusqu’à 5 champs +- ajoutez `components.modal` avec jusqu'à 5 champs - types de champ : `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw ajoute automatiquement un bouton de déclenchement @@ -379,31 +379,31 @@ Exemple : } ``` -## Contrôle d’accès et routage +## Contrôle d'accès et routage - - `channels.discord.dmPolicy` contrôle l’accès aux messages privés (hérité : `channels.discord.dm.policy`) : + + `channels.discord.dmPolicy` contrôle l'accès aux MP (hérité : `channels.discord.dm.policy`) : - `pairing` (par défaut) - `allowlist` - `open` (nécessite que `channels.discord.allowFrom` inclue `"*"` ; hérité : `channels.discord.dm.allowFrom`) - `disabled` - Si la politique des messages privés n’est pas ouverte, les utilisateurs inconnus sont bloqués (ou invités à s’appairer en mode `pairing`). + Si la politique de MP n'est pas ouverte, les utilisateurs inconnus sont bloqués (ou invités à s'appairer en mode `pairing`). Priorité multi-comptes : - - `channels.discord.accounts.default.allowFrom` s’applique uniquement au compte `default`. - - Les comptes nommés héritent de `channels.discord.allowFrom` lorsque leur propre `allowFrom` n’est pas défini. - - Les comptes nommés n’héritent pas de `channels.discord.accounts.default.allowFrom`. + - `channels.discord.accounts.default.allowFrom` s'applique uniquement au compte `default`. + - Les comptes nommés héritent de `channels.discord.allowFrom` lorsque leur propre `allowFrom` n'est pas défini. + - Les comptes nommés n'héritent pas de `channels.discord.accounts.default.allowFrom`. - Format de cible DM pour la remise : + Format de cible MP pour la remise : - `user:` - mention `<@id>` - Les IDs numériques seuls sont ambigus et rejetés, sauf si un type de cible utilisateur/canal explicite est fourni. + Les ID numériques bruts sont ambigus et rejetés sauf si un type de cible utilisateur/canal explicite est fourni. @@ -414,16 +414,16 @@ Exemple : - `allowlist` - `disabled` - La base sécurisée lorsque `channels.discord` existe est `allowlist`. + La base sécurisée quand `channels.discord` existe est `allowlist`. Comportement de `allowlist` : - le serveur doit correspondre à `channels.discord.guilds` (`id` préféré, slug accepté) - - listes d’autorisation facultatives d’expéditeurs : `users` (IDs stables recommandés) et `roles` (IDs de rôle uniquement) ; si l’un ou l’autre est configuré, les expéditeurs sont autorisés lorsqu’ils correspondent à `users` OU `roles` - - la correspondance directe nom/tag est désactivée par défaut ; activez `channels.discord.dangerouslyAllowNameMatching: true` uniquement comme mode de compatibilité de dernier recours - - les noms/tags sont pris en charge pour `users`, mais les IDs sont plus sûrs ; `openclaw security audit` avertit lorsque des entrées nom/tag sont utilisées + - listes d'autorisation facultatives d'expéditeur : `users` (ID stables recommandés) et `roles` (ID de rôle uniquement) ; si l'une ou l'autre est configurée, les expéditeurs sont autorisés lorsqu'ils correspondent à `users` OU `roles` + - la correspondance directe par nom/tag est désactivée par défaut ; activez `channels.discord.dangerouslyAllowNameMatching: true` uniquement comme mode de compatibilité de secours + - les noms/tags sont pris en charge pour `users`, mais les ID sont plus sûrs ; `openclaw security audit` avertit lorsque des entrées de nom/tag sont utilisées - si un serveur a `channels` configuré, les canaux non listés sont refusés - - si un serveur n’a pas de bloc `channels`, tous les canaux de ce serveur autorisé sont permis + - si un serveur n'a pas de bloc `channels`, tous les canaux de ce serveur autorisé sont autorisés Exemple : @@ -449,33 +449,33 @@ Exemple : } ``` - Si vous définissez seulement `DISCORD_BOT_TOKEN` et ne créez pas de bloc `channels.discord`, le secours runtime est `groupPolicy="allowlist"` (avec un avertissement dans les journaux), même si `channels.defaults.groupPolicy` est `open`. + Si vous définissez uniquement `DISCORD_BOT_TOKEN` et ne créez pas de bloc `channels.discord`, le comportement de repli à l'exécution est `groupPolicy="allowlist"` (avec un avertissement dans les journaux), même si `channels.defaults.groupPolicy` est `open`. - - Les messages de serveur sont soumis à une exigence de mention par défaut. + + Les messages de serveur sont soumis aux mentions par défaut. - La détection des mentions inclut : + La détection de mention inclut : - mention explicite du bot - - motifs de mention configurés (`agents.list[].groupChat.mentionPatterns`, secours `messages.groupChat.mentionPatterns`) - - comportement implicite de réponse au bot dans les cas pris en charge + - motifs de mention configurés (`agents.list[].groupChat.mentionPatterns`, repli `messages.groupChat.mentionPatterns`) + - comportement implicite de réponse-au-bot dans les cas pris en charge `requireMention` est configuré par serveur/canal (`channels.discord.guilds...`). `ignoreOtherMentions` ignore éventuellement les messages qui mentionnent un autre utilisateur/rôle mais pas le bot (hors @everyone/@here). - Messages privés de groupe : + MP de groupe : - par défaut : ignorés (`dm.groupEnabled=false`) - - liste d’autorisation facultative via `dm.groupChannels` (IDs ou slugs de canal) + - liste d'autorisation facultative via `dm.groupChannels` (ID de canal ou slugs) -### Routage d’agent basé sur les rôles +### Routage d'agent basé sur les rôles -Utilisez `bindings[].match.roles` pour router les membres de serveur Discord vers différents agents par ID de rôle. Les liaisons basées sur les rôles n’acceptent que des IDs de rôle et sont évaluées après les liaisons peer ou parent-peer et avant les liaisons uniquement basées sur le serveur. Si une liaison définit également d’autres champs de correspondance (par exemple `peer` + `guildId` + `roles`), tous les champs configurés doivent correspondre. +Utilisez `bindings[].match.roles` pour router les membres d'un serveur Discord vers différents agents par ID de rôle. Les liaisons basées sur les rôles acceptent uniquement les ID de rôle et sont évaluées après les liaisons pair ou pair parent, et avant les liaisons serveur seules. Si une liaison définit aussi d'autres champs de correspondance (par exemple `peer` + `guildId` + `roles`), tous les champs configurés doivent correspondre. ```json5 { @@ -499,12 +499,12 @@ Utilisez `bindings[].match.roles` pour router les membres de serveur Discord ver } ``` -## Configuration du Developer Portal +## Configuration du Portail développeur - 1. Discord Developer Portal -> **Applications** -> **New Application** + 1. Portail développeur Discord -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** 3. Copiez le jeton du bot @@ -516,12 +516,12 @@ Utilisez `bindings[].match.roles` pour router les membres de serveur Discord ver - Message Content Intent - Server Members Intent (recommandé) - Presence intent est facultatif et n’est requis que si vous souhaitez recevoir des mises à jour de présence. Définir la présence du bot (`setPresence`) ne nécessite pas d’activer les mises à jour de présence pour les membres. + L'intent de présence est facultatif et uniquement requis si vous voulez recevoir des mises à jour de présence. Définir la présence du bot (`setPresence`) ne nécessite pas d'activer les mises à jour de présence pour les membres. - Générateur d’URL OAuth : + Générateur d'URL OAuth : - scopes : `bot`, `applications.commands` @@ -534,29 +534,29 @@ Utilisez `bindings[].match.roles` pour router les membres de serveur Discord ver - Attach Files - Add Reactions (facultatif) - Évitez `Administrator` sauf nécessité explicite. + Évitez `Administrator` sauf en cas de besoin explicite. - + Activez le mode développeur Discord, puis copiez : - ID du serveur - ID du canal - - ID de l’utilisateur + - ID de l'utilisateur - Préférez les IDs numériques dans la config OpenClaw pour des audits et des sondages plus fiables. + Préférez les ID numériques dans la configuration OpenClaw pour des audits et sondages fiables. -## Commandes natives et autorisation des commandes +## Commandes natives et authentification des commandes -- `commands.native` a la valeur par défaut `"auto"` et est activé pour Discord. +- `commands.native` vaut par défaut `"auto"` et est activé pour Discord. - Remplacement par canal : `channels.discord.commands.native`. -- `commands.native=false` supprime explicitement les commandes natives Discord précédemment enregistrées. -- L’autorisation des commandes natives utilise les mêmes listes d’autorisation/politiques Discord que la gestion normale des messages. -- Les commandes peuvent toujours être visibles dans l’interface Discord pour les utilisateurs non autorisés ; l’exécution applique néanmoins l’autorisation OpenClaw et renvoie « non autorisé ». +- `commands.native=false` efface explicitement les commandes natives Discord précédemment enregistrées. +- L'authentification des commandes natives utilise les mêmes listes d'autorisation/politiques Discord que la gestion normale des messages. +- Les commandes peuvent quand même être visibles dans l'interface Discord pour les utilisateurs non autorisés ; l'exécution applique toujours l'authentification OpenClaw et renvoie « non autorisé ». Voir [Commandes slash](/fr/tools/slash-commands) pour le catalogue et le comportement des commandes. @@ -568,7 +568,7 @@ Paramètres par défaut des commandes slash : - Discord prend en charge les balises de réponse dans la sortie de l’agent : + Discord prend en charge les balises de réponse dans la sortie de l'agent : - `[[reply_to_current]]` - `[[reply_to:]]` @@ -580,26 +580,26 @@ Paramètres par défaut des commandes slash : - `all` - `batched` - Remarque : `off` désactive le fil de réponse implicite. Les balises explicites `[[reply_to_*]]` sont toujours respectées. + Remarque : `off` désactive le threading implicite des réponses. Les balises explicites `[[reply_to_*]]` sont toujours respectées. `first` attache toujours la référence de réponse native implicite au premier message Discord sortant du tour. - `batched` n’attache la référence de réponse native implicite de Discord que lorsque - le tour entrant était un lot temporisé de plusieurs messages. C’est utile - lorsque vous voulez des réponses natives surtout pour des conversations ambiguës et saccadées, et non pour - chaque tour à message unique. + `batched` attache uniquement la référence de réponse native implicite de Discord lorsque le + tour entrant était un lot temporisé de plusieurs messages. Cela est utile + si vous voulez des réponses natives surtout pour les discussions ambiguës et chargées, pas pour chaque + tour à message unique. - Les IDs de message sont exposés dans le contexte/l’historique afin que les agents puissent cibler des messages spécifiques. + Les ID de message sont exposés dans le contexte/l'historique afin que les agents puissent cibler des messages spécifiques. - + OpenClaw peut diffuser des brouillons de réponse en envoyant un message temporaire puis en le modifiant à mesure que le texte arrive. - - `channels.discord.streaming` contrôle le flux d’aperçu (`off` | `partial` | `block` | `progress`, par défaut : `off`). - - La valeur par défaut reste `off` car les modifications d’aperçu Discord peuvent rapidement atteindre les limites de débit, surtout lorsque plusieurs bots ou passerelles partagent le même compte ou le trafic d’un même serveur. - - `progress` est accepté pour la cohérence inter-canaux et correspond à `partial` sur Discord. + - `channels.discord.streaming` contrôle la diffusion d'aperçu (`off` | `partial` | `block` | `progress`, par défaut : `off`). + - La valeur par défaut reste `off` car les modifications d'aperçu Discord peuvent rapidement atteindre les limites de débit, surtout lorsque plusieurs bots ou passerelles partagent le même compte ou trafic de serveur. + - `progress` est accepté pour la cohérence inter-canaux et est mappé vers `partial` sur Discord. - `channels.discord.streamMode` est un alias hérité et est migré automatiquement. - - `partial` modifie un seul message d’aperçu à mesure que les tokens arrivent. - - `block` émet des fragments de taille brouillon (utilisez `draftChunk` pour ajuster la taille et les points de coupure). + - `partial` modifie un seul message d'aperçu à mesure que les jetons arrivent. + - `block` émet des morceaux de taille brouillon (utilisez `draftChunk` pour ajuster la taille et les points de coupure). Exemple : @@ -613,7 +613,7 @@ Paramètres par défaut des commandes slash : } ``` - Valeurs par défaut de fragmentation du mode `block` (limitées à `channels.discord.textChunkLimit`) : + Valeurs par défaut de découpage en mode `block` (bornées par `channels.discord.textChunkLimit`) : ```json5 { @@ -630,21 +630,21 @@ Paramètres par défaut des commandes slash : } ``` - Le flux d’aperçu est réservé au texte ; les réponses média reviennent à la remise normale. + La diffusion d'aperçu est uniquement textuelle ; les réponses média reviennent à la remise normale. - Remarque : le flux d’aperçu est distinct du flux par blocs. Lorsque le flux par blocs est explicitement - activé pour Discord, OpenClaw ignore le flux d’aperçu pour éviter un double flux. + Remarque : la diffusion d'aperçu est distincte de la diffusion par blocs. Lorsque la diffusion par blocs est explicitement + activée pour Discord, OpenClaw ignore le flux d'aperçu pour éviter une double diffusion. - Contexte de l’historique du serveur : + Contexte d'historique de serveur : - `channels.discord.historyLimit` par défaut `20` - - secours : `messages.groupChat.historyLimit` + - repli : `messages.groupChat.historyLimit` - `0` désactive - Contrôles de l’historique des messages privés : + Contrôles d'historique des MP : - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` @@ -652,25 +652,25 @@ Paramètres par défaut des commandes slash : Comportement des fils : - les fils Discord sont routés comme des sessions de canal - - les métadonnées du fil parent peuvent être utilisées pour la liaison vers la session parente - - la config du fil hérite de la config du canal parent sauf si une entrée spécifique au fil existe + - les métadonnées du fil parent peuvent être utilisées pour le lien vers la session parente + - la configuration du fil hérite de la configuration du canal parent sauf si une entrée spécifique au fil existe - Les sujets de canal sont injectés comme contexte **non fiable** (et non comme prompt système). - Le contexte des réponses et des messages cités reste actuellement tel que reçu. - Les listes d’autorisation Discord contrôlent principalement qui peut déclencher l’agent, pas une frontière complète de masquage du contexte supplémentaire. + Les sujets de canal sont injectés comme contexte **non fiable** (pas comme prompt système). + Le contexte des réponses et messages cités reste actuellement tel que reçu. + Les listes d'autorisation Discord servent principalement à contrôler qui peut déclencher l'agent, et non comme frontière complète de masquage de contexte supplémentaire. - - Discord peut lier un fil à une cible de session afin que les messages de suivi dans ce fil continuent d’être routés vers la même session (y compris les sessions de sous-agent). + + Discord peut lier un fil à une cible de session afin que les messages de suivi dans ce fil continuent d'être routés vers la même session (y compris les sessions de sous-agent). Commandes : - - `/focus ` lier le fil actuel/nouveau à une cible de sous-agent/session - - `/unfocus` supprimer la liaison actuelle du fil - - `/agents` afficher les exécutions actives et l’état de la liaison - - `/session idle ` inspecter/mettre à jour le retrait automatique du focus après inactivité pour les liaisons ciblées - - `/session max-age ` inspecter/mettre à jour l’âge maximal strict pour les liaisons ciblées + - `/focus ` lie le fil actuel/nouveau à une cible de sous-agent/session + - `/unfocus` supprime la liaison du fil actuel + - `/agents` affiche les exécutions actives et l'état des liaisons + - `/session idle ` inspecte/met à jour la suppression automatique de liaison par inactivité pour les liaisons focalisées + - `/session max-age ` inspecte/met à jour l'âge maximal strict pour les liaisons focalisées Config : @@ -699,10 +699,10 @@ Paramètres par défaut des commandes slash : Remarques : - `session.threadBindings.*` définit les valeurs par défaut globales. - - `channels.discord.threadBindings.*` remplace le comportement Discord. - - `spawnSubagentSessions` doit être à true pour créer/lier automatiquement des fils pour `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` doit être à true pour créer/lier automatiquement des fils pour ACP (`/acp spawn ... --thread ...` ou `sessions_spawn({ runtime: "acp", thread: true })`). - - Si les liaisons de fil sont désactivées pour un compte, `/focus` et les opérations liées aux liaisons de fil ne sont pas disponibles. + - `channels.discord.threadBindings.*` remplace le comportement de Discord. + - `spawnSubagentSessions` doit être true pour créer/lier automatiquement des fils pour `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` doit être true pour créer/lier automatiquement des fils pour ACP (`/acp spawn ... --thread ...` ou `sessions_spawn({ runtime: "acp", thread: true })`). + - Si les liaisons de fils sont désactivées pour un compte, `/focus` et les opérations liées aux liaisons de fils ne sont pas disponibles. Voir [Sous-agents](/fr/tools/subagents), [Agents ACP](/fr/tools/acp-agents) et [Référence de configuration](/fr/gateway/configuration-reference). @@ -711,7 +711,7 @@ Paramètres par défaut des commandes slash : Pour des espaces de travail ACP stables « toujours actifs », configurez des liaisons ACP typées de niveau supérieur ciblant des conversations Discord. - Chemin de config : + Chemin de configuration : - `bindings[]` avec `type: "acp"` et `match.channel: "discord"` @@ -765,19 +765,19 @@ Paramètres par défaut des commandes slash : Remarques : - - `/acp spawn codex --bind here` lie le canal ou le fil Discord actuel sur place et maintient le routage des messages futurs vers la même session ACP. - - Cela peut toujours signifier « démarrer une nouvelle session ACP Codex », mais cela ne crée pas à lui seul un nouveau fil Discord. Le canal existant reste la surface de discussion. - - Codex peut toujours s’exécuter dans son propre `cwd` ou espace de travail backend sur disque. Cet espace de travail est un état runtime, pas un fil Discord. - - Les messages du fil peuvent hériter de la liaison ACP du canal parent. - - Dans un canal ou un fil lié, `/new` et `/reset` réinitialisent la même session ACP sur place. - - Les liaisons de fil temporaires fonctionnent toujours et peuvent remplacer la résolution de la cible tant qu’elles sont actives. - - `spawnAcpSessions` n’est requis que lorsque OpenClaw doit créer/lier un fil enfant via `--thread auto|here`. Il n’est pas requis pour `/acp spawn ... --bind here` dans le canal actuel. + - `/acp spawn codex --bind here` lie le canal ou fil Discord actuel sur place et garde les messages futurs routés vers la même session ACP. + - Cela peut quand même signifier « démarrer une nouvelle session ACP Codex », mais cela ne crée pas de nouveau fil Discord à lui seul. Le canal existant reste la surface de discussion. + - Codex peut toujours s'exécuter dans son propre `cwd` ou espace de travail backend sur disque. Cet espace de travail est un état d'exécution, pas un fil Discord. + - Les messages de fil peuvent hériter de la liaison ACP du canal parent. + - Dans un canal ou fil lié, `/new` et `/reset` réinitialisent la même session ACP sur place. + - Les liaisons temporaires de fils fonctionnent toujours et peuvent remplacer la résolution de la cible tant qu'elles sont actives. + - `spawnAcpSessions` n'est requis que lorsque OpenClaw doit créer/lier un fil enfant via `--thread auto|here`. Ce n'est pas requis pour `/acp spawn ... --bind here` dans le canal actuel. - Voir [Agents ACP](/fr/tools/acp-agents) pour les détails du comportement de liaison. + Voir [Agents ACP](/fr/tools/acp-agents) pour les détails du comportement des liaisons. - + Mode de notification des réactions par serveur : - `off` @@ -785,29 +785,29 @@ Paramètres par défaut des commandes slash : - `all` - `allowlist` (utilise `guilds..users`) - Les événements de réaction sont transformés en événements système et attachés à la session Discord routée. + Les événements de réaction sont transformés en événements système et joints à la session Discord routée. - - `ackReaction` envoie un emoji d’accusé de réception pendant qu’OpenClaw traite un message entrant. + + `ackReaction` envoie un emoji d'accusé de réception pendant que OpenClaw traite un message entrant. Ordre de résolution : - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - secours via l’emoji d’identité de l’agent (`agents.list[].identity.emoji`, sinon "👀") + - repli sur l'emoji d'identité de l'agent (`agents.list[].identity.emoji`, sinon "👀") Remarques : - - Discord accepte les emoji unicode ou les noms d’emoji personnalisés. + - Discord accepte les emoji unicode ou les noms d'emoji personnalisés. - Utilisez `""` pour désactiver la réaction pour un canal ou un compte. - - Les écritures de config initiées par canal sont activées par défaut. + + Les écritures de configuration initiées par le canal sont activées par défaut. Cela affecte les flux `/config set|unset` (lorsque les fonctionnalités de commande sont activées). @@ -826,7 +826,7 @@ Paramètres par défaut des commandes slash : - Faites passer le trafic WebSocket de la passerelle Discord et les recherches REST au démarrage (ID d’application + résolution de la liste d’autorisation) via un proxy HTTP(S) avec `channels.discord.proxy`. + Routez le trafic WebSocket de la passerelle Discord et les recherches REST de démarrage (ID d'application + résolution de liste d'autorisation) via un proxy HTTP(S) avec `channels.discord.proxy`. ```json5 { @@ -857,7 +857,7 @@ Paramètres par défaut des commandes slash : - Activez la résolution PluralKit pour associer les messages proxifiés à l’identité du membre du système : + Activez la résolution PluralKit pour mapper les messages relayés à l'identité du membre du système : ```json5 { @@ -874,17 +874,17 @@ Paramètres par défaut des commandes slash : Remarques : - - les listes d’autorisation peuvent utiliser `pk:` - - les noms d’affichage des membres ne sont associés par nom/slug que lorsque `channels.discord.dangerouslyAllowNameMatching: true` - - les recherches utilisent l’ID du message d’origine et sont limitées par une fenêtre temporelle - - si la recherche échoue, les messages proxifiés sont traités comme des messages de bot et ignorés sauf si `allowBots=true` + - les listes d'autorisation peuvent utiliser `pk:` + - les noms d'affichage des membres sont mis en correspondance par nom/slug uniquement lorsque `channels.discord.dangerouslyAllowNameMatching: true` + - les recherches utilisent l'ID du message d'origine et sont limitées par fenêtre temporelle + - si la recherche échoue, les messages relayés sont traités comme des messages de bot et ignorés sauf si `allowBots=true` - - Les mises à jour de présence sont appliquées lorsque vous définissez un champ de statut ou d’activité, ou lorsque vous activez la présence automatique. + + Les mises à jour de présence sont appliquées lorsque vous définissez un champ d'état ou d'activité, ou lorsque vous activez la présence automatique. - Exemple de statut uniquement : + Exemple état uniquement : ```json5 { @@ -896,7 +896,7 @@ Paramètres par défaut des commandes slash : } ``` - Exemple d’activité (le statut personnalisé est le type d’activité par défaut) : + Exemple d'activité (le statut personnalisé est le type d'activité par défaut) : ```json5 { @@ -923,16 +923,16 @@ Paramètres par défaut des commandes slash : } ``` - Correspondance des types d’activité : + Correspondance des types d'activité : - 0 : Playing - 1 : Streaming (nécessite `activityUrl`) - 2 : Listening - 3 : Watching - - 4 : Custom (utilise le texte d’activité comme état du statut ; l’emoji est facultatif) + - 4 : Custom (utilise le texte d'activité comme état du statut ; emoji facultatif) - 5 : Competing - Exemple de présence automatique (signal d’état runtime) : + Exemple de présence automatique (signal d'état d'exécution) : ```json5 { @@ -949,59 +949,59 @@ Paramètres par défaut des commandes slash : } ``` - La présence automatique associe la disponibilité runtime au statut Discord : healthy => online, degraded ou unknown => idle, exhausted ou unavailable => dnd. Remplacements de texte facultatifs : + La présence automatique mappe la disponibilité d'exécution vers l'état Discord : sain => online, dégradé ou inconnu => idle, épuisé ou indisponible => dnd. Remplacements de texte facultatifs : - `autoPresence.healthyText` - `autoPresence.degradedText` - - `autoPresence.exhaustedText` (prend en charge l’espace réservé `{reason}`) + - `autoPresence.exhaustedText` (prend en charge le placeholder `{reason}`) - Discord prend en charge la gestion des approbations par bouton dans les messages privés et peut éventuellement publier les invites d’approbation dans le canal d’origine. + Discord prend en charge le traitement des approbations via boutons en MP et peut éventuellement publier les invites d'approbation dans le canal d'origine. - Chemin de config : + Chemin de configuration : - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (facultatif ; revient à `commands.ownerAllowFrom` lorsque possible) + - `channels.discord.execApprovals.approvers` (facultatif ; utilise `commands.ownerAllowFrom` comme repli lorsque possible) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, par défaut : `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord active automatiquement les approbations d’exécution natives lorsque `enabled` n’est pas défini ou vaut `"auto"` et qu’au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis `commands.ownerAllowFrom`. Discord ne déduit pas les approbateurs d’exécution depuis `allowFrom` du canal, `dm.allowFrom` hérité ou `defaultTo` des messages directs. Définissez `enabled: false` pour désactiver explicitement Discord comme client d’approbation natif. + Discord active automatiquement les approbations d'exécution natives lorsque `enabled` n'est pas défini ou vaut `"auto"` et qu'au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis `commands.ownerAllowFrom`. Discord ne déduit pas les approbateurs d'exécution à partir de `allowFrom` du canal, de `dm.allowFrom` hérité, ni de `defaultTo` des messages directs. Définissez `enabled: false` pour désactiver explicitement Discord comme client d'approbation natif. - Lorsque `target` vaut `channel` ou `both`, l’invite d’approbation est visible dans le canal. Seuls les approbateurs résolus peuvent utiliser les boutons ; les autres utilisateurs reçoivent un refus éphémère. Les invites d’approbation incluent le texte de la commande ; n’activez donc la remise dans le canal que dans des canaux de confiance. Si l’ID du canal ne peut pas être dérivé depuis la clé de session, OpenClaw revient à la remise par message privé. + Lorsque `target` vaut `channel` ou `both`, l'invite d'approbation est visible dans le canal. Seuls les approbateurs résolus peuvent utiliser les boutons ; les autres utilisateurs reçoivent un refus éphémère. Les invites d'approbation incluent le texte de la commande, donc n'activez la remise dans le canal que dans des canaux de confiance. Si l'ID du canal ne peut pas être dérivé de la clé de session, OpenClaw revient à la remise par MP. - Discord affiche également les boutons d’approbation partagés utilisés par d’autres canaux de chat. L’adaptateur natif Discord ajoute principalement le routage des messages privés aux approbateurs et la diffusion vers le canal. - Lorsque ces boutons sont présents, ils constituent l’UX d’approbation principale ; OpenClaw - ne doit inclure une commande manuelle `/approve` que lorsque le résultat de l’outil indique - que les approbations par chat ne sont pas disponibles ou que l’approbation manuelle est le seul chemin. + Discord affiche également les boutons d'approbation partagés utilisés par d'autres canaux de chat. L'adaptateur Discord natif ajoute principalement le routage des MP d'approbateur et la diffusion en éventail vers les canaux. + Lorsque ces boutons sont présents, ils constituent l'expérience d'approbation principale ; OpenClaw + ne doit inclure une commande manuelle `/approve` que lorsque le résultat de l'outil indique + que les approbations par chat sont indisponibles ou que l'approbation manuelle est la seule voie possible. - L’authentification Gateway pour ce gestionnaire utilise le même contrat partagé de résolution d’identifiants que les autres clients Gateway : + L'authentification de la passerelle pour ce gestionnaire utilise le même contrat partagé de résolution des identifiants que les autres clients de la passerelle : - authentification locale env-first (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` puis `gateway.auth.*`) - - en mode local, `gateway.remote.*` peut être utilisé en secours uniquement lorsque `gateway.auth.*` n’est pas défini ; les SecretRefs locaux configurés mais non résolus échouent en mode fermé - - prise en charge du mode distant via `gateway.remote.*` lorsque applicable - - les remplacements d’URL sont sûrs vis-à-vis des remplacements : les remplacements CLI ne réutilisent pas les identifiants implicites, et les remplacements env utilisent uniquement les identifiants env + - en mode local, `gateway.remote.*` peut être utilisé comme repli uniquement lorsque `gateway.auth.*` n'est pas défini ; les SecretRef locaux configurés mais non résolus échouent en mode fermé + - prise en charge du mode distant via `gateway.remote.*` le cas échéant + - les remplacements d'URL sont sûrs vis-à-vis des remplacements : les remplacements CLI ne réutilisent pas d'identifiants implicites, et les remplacements env utilisent uniquement des identifiants env Comportement de résolution des approbations : - - les IDs préfixés par `plugin:` sont résolus via `plugin.approval.resolve`. - - les autres IDs sont résolus via `exec.approval.resolve`. - - Discord n’effectue pas ici de saut de secours supplémentaire exec-vers-plugin ; le préfixe - de l’id décide quelle méthode de passerelle il appelle. + - Les ID préfixés par `plugin:` sont résolus via `plugin.approval.resolve`. + - Les autres ID sont résolus via `exec.approval.resolve`. + - Discord n'effectue pas ici de saut de repli supplémentaire exec-vers-plugin ; le préfixe + de l'ID décide de la méthode de passerelle qu'il appelle. - Les approbations d’exécution expirent après 30 minutes par défaut. Si les approbations échouent avec - des IDs d’approbation inconnus, vérifiez la résolution des approbateurs, l’activation des fonctionnalités et - que le type d’id d’approbation remis correspond à la demande en attente. + Les approbations d'exécution expirent après 30 minutes par défaut. Si les approbations échouent avec + des ID d'approbation inconnus, vérifiez la résolution des approbateurs, l'activation de la fonctionnalité, et + que le type d'ID d'approbation remis correspond bien à la demande en attente. - Documentation associée : [Approbations d’exécution](/fr/tools/exec-approvals) + Documentation associée : [Approbations d'exécution](/fr/tools/exec-approvals) -## Outils et portes d’action +## Outils et contrôles d'actions -Les actions de message Discord incluent la messagerie, l’administration de canal, la modération, la présence et les actions sur les métadonnées. +Les actions de message Discord incluent la messagerie, l'administration de canal, la modération, la présence et les actions de métadonnées. Exemples principaux : @@ -1010,22 +1010,24 @@ Exemples principaux : - modération : `timeout`, `kick`, `ban` - présence : `setPresence` -Les portes d’action se trouvent sous `channels.discord.actions.*`. +L'action `event-create` accepte un paramètre `image` facultatif (URL ou chemin de fichier local) pour définir l'image de couverture de l'événement planifié. -Comportement par défaut des portes : +Les contrôles d'actions se trouvent sous `channels.discord.actions.*`. -| Groupe d’actions | Par défaut | +Comportement par défaut des contrôles : + +| Groupe d'actions | Par défaut | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | activé | | roles | désactivé | | moderation | désactivé | | presence | désactivé | -## UI components v2 +## UI Components v2 -OpenClaw utilise Discord components v2 pour les approbations d’exécution et les marqueurs inter-contexte. Les actions de message Discord peuvent également accepter `components` pour une UI personnalisée (avancé ; nécessite de construire une charge utile de composant via l’outil discord), tandis que les `embeds` hérités restent disponibles mais ne sont pas recommandés. +OpenClaw utilise Discord components v2 pour les approbations d'exécution et les marqueurs inter-contexte. Les actions de message Discord peuvent également accepter `components` pour une UI personnalisée (avancé ; nécessite la construction d'une charge utile de composant via l'outil discord), tandis que les `embeds` hérités restent disponibles mais ne sont pas recommandés. -- `channels.discord.ui.components.accentColor` définit la couleur d’accentuation utilisée par les conteneurs de composants Discord (hex). +- `channels.discord.ui.components.accentColor` définit la couleur d'accent utilisée par les conteneurs de composants Discord (hex). - Définissez-la par compte avec `channels.discord.accounts..ui.components.accentColor`. - `embeds` sont ignorés lorsque des components v2 sont présents. @@ -1047,7 +1049,7 @@ Exemple : ## Canaux vocaux -OpenClaw peut rejoindre des canaux vocaux Discord pour des conversations continues en temps réel. Cela est distinct des pièces jointes de messages vocaux. +OpenClaw peut rejoindre des canaux vocaux Discord pour des conversations continues en temps réel. Cela est distinct des pièces jointes de message vocal. Exigences : @@ -1055,9 +1057,9 @@ Exigences : - Configurez `channels.discord.voice`. - Le bot a besoin des autorisations Connect + Speak dans le canal vocal cible. -Utilisez la commande native Discord uniquement `/vc join|leave|status` pour contrôler les sessions. La commande utilise l’agent par défaut du compte et suit les mêmes règles de liste d’autorisation et de politique de groupe que les autres commandes Discord. +Utilisez la commande native Discord uniquement `/vc join|leave|status` pour contrôler les sessions. La commande utilise l'agent par défaut du compte et suit les mêmes règles de liste d'autorisation et de politique de groupe que les autres commandes Discord. -Exemple de jointure automatique : +Exemple de jonction automatique : ```json5 { @@ -1086,22 +1088,22 @@ Exemple de jointure automatique : Remarques : - `voice.tts` remplace `messages.tts` uniquement pour la lecture vocale. -- Les tours de transcription vocale dérivent le statut de propriétaire depuis Discord `allowFrom` (ou `dm.allowFrom`) ; les intervenants non propriétaires ne peuvent pas accéder aux outils réservés au propriétaire (par exemple `gateway` et `cron`). +- Les tours de transcription vocale dérivent le statut de propriétaire à partir de Discord `allowFrom` (ou `dm.allowFrom`) ; les intervenants non propriétaires ne peuvent pas accéder aux outils réservés au propriétaire (par exemple `gateway` et `cron`). - La voix est activée par défaut ; définissez `channels.discord.voice.enabled=false` pour la désactiver. -- `voice.daveEncryption` et `voice.decryptionFailureTolerance` sont transmis aux options de jointure `@discordjs/voice`. -- Les valeurs par défaut de `@discordjs/voice` sont `daveEncryption=true` et `decryptionFailureTolerance=24` si non définies. -- OpenClaw surveille également les échecs de déchiffrement en réception et récupère automatiquement en quittant/rejoignant le canal vocal après des échecs répétés dans une courte fenêtre. -- Si les journaux de réception affichent de façon répétée `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, il peut s’agir du bug de réception en amont `@discordjs/voice` suivi dans [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- `voice.daveEncryption` et `voice.decryptionFailureTolerance` sont transmis aux options de jonction `@discordjs/voice`. +- Les valeurs par défaut de `@discordjs/voice` sont `daveEncryption=true` et `decryptionFailureTolerance=24` si elles ne sont pas définies. +- OpenClaw surveille également les échecs de déchiffrement à la réception et récupère automatiquement en quittant puis en rejoignant à nouveau le canal vocal après des échecs répétés dans une courte fenêtre. +- Si les journaux de réception affichent de façon répétée `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, il peut s'agir du bug de réception amont `@discordjs/voice` suivi dans [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ## Messages vocaux -Les messages vocaux Discord affichent un aperçu de forme d’onde et exigent de l’audio OGG/Opus ainsi que des métadonnées. OpenClaw génère automatiquement la forme d’onde, mais il a besoin que `ffmpeg` et `ffprobe` soient disponibles sur l’hôte de la passerelle pour inspecter et convertir les fichiers audio. +Les messages vocaux Discord affichent un aperçu de forme d'onde et nécessitent de l'audio OGG/Opus ainsi que des métadonnées. OpenClaw génère automatiquement la forme d'onde, mais il a besoin de `ffmpeg` et `ffprobe` disponibles sur l'hôte de la passerelle pour inspecter et convertir les fichiers audio. Exigences et contraintes : -- Fournissez un **chemin de fichier local** (les URLs sont rejetées). -- Omettez le contenu texte (Discord n’autorise pas le texte + le message vocal dans la même charge utile). -- Tout format audio est accepté ; OpenClaw convertit en OGG/Opus lorsque nécessaire. +- Fournissez un **chemin de fichier local** (les URL sont refusées). +- Omettez le contenu texte (Discord n'autorise pas le texte + message vocal dans la même charge utile). +- Tout format audio est accepté ; OpenClaw convertit en OGG/Opus si nécessaire. Exemple : @@ -1112,18 +1114,18 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Dépannage - + - activez Message Content Intent - activez Server Members Intent lorsque vous dépendez de la résolution utilisateur/membre - - redémarrez la passerelle après modification des intents + - redémarrez la passerelle après avoir modifié les intents - vérifiez `groupPolicy` - - vérifiez la liste d’autorisation du serveur sous `channels.discord.guilds` + - vérifiez la liste d'autorisation du serveur sous `channels.discord.guilds` - si la map `channels` du serveur existe, seuls les canaux listés sont autorisés - vérifiez le comportement `requireMention` et les motifs de mention @@ -1138,11 +1140,11 @@ openclaw logs --follow - Causes courantes : + Causes fréquentes : - - `groupPolicy="allowlist"` sans liste d’autorisation correspondante du serveur/canal - - `requireMention` configuré au mauvais endroit (doit être sous `channels.discord.guilds` ou l’entrée de canal) - - expéditeur bloqué par la liste d’autorisation `users` du serveur/canal + - `groupPolicy="allowlist"` sans liste d'autorisation correspondante de serveur/canal + - `requireMention` configuré au mauvais endroit (doit se trouver sous `channels.discord.guilds` ou dans l'entrée du canal) + - expéditeur bloqué par la liste d'autorisation `users` du serveur/canal @@ -1154,12 +1156,12 @@ openclaw logs --follow - `Slow listener detected ...` - `discord inbound worker timed out after ...` - Paramètre du budget de listener : + Paramètre de budget du listener : - compte unique : `channels.discord.eventQueue.listenerTimeout` - multi-comptes : `channels.discord.accounts..eventQueue.listenerTimeout` - Paramètre du délai maximal d’exécution du worker : + Paramètre de délai d'expiration d'exécution du worker : - compte unique : `channels.discord.inboundWorker.runTimeoutMs` - multi-comptes : `channels.discord.accounts..inboundWorker.runTimeoutMs` @@ -1186,48 +1188,48 @@ openclaw logs --follow } ``` - Utilisez `eventQueue.listenerTimeout` pour les configurations lentes de listener et `inboundWorker.runTimeoutMs` - uniquement si vous voulez une soupape de sécurité distincte pour les tours d’agent en file d’attente. + Utilisez `eventQueue.listenerTimeout` pour les initialisations de listener lentes et `inboundWorker.runTimeoutMs` + uniquement si vous voulez une soupape de sécurité distincte pour les tours d'agent en file d'attente. - - Les vérifications d’autorisation `channels status --probe` ne fonctionnent que pour les IDs numériques de canal. + + Les vérifications d'autorisations `channels status --probe` ne fonctionnent que pour les ID de canal numériques. - Si vous utilisez des clés slug, la correspondance runtime peut toujours fonctionner, mais la sonde ne peut pas vérifier complètement les autorisations. + Si vous utilisez des clés slug, la correspondance à l'exécution peut toujours fonctionner, mais le sondage ne peut pas vérifier complètement les autorisations. - + - MP désactivés : `channels.discord.dm.enabled=false` - - politique DM désactivée : `channels.discord.dmPolicy="disabled"` (hérité : `channels.discord.dm.policy`) - - en attente d’approbation d’appairage en mode `pairing` + - politique MP désactivée : `channels.discord.dmPolicy="disabled"` (hérité : `channels.discord.dm.policy`) + - en attente d'approbation d'appairage en mode `pairing` - + Par défaut, les messages rédigés par des bots sont ignorés. - Si vous définissez `channels.discord.allowBots=true`, utilisez des règles strictes de mention et de liste d’autorisation pour éviter un comportement en boucle. - Préférez `channels.discord.allowBots="mentions"` pour n’accepter que les messages de bots qui mentionnent le bot. + Si vous définissez `channels.discord.allowBots=true`, utilisez des règles strictes de mention et de liste d'autorisation pour éviter les comportements de boucle. + Préférez `channels.discord.allowBots="mentions"` pour n'accepter que les messages de bots qui mentionnent le bot. - + - - maintenez OpenClaw à jour (`openclaw update`) afin que la logique de récupération de réception vocale Discord soit présente + - gardez OpenClaw à jour (`openclaw update`) afin que la logique de récupération de réception vocale Discord soit présente - confirmez `channels.discord.voice.daveEncryption=true` (par défaut) - partez de `channels.discord.voice.decryptionFailureTolerance=24` (valeur par défaut amont) et ajustez uniquement si nécessaire - surveillez les journaux pour : - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - si les échecs continuent après la reconnexion automatique, collectez les journaux et comparez avec [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - si les échecs continuent après la reconnexion automatique, collectez les journaux et comparez-les à [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) -## Pointeurs vers la référence de configuration +## Indications de référence de configuration Référence principale : @@ -1238,13 +1240,13 @@ Champs Discord à fort signal : - démarrage/auth : `enabled`, `token`, `accounts.*`, `allowBots` - politique : `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` - commande : `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` -- file d’événements : `eventQueue.listenerTimeout` (budget de listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` +- file d'événements : `eventQueue.listenerTimeout` (budget du listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` - worker entrant : `inboundWorker.runTimeoutMs` - réponse/historique : `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - remise : `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` - streaming : `streaming` (alias hérité : `streamMode`), `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- média/retry : `mediaMaxMb`, `retry` - - `mediaMaxMb` limite les envois Discord sortants (par défaut : `100MB`) +- média/nouvelle tentative : `mediaMaxMb`, `retry` + - `mediaMaxMb` plafonne les téléversements Discord sortants (par défaut : `100MB`) - actions : `actions.*` - présence : `activity`, `status`, `activityType`, `activityUrl` - UI : `ui.components.accentColor` @@ -1252,11 +1254,11 @@ Champs Discord à fort signal : ## Sécurité et opérations -- Traitez les jetons de bot comme des secrets (`DISCORD_BOT_TOKEN` recommandé dans les environnements supervisés). -- Accordez le minimum d’autorisations Discord nécessaire. -- Si l’état/le déploiement des commandes est obsolète, redémarrez la passerelle puis revérifiez avec `openclaw channels status --probe`. +- Traitez les jetons de bot comme des secrets (`DISCORD_BOT_TOKEN` de préférence dans les environnements supervisés). +- Accordez le minimum d'autorisations Discord nécessaire. +- Si le déploiement/l'état des commandes est obsolète, redémarrez la passerelle et revérifiez avec `openclaw channels status --probe`. -## Connexe +## Liens associés - [Appairage](/fr/channels/pairing) - [Groupes](/fr/channels/groups) diff --git a/docs/fr/concepts/dreaming.md b/docs/fr/concepts/dreaming.md index ceb35af53..b83b3b80d 100644 --- a/docs/fr/concepts/dreaming.md +++ b/docs/fr/concepts/dreaming.md @@ -1,15 +1,15 @@ --- read_when: - - Vous souhaitez que la promotion de la mémoire s’exécute automatiquement + - Vous souhaitez que la promotion de la mémoire s'exécute automatiquement - 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 +summary: Consolidation de la mémoire en arrière-plan avec des phases légères, profondes et REM, plus un Journal des rêves title: Dreaming (expérimental) x-i18n: - generated_at: "2026-04-06T06:56:53Z" + generated_at: "2026-04-08T06:51:00Z" model: gpt-5.4 provider: openai - source_hash: 36c4b1e70801d662090dc8ce20608c2f141c23cd7ce53c54e3dcf332c801fd4e + source_hash: 0254f3b0949158264e583c12f36f2b1a83d1b44dc4da01a1b272422d38e8655d source_path: concepts/dreaming.md workflow: 15 --- @@ -17,94 +17,101 @@ x-i18n: # Dreaming (expérimental) Dreaming est le système de consolidation de la mémoire en arrière-plan dans `memory-core`. -Il aide OpenClaw à déplacer des signaux forts de la mémoire à court terme vers une mémoire durable, tout en +Il aide OpenClaw à déplacer des signaux forts à court terme vers une mémoire durable tout en gardant le processus explicable et vérifiable. Dreaming est **optionnel** et désactivé par défaut. -## Ce que dreaming écrit +## Ce que Dreaming écrit Dreaming conserve deux types de sortie : -- **État machine** dans `memory/.dreams/` (magasin de rappel, signaux de phase, points de contrôle d’ingestion, verrous). +- **État machine** dans `memory/.dreams/` (magasin de rappel, signaux de phase, points de contrôle d'ingestion, verrous). - **Sortie lisible par les humains** dans `DREAMS.md` (ou `dreams.md` existant) et fichiers de rapport de phase facultatifs sous `memory/dreaming//YYYY-MM-DD.md`. -La promotion à long terme continue d’écrire uniquement dans `MEMORY.md`. +La promotion à long terme continue d'écrire uniquement dans `MEMORY.md`. ## Modèle de phase Dreaming utilise trois phases coopératives : -| Phase | Objectif | Écriture durable | -| ----- | -------- | ---------------- | -| Légère | Trier et préparer le matériel récent à court terme | Non | -| Profonde | Évaluer et promouvoir les candidats durables | Oui (`MEMORY.md`) | -| REM | Réfléchir aux thèmes et idées récurrentes | Non | +| Phase | Objectif | Écriture durable | +| ----- | ----------------------------------------- | ----------------- | +| Légère | Trier et préparer le contenu récent à court terme | Non | +| Profonde | É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 » -séparés configurés par l’utilisateur. +Ces phases sont des détails d'implémentation internes, et non des « modes » +distincts configurés par l'utilisateur. ### Phase légère La phase légère ingère les signaux récents de mémoire quotidienne et les traces de rappel, les déduplique, et prépare des lignes candidates. -- Lit l’état de rappel à court terme et les fichiers récents de mémoire quotidienne. -- Écrit un bloc géré `## Light Sleep` lorsque le stockage inclut une sortie intégrée. +- 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. +- Écrit un bloc géré `## Light Sleep` lorsque le stockage inclut une sortie inline. - Enregistre des signaux de renforcement pour le classement profond ultérieur. -- N’écrit jamais dans `MEMORY.md`. +- N'écrit jamais dans `MEMORY.md`. ### Phase profonde La phase profonde décide de ce qui devient une mémoire à long terme. -- Classe les candidats à l’aide d’un score pondéré et de seuils de validation. -- Exige le passage de `minScore`, `minRecallCount` et `minUniqueQueries`. -- Réhydrate les extraits à partir des fichiers quotidiens actifs avant l’écriture, afin d’ignorer les extraits obsolètes/supprimés. +- Classe les candidats à l'aide d'un score pondéré et de seuils de filtrage. +- Exige que `minScore`, `minRecallCount` et `minUniqueQueries` soient atteints. +- Réhydrate des extraits à partir de fichiers quotidiens actifs avant l'écriture, afin d'ignorer les extraits obsolètes ou supprimé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 écrit éventuellement `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. -- Écrit un bloc géré `## REM Sleep` lorsque le stockage inclut une sortie intégrée. +- 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 inline. - Enregistre des signaux de renforcement REM utilisés par le classement profond. -- N’écrit jamais dans `MEMORY.md`. +- N'écrit jamais dans `MEMORY.md`. + +## 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 légère en même temps que les signaux de mémoire +quotidienne et les traces de rappel. Le contenu personnel et sensible est expurgé +avant l'ingestion. ## Journal des rêves -Dreaming conserve également un **journal des rêves** narratif dans `DREAMS.md`. -Après que chaque phase a accumulé suffisamment de matière, `memory-core` exécute en arrière-plan, -dans la mesure du possible, un tour de sous-agent (en utilisant le modèle d’exécution par défaut) et ajoute une courte entrée de journal. +Dreaming conserve également un **Journal des rêves** narratif dans `DREAMS.md`. +Après que chaque phase dispose de suffisamment de contenu, `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. ## Signaux de classement profond -Le classement profond utilise six signaux de base pondérés, plus le renforcement de phase : +Le classement profond utilise six signaux de base pondérés, plus le renforcement des phases : -| Signal | Poids | Description | +| 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 émerger | -| Récence | 0.15 | Score de fraîcheur avec décroissance temporelle | -| Consolidation | 0.10 | Force de récurrence sur plusieurs jours | -| Richesse conceptuelle | 0.06 | Densité des tags de concept à partir de l’extrait/chemin | +| 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 requête/jour qui l'ont fait remonter | +| Récence | 0.15 | Score de fraîcheur décroissant dans le temps | +| Consolidation | 0.10 | Force de récurrence sur plusieurs jours | +| Richesse conceptuelle | 0.06 | Densité de tags conceptuels à partir de l'extrait/chemin | -Les occurrences dans les phases légère et REM ajoutent un faible bonus à décroissance temporelle depuis +Les occurrences des phases légère et REM ajoutent un petit boost décroissant avec la récence depuis `memory/.dreams/phase-signals.json`. ## Planification -Lorsqu’il est activé, `memory-core` gère automatiquement une tâche cron pour un balayage -complet de dreaming. Chaque balayage exécute les phases dans l’ordre : légère -> REM -> profonde. +Lorsqu'il est activé, `memory-core` gère automatiquement une tâche cron pour un balayage complet +de dreaming. Chaque balayage exécute les phases dans l'ordre : légère -> REM -> profonde. Comportement de cadence par défaut : -| Paramètre | Par défaut | +| Paramètre | Par défaut | | -------------------- | ----------- | | `dreaming.frequency` | `0 3 * * *` | @@ -159,7 +166,7 @@ Activer dreaming avec une cadence de balayage personnalisée : ## Workflow CLI -Utilisez la promotion CLI pour un aperçu ou une application manuelle : +Utilisez la promotion CLI pour prévisualiser ou appliquer manuellement : ```bash openclaw memory promote @@ -190,28 +197,28 @@ openclaw memory rem-harness --json Tous les paramètres se trouvent sous `plugins.entries.memory-core.config.dreaming`. -| Clé | Par défaut | +| Clé | Par défaut | | ----------- | ----------- | -| `enabled` | `false` | +| `enabled` | `false` | | `frequency` | `0 3 * * *` | -La politique de phase, les seuils et le comportement de stockage sont des détails d’implémentation -internes (pas une configuration destinée aux utilisateurs). +La politique des phases, les seuils et le comportement de stockage sont des détails +d'implémentation internes (pas une configuration destinée à l'utilisateur). -Consultez [Référence de configuration de la mémoire](/fr/reference/memory-config#dreaming-experimental) +Consultez la [référence de configuration de la mémoire](/fr/reference/memory-config#dreaming-experimental) pour la liste complète des clés. ## Interface Dreams -Lorsqu’elle est activée, l’onglet **Dreams** de la Gateway affiche : +Lorsqu'il est activé, l'onglet **Dreams** de la Gateway affiche : -- l’état actuel d’activation de dreaming -- le statut au niveau des phases et la présence d’un balayage géré -- les nombres à court terme, à long terme et promus aujourd’hui -- le moment de la prochaine exécution planifiée -- un lecteur extensible du journal des rêves reposant sur `doctor.memory.dreamDiary` +- l'état d'activation actuel de dreaming +- le statut au niveau des phases et la présence d'un balayage géré +- les nombres à court terme, à long terme et promus aujourd'hui +- l'heure de la prochaine exécution planifiée +- un lecteur extensible du Journal des rêves reposant sur `doctor.memory.dreamDiary` -## Lié +## Liens connexes - [Mémoire](/fr/concepts/memory) - [Recherche dans la mémoire](/fr/concepts/memory-search) diff --git a/docs/fr/gateway/configuration-reference.md b/docs/fr/gateway/configuration-reference.md index 5ab925f49..3e72a3886 100644 --- a/docs/fr/gateway/configuration-reference.md +++ b/docs/fr/gateway/configuration-reference.md @@ -1,14 +1,14 @@ --- read_when: - - Vous avez besoin de la sémantique exacte ou des valeurs par défaut de chaque champ de configuration - - Vous validez des blocs de configuration de canal, de modèle, de passerelle ou d’outil + - Vous avez besoin de la sémantique exacte ou des valeurs par défaut des champs de configuration + - 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 OpenClaw principales, 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-08T06:06:30Z" + generated_at: "2026-04-08T06:57:40Z" model: gpt-5.4 provider: openai - source_hash: 2f9ab34fb56897a77cb038d95bea21e8530d8f0402b66d1ee97c73822a1e8fd4 + source_hash: fd5f69050455e610fc7c825d95f546a16aa867b8a9c0d692a48de36419b0afc2 source_path: gateway/configuration-reference.md workflow: 15 --- @@ -17,19 +17,19 @@ x-i18n: Référence de configuration principale pour `~/.openclaw/openclaw.json`. Pour une vue d’ensemble orientée tâches, consultez [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’intégrer sur une seule page chaque catalogue de commandes appartenant à un canal/plugin ni chaque paramètre avancé de mémoire/QMD. +Cette page couvre les principales surfaces de configuration d’OpenClaw et renvoie ailleurs lorsqu’un sous-système a sa propre référence plus détaillée. Elle **n’essaie pas** d’intégrer en ligne chaque catalogue de commandes propre à un canal/plugin ni chaque réglage avancé de mémoire/QMD sur une seule page. Source de vérité du code : -- `openclaw config schema` affiche le schéma JSON en direct utilisé pour la validation et l’interface de contrôle, avec les métadonnées des bundles/plugins/canaux fusionnées lorsqu’elles sont disponibles -- `config.schema.lookup` renvoie un nœud de schéma ciblé par chemin pour les outils d’exploration détaillée -- `pnpm config:docs:check` / `pnpm config:docs:gen` valident le hachage de base des documents de configuration par rapport à la surface actuelle du schéma +- `openclaw config schema` affiche le JSON Schema actif utilisé pour la validation et l’interface utilisateur de contrôle, avec les métadonnées des plugins/canaux regroupés fusionnées 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 base de la documentation de configuration par rapport à la surface de schéma actuelle 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 dreaming sous `plugins.entries.memory-core.config.dreaming` -- [Commandes slash](/fr/tools/slash-commands) pour le catalogue actuel de commandes intégrées + fournies en bundle -- pages du canal/plugin propriétaire pour les surfaces de commande spécifiques à un canal +- [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 au 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,32 +39,32 @@ 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 DM et des politiques de groupe : | Politique DM | Comportement | | ------------------- | -------------------------------------------------------------- | -| `pairing` (par défaut) | Les expéditeurs inconnus reçoivent un code d’association à usage unique ; le propriétaire doit approuver | -| `allowlist` | Uniquement les expéditeurs dans `allowFrom` (ou le stockage d’autorisation associé) | -| `open` | Autoriser tous les messages privés entrants (nécessite `allowFrom: ["*"]`) | -| `disabled` | Ignorer tous les messages privés entrants | +| `pairing` (par défaut) | Les expéditeurs inconnus reçoivent un code de jumelage à usage unique ; le propriétaire doit approuver | +| `allowlist` | Uniquement les expéditeurs dans `allowFrom` (ou le magasin d’autorisations jumelé) | +| `open` | Autoriser tous les DM entrants (nécessite `allowFrom: ["*"]`) | +| `disabled` | Ignorer tous les DM entrants | | Politique de groupe | Comportement | | --------------------- | ----------------------------------------------------- | | `allowlist` (par défaut) | Uniquement les groupes correspondant à la liste d’autorisation configurée | -| `open` | Contourner les listes d’autorisation de groupe (le contrôle par mention s’applique toujours) | +| `open` | Contourner les listes d’autorisation de groupe (le filtrage par mention s’applique toujours) | | `disabled` | Bloquer tous les messages de groupe/salon | -`channels.defaults.groupPolicy` définit la valeur par défaut lorsque `groupPolicy` d’un fournisseur n’est pas défini. -Les codes d’association expirent après 1 heure. Les demandes d’association 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. +`channels.defaults.groupPolicy` définit la valeur par défaut lorsqu’un `groupPolicy` de fournisseur n’est pas défini. +Les codes de jumelage expirent après 1 heure. Les demandes DM de jumelage en attente sont limitées à **3 par canal**. +Si un bloc fournisseur est entièrement absent (`channels.` absent), la politique de groupe d’exécution retombe sur `allowlist` (échec fermé) avec un avertissement au démarrage. ### Remplacements de modèle par canal -Utilisez `channels.modelByChannel` pour fixer des identifiants de canal spécifiques à un modèle. Les valeurs acceptent `provider/model` ou des alias de modèle configurés. Le mappage par canal s’applique lorsqu’une session n’a pas déjà de remplacement de modèle (par exemple, défini via `/model`). +Utilisez `channels.modelByChannel` pour épingler des ID de canaux spécifiques à un modèle. Les valeurs acceptent `provider/model` ou des alias de modèle 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`). ```json5 { @@ -87,7 +87,7 @@ Utilisez `channels.modelByChannel` pour fixer des identifiants de canal spécifi ### Valeurs par défaut des canaux et heartbeat -Utilisez `channels.defaults` pour le comportement partagé de politique de groupe et de heartbeat entre fournisseurs : +Utilisez `channels.defaults` pour le comportement partagé de politique de groupe et de heartbeat entre les fournisseurs : ```json5 { @@ -105,11 +105,11 @@ Utilisez `channels.defaults` pour le comportement partagé de politique de group } ``` -- `channels.defaults.groupPolicy` : politique de groupe de repli lorsqu’un `groupPolicy` au niveau du fournisseur n’est pas défini. +- `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 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 des 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. +- `channels.defaults.heartbeat.showOk` : inclure les statuts sains des canaux dans la sortie heartbeat. +- `channels.defaults.heartbeat.showAlerts` : inclure les statuts dégradés/en erreur des canaux dans la sortie heartbeat. +- `channels.defaults.heartbeat.useIndicator` : afficher une sortie heartbeat compacte de type indicateur. ### WhatsApp @@ -124,7 +124,7 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // blue ticks (false in self-chat mode) + sendReadReceipts: true, // coches bleues (false en mode auto-chat) groups: { "*": { requireMention: true }, }, @@ -164,9 +164,9 @@ 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 identifiant de compte configuré (trié). -- `channels.whatsapp.defaultAccount` est facultatif et remplace cette sélection de compte par défaut de repli lorsqu’il correspond à un identifiant de compte configuré. -- L’ancien répertoire d’authentification Baileys en compte unique est migré par `openclaw doctor` vers `whatsapp/default`. +- 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 ce choix 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`. @@ -225,11 +225,11 @@ 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 normal uniquement ; les liens symboliques sont rejetés), avec `TELEGRAM_BOT_TOKEN` comme repli pour le compte par défaut. -- `channels.telegram.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. -- Dans les configurations multi-comptes (2 identifiants 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 si cette valeur est absente ou invalide. -- `configWrites: false` bloque les écritures de configuration initiées depuis Telegram (migrations d’identifiants de supergroupes, `/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 [Agents ACP](/fr/tools/acp-agents#channel-specific-settings). +- Jeton du bot : `channels.telegram.botToken` ou `channels.telegram.tokenFile` (fichier normal uniquement ; les liens symboliques sont rejetés), avec `TELEGRAM_BOT_TOKEN` comme solution de secours 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-compte (2 ID de compte ou plus), définissez un compte par défaut explicite (`channels.telegram.defaultAccount` ou `channels.telegram.accounts.default`) pour éviter le routage de secours ; `openclaw doctor` avertit lorsque cela est absent 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 `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). - Les aperçus de flux Telegram utilisent `sendMessage` + `editMessageText` (fonctionne dans les chats directs et de groupe). - Politique de nouvelle tentative : voir [Politique de nouvelle tentative](/fr/concepts/retry). @@ -297,7 +297,7 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) + spawnSubagentSessions: false, // opt-in pour sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -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 repli pour le compte par défaut. +- 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é d’exécution actif. -- `channels.discord.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. -- Utilisez `user:` (DM) ou `channel:` (canal de serveur) pour les cibles de livraison ; les identifiants numériques bruts sont rejetés. -- Les slugs de serveur sont en minuscules avec les espaces remplacés par `-` ; les clés de canal utilisent le nom sous forme de slug (sans `#`). Préférez les identifiants de serveur. +- `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 guilde) pour les cibles de livraison ; les ID numériques nus 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 bots qui mentionnent le bot (les propres messages restent filtrés). -- `channels.discord.guilds..ignoreOtherMentions` (et ses remplacements au niveau du canal) supprime les messages qui mentionnent un autre utilisateur ou rôle mais pas le bot (hors @everyone/@here). -- `maxLinesPerMessage` (17 par défaut) découpe les messages hauts même s’ils font moins de 2000 caractères. +- `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 (hors @everyone/@here). +- `maxLinesPerMessage` (par défaut 17) fractionne les messages longs 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` et livraison/routage liés) - - `idleHours` : remplacement Discord pour le désancrage automatique sur inactivité en heures (`0` désactive) + - `enabled` : remplacement Discord pour les fonctions de session liées aux fils (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` et livraison/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 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’identifiant 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’accentuation pour les conteneurs Discord components v2. -- `channels.discord.voice` active les conversations dans les canaux vocaux Discord et les remplacements facultatifs d’auto-jonction + TTS. + - `spawnSubagentSessions` : interrupteur d’activation pour la création/liaison automatique 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 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 des conteneurs Discord components v2. +- `channels.discord.voice` active les conversations dans les canaux vocaux Discord ainsi que les remplacements optionnels d’auto-join 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 également une récupération de la réception vocale en quittant/rejoignant une session vocale après des échecs de déchiffrement répétés. -- `channels.discord.streaming` est la clé canonique du mode de flux. Les anciennes valeurs `streamMode` et booléennes `streaming` sont automatiquement migrées. -- `channels.discord.autoPresence` mappe la disponibilité à l’exécution vers la présence du bot (healthy => online, degraded => idle, exhausted => dnd) et permet des remplacements facultatifs du texte de statut. -- `channels.discord.dangerouslyAllowNameMatching` réactive la correspondance par nom/tag mutable (mode de compatibilité « break-glass »). +- OpenClaw tente également une récupération de la réception vocale en quittant/rejoignant une session vocale après des échecs répétés de déchiffrement. +- `channels.discord.streaming` est la clé canonique du mode de streaming. Les anciennes valeurs `streamMode` et booléennes `streaming` sont migrées automatiquement. +- `channels.discord.autoPresence` mappe la disponibilité d’exécution à la présence du bot (healthy => online, degraded => idle, exhausted => dnd) et autorise des remplacements optionnels du texte de statut. +- `channels.discord.dangerouslyAllowNameMatching` réactive la correspondance par nom/tag mutable (mode compatibilité break-glass). - `channels.discord.execApprovals` : livraison native Discord des approbations exec 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 depuis `approvers` ou `commands.ownerAllowFrom`. - - `approvers` : identifiants d’utilisateurs Discord autorisés à approuver les demandes exec. Utilise `commands.ownerAllowFrom` comme repli si omis. - - `agentFilter` : liste d’autorisation facultative des identifiants d’agent. Omettez-la pour transférer les approbations de tous les agents. - - `sessionFilter` : modèles facultatifs de clés de session (sous-chaîne ou regex). - - `target` : destination des invites d’approbation. `"dm"` (par défaut) les envoie dans les DM des approbateurs, `"channel"` les envoie dans le canal d’origine, `"both"` les envoie aux deux. Lorsque la cible inclut `"channel"`, les boutons ne sont utilisables que par les approbateurs résolus. + - `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 demandes exec. Retombe sur `commands.ownerAllowFrom` lorsqu’il est omis. + - `agentFilter` : liste d’autorisation facultative d’ID d’agents. Omettez-la pour transférer les approbations de tous les agents. + - `sessionFilter` : motifs facultatifs de clés de session (sous-chaîne ou regex). + - `target` : où envoyer les invites d’approbation. `"dm"` (par défaut) envoie aux DM des approbateurs, `"channel"` envoie au canal d’origine, `"both"` envoie aux deux. Lorsque la cible inclut `"channel"`, les boutons ne sont utilisables que par les approbateurs résolus. - `cleanupAfterResolve` : lorsque `true`, supprime les DM d’approbation après approbation, refus ou expiration. -**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). +**Modes de notification de réaction :** `off` (aucun), `own` (messages du bot, par défaut), `all` (tous les messages), `allowlist` (à partir de `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 de compte de service : inline (`serviceAccount`) ou basé sur fichier (`serviceAccountFile`). -- SecretRef pour compte de service est également pris en charge (`serviceAccountRef`). -- Variables d’environnement de repli : `GOOGLE_CHAT_SERVICE_ACCOUNT` ou `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- JSON du compte de service : en ligne (`serviceAccount`) ou via fichier (`serviceAccountFile`). +- SecretRef du compte de service est également pris en charge (`serviceAccountRef`). +- Solutions de secours via env : `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 mutable du principal d’e-mail (mode de compatibilité « break-glass »). +- `channels.googlechat.dangerouslyAllowNameMatching` réactive la correspondance mutable de principal d’adresse e-mail (mode compatibilité break-glass). ### Slack @@ -449,7 +449,7 @@ WhatsApp fonctionne via le canal web de la passerelle (Baileys Web). Il démarre chunkMode: "length", streaming: { mode: "partial", // off | partial | block | progress - nativeTransport: true, // use Slack native streaming API when mode=partial + nativeTransport: true, // utiliser l’API de streaming native de Slack quand mode=partial }, mediaMaxMb: 20, execApprovals: { @@ -464,35 +464,35 @@ 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` 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 clair - ou des objets SecretRef. -- Les instantanés de compte Slack exposent des champs source/statut par identifiant, tels que +- **Mode socket** nécessite à la fois `botToken` et `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` comme solution de secours env du compte par défaut). +- **Mode HTTP** nécessite `botToken` plus `signingSecret` (à la racine ou par compte). +- `botToken`, `appToken`, `signingSecret` et `userToken` acceptent des chaînes + en clair ou des objets SecretRef. +- Les instantanés de compte Slack exposent des champs 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 de commande/d’exécution actuel n’a pas pu - résoudre la valeur du secret. -- `configWrites: false` bloque les écritures de configuration initiées depuis Slack. -- `channels.slack.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant 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 streaming de Slack. Les anciennes valeurs `streamMode`, booléennes `streaming` et `nativeStreaming` sont automatiquement migrées. + configuré via SecretRef mais que la commande ou le chemin d’exécution actuel n’a pas pu + résoudre la valeur secrète. +- `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 streaming Slack. `channels.slack.streaming.nativeTransport` contrôle le transport natif de streaming 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 de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). +**Modes de notification de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (à partir de `reactionAllowlist`). -**Isolation de session par fil :** `thread.historyScope` est par fil (par défaut) ou partagé sur le canal. `thread.inheritParent` copie la transcription du canal parent dans 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 streaming natif Slack ainsi que le statut 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 une livraison normale au lieu de l’aperçu de style fil. -- `typingReaction` ajoute temporairement une réaction 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 exec et autorisation des approbateurs. Même schéma que Discord : `enabled` (`true`/`false`/`"auto"`), `approvers` (identifiants d’utilisateurs Slack), `agentFilter`, `sessionFilter` et `target` (`"dm"`, `"channel"` ou `"both"`). +- Le streaming natif Slack ainsi que l’état de fil Slack de style assistant « est en train d’écrire... » nécessitent une cible de réponse dans un fil. Les DM de premier niveau restent hors fil par défaut ; ils utilisent donc `typingReaction` ou la livraison normale au lieu de l’aperçu de style 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 native Slack des approbations exec et autorisation des approbateurs. Même schéma que Discord : `enabled` (`true`/`false`/`"auto"`), `approvers` (ID utilisateur Slack), `agentFilter`, `sessionFilter` et `target` (`"dm"`, `"channel"` ou `"both"`). -| Groupe d’actions | Par défaut | Remarques | +| 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 emojis personnalisés | +| memberInfo | activé | Infos sur les membres | +| emojiList | activé | Liste d’emoji personnalisés | ### Mattermost @@ -513,10 +513,10 @@ Mattermost est distribué sous forme de plugin : `openclaw plugins install @open "team-channel-id": { requireMention: false }, }, commands: { - native: true, // opt-in + native: true, // activation explicite nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // Optional explicit URL for reverse-proxy/public deployments + // URL explicite facultative pour les déploiements derrière reverse proxy/publics callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -526,23 +526,23 @@ Mattermost est distribué sous forme de plugin : `openclaw plugins install @open } ``` -Modes de chat : `oncall` (répond sur @-mention, par défaut), `onmessage` (chaque message), `onchar` (messages commençant par le préfixe de déclenchement). +Modes de chat : `oncall` (répond sur @-mention, par défaut), `onmessage` (chaque message), `onchar` (messages commençant par le préfixe déclencheur). 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 de la commande slash. Si l’enregistrement échoue ou si aucune - commande n’est activée, OpenClaw rejette les rappels avec +- `commands.callbackPath` doit être un chemin (par exemple `/api/channels/mattermost/command`), pas une URL complète. +- `commands.callbackUrl` doit pointer vers l’endpoint de passerelle 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 des commandes 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 rappel privés/tailnet/internes, Mattermost peut exiger que - `ServiceSettings.AllowedUntrustedInternalConnections` inclue l’hôte/le domaine de rappel. - Utilisez des valeurs d’hôte/de domaine, et non 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 du contrôle par mention par canal (`"*"` pour la valeur par défaut). -- `channels.mattermost.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. +- Pour les hôtes de callback privés/tailnet/internes, Mattermost peut nécessiter + que `ServiceSettings.AllowedUntrustedInternalConnections` inclue l’hôte/domaine de callback. + Utilisez des valeurs hôte/domaine, pas des URL complètes. +- `channels.mattermost.configWrites` : autoriser ou refuser les écritures de configuration initiées par Mattermost. +- `channels.mattermost.requireMention` : exiger un `@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 @@ -551,7 +551,7 @@ Lorsque les commandes natives Mattermost sont activées : channels: { signal: { enabled: true, - account: "+15555550123", // optional account binding + account: "+15555550123", // liaison facultative à un compte dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -563,15 +563,15 @@ Lorsque les commandes natives Mattermost sont activées : } ``` -**Modes de notification de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (depuis `reactionAllowlist`). +**Modes de notification de réaction :** `off`, `own` (par défaut), `all`, `allowlist` (à partir de `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.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. +- `channels.signal.account` : épingle le démarrage du canal à une identité de compte Signal spécifique. +- `channels.signal.configWrites` : autoriser ou refuser 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 recommandé pour iMessage (basé sur un plugin, configuré sous `channels.bluebubbles`). +BlueBubbles est le chemin iMessage recommandé (adossé à un plugin, configuré sous `channels.bluebubbles`). ```json5 { @@ -579,21 +579,21 @@ BlueBubbles est le chemin recommandé pour iMessage (basé sur un plugin, config bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, group controls, and advanced actions: - // see /channels/bluebubbles + // serverUrl, password, webhookPath, contrôles de groupe et actions avancées : + // voir /channels/bluebubbles }, }, } ``` -- Chemins de clés principales couverts ici : `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- `channels.bluebubbles.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. +- 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 BlueBubbles ou une chaîne cible (`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). - La configuration complète du canal BlueBubbles est documentée dans [BlueBubbles](/fr/channels/bluebubbles). ### iMessage -OpenClaw lance `imsg rpc` (JSON-RPC via stdio). Aucun daemon ni port n’est requis. +OpenClaw lance `imsg rpc` (JSON-RPC via stdio). Aucun démon ni port requis. ```json5 { @@ -617,14 +617,14 @@ OpenClaw lance `imsg rpc` (JSON-RPC via stdio). Aucun daemon ni port n’est req } ``` -- `channels.imessage.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. +- `channels.imessage.defaultAccount` facultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. - 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 le 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`). +- Préférez les cibles `chat_id:`. Utilisez `imsg chats --limit 20` pour lister les chats. +- `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` limitent 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. +- `channels.imessage.configWrites` : autoriser ou refuser 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 chat 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). @@ -638,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix est pris en charge par une extension et configuré sous `channels.matrix`. +Matrix est adossé à une extension et configuré sous `channels.matrix`. ```json5 { @@ -669,24 +669,24 @@ Matrix est pris en charge par une extension et configuré sous `channels.matrix` ``` - L’authentification par jeton utilise `accessToken` ; l’authentification par mot de passe utilise `userId` + `password`. -- `channels.matrix.proxy` achemine le trafic HTTP Matrix via un proxy HTTP(S) explicite. Les comptes nommés peuvent le remplacer avec `channels.matrix.accounts..proxy`. +- `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.defaultAccount` sélectionne le compte préféré dans les configurations multi-compte. +- `channels.matrix.autoJoin` vaut `off` par défaut ; ainsi les salons invités et les nouvelles invitations de type DM sont ignorés jusqu’à ce que vous définissiez `autoJoin: "allowlist"` avec `autoJoinAllowlist` ou `autoJoin: "always"`. - `channels.matrix.execApprovals` : livraison native Matrix des approbations exec 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 depuis `approvers` ou `commands.ownerAllowFrom`. - - `approvers` : identifiants d’utilisateurs Matrix (par ex. `@owner:example.org`) autorisés à approuver les demandes exec. - - `agentFilter` : liste d’autorisation facultative des identifiants d’agent. Omettez-la pour transférer les approbations de tous les agents. - - `sessionFilter` : modèles facultatifs de clés de session (sous-chaîne ou regex). - - `target` : destination des invites d’approbation. `"dm"` (par défaut), `"channel"` (salon d’origine) ou `"both"`. + - `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 utilisateur Matrix (par ex. `@owner:example.org`) autorisés à approuver les demandes exec. + - `agentFilter` : liste d’autorisation facultative d’ID d’agents. Omettez-la pour transférer les approbations de tous les agents. + - `sessionFilter` : motifs facultatifs de clés de session (sous-chaîne ou regex). + - `target` : où envoyer les 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 façon dont 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 de statut Matrix et les consultations 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 les exemples d’installation sont documentés dans [Matrix](/fr/channels/matrix). +- 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 les exemples de configuration sont documentés dans [Matrix](/fr/channels/matrix). ### Microsoft Teams -Microsoft Teams est pris en charge par une extension et configuré sous `channels.msteams`. +Microsoft Teams est adossé à une extension et configuré sous `channels.msteams`. ```json5 { @@ -694,19 +694,19 @@ Microsoft Teams est pris en charge par une extension et configuré sous `channel msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, team/channel policies: - // see /channels/msteams + // appId, appPassword, tenantId, webhook, politiques d’équipe/canal : + // voir /channels/msteams }, }, } ``` -- Chemins de clés principales 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 -IRC est pris en charge par une extension et configuré sous `channels.irc`. +IRC est adossé à une extension et configuré sous `channels.irc`. ```json5 { @@ -727,9 +727,9 @@ IRC est pris en charge par une extension et configuré sous `channels.irc`. } ``` -- Chemins de clés principales couverts ici : `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- `channels.irc.defaultAccount` est facultatif et remplace la sélection du compte par défaut lorsqu’il correspond à un identifiant de compte configuré. -- La configuration complète du canal IRC (hôte/port/TLS/canaux/listes d’autorisation/contrôle par mention) est documentée dans [IRC](/fr/channels/irc). +- 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’autorisation/filtrage par mention) est documentée dans [IRC](/fr/channels/irc). ### Multi-compte (tous les canaux) @@ -756,26 +756,26 @@ Exécutez plusieurs comptes par canal (chacun avec son propre `accountId`) : - `default` est utilisé lorsque `accountId` est omis (CLI + routage). - Les jetons d’environnement ne s’appliquent qu’au compte **default**. -- Les paramètres de canal de base s’appliquent à tous les comptes sauf s’ils sont remplacés par compte. +- Les paramètres de base du canal 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 êtes encore sur une configuration de canal de niveau supérieur en compte unique, OpenClaw promeut d’abord les valeurs de niveau supérieur à portée de compte unique dans la map 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 conserver à la place une cible nommée/par défaut existante correspondante. -- Les liaisons existantes propres au canal (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 de niveau supérieur à portée de compte unique dans le compte promu choisi pour ce canal. La plupart des canaux utilisent `accounts.default` ; Matrix peut conserver à la place une cible nommée/par défaut existante correspondante. +- Si vous ajoutez un compte non par défaut via `openclaw channels add` (ou l’intégration de canal) alors que vous êtes encore sur une configuration de canal mono-compte de niveau supérieur, OpenClaw promeut d’abord les valeurs mono-compte de niveau supérieur limitées au compte dans la map de comptes du canal pour 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 uniquement canal (sans `accountId`) continuent à correspondre au compte par défaut ; les liaisons limitées à un compte restent facultatives. +- `openclaw doctor --fix` répare également les formes mixtes en déplaçant les valeurs mono-compte de niveau supérieur limitées au 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 sous `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 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). +Voir l’index complet des canaux : [Canaux](/fr/channels). -### Contrôle par mention dans les discussions de groupe +### Filtrage par mention dans les chats 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 chats de groupe WhatsApp, Telegram, Discord, Google Chat et iMessage. **Types de mention :** - **Mentions de métadonnées** : @-mentions natives de la plateforme. Ignorées en mode auto-chat WhatsApp. -- **Motifs textuels** : motifs regex sûrs dans `agents.list[].groupChat.mentionPatterns`. Les motifs invalides et les répétitions imbriquées dangereuses sont ignorés. -- Le contrôle par mention n’est appliqué que lorsque la détection est possible (mentions natives ou au moins un motif). +- **Motifs 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 { @@ -788,7 +788,7 @@ 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 globale par défaut. Les canaux peuvent remplacer avec `channels..historyLimit` (ou par compte). Définissez `0` pour désactiver. #### Limites d’historique des DM @@ -811,7 +811,7 @@ Pris en charge : `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage #### Mode auto-chat -Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-chat (ignore les @-mentions natives, ne répond qu’aux motifs textuels) : +Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-chat (ignore les @-mentions natives, ne répond qu’aux motifs texte) : ```json5 { @@ -837,16 +837,16 @@ Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-chat (ig ```json5 { commands: { - native: "auto", // register native commands when supported - nativeSkills: "auto", // register native skill commands when supported - text: true, // parse /commands in chat messages - bash: false, // allow ! (alias: /bash) + native: "auto", // enregistrer les commandes natives lorsque prises en charge + nativeSkills: "auto", // enregistrer les commandes de Skills natives lorsque prises en charge + text: true, // analyser les /commands dans les messages de chat + bash: false, // autoriser ! (alias : /bash) bashForegroundMs: 2000, - config: false, // allow /config - mcp: false, // allow /mcp - plugins: false, // allow /plugins - debug: false, // allow /debug - restart: true, // allow /restart + gateway restart tool + config: false, // autoriser /config + mcp: false, // autoriser /mcp + plugins: false, // autoriser /plugins + debug: false, // autoriser /debug + restart: true, // autoriser /restart + outil de redémarrage de la passerelle ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", @@ -861,31 +861,31 @@ Incluez votre propre numéro dans `allowFrom` pour activer le mode auto-chat (ig -- Ce bloc configure les surfaces de commande. Pour le catalogue actuel de commandes intégrées + fournies en 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 appartenant à un canal/plugin telles que 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 `/` initial. -- `native: "auto"` active les commandes natives pour Discord/Telegram, et laisse Slack désactivé. -- `nativeSkills: "auto"` active les commandes de Skills natives 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 commandes. Pour le catalogue actuel des commandes intégrées + groupées, 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 telles que 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 texte doivent être des messages **autonomes** avec un `/` initial. +- `native: "auto"` active les commandes natives pour Discord/Telegram, laisse Slack désactivé. +- `nativeSkills: "auto"` active les commandes de Skills natives pour Discord/Telegram, laisse Slack désactivé. +- Remplacement par canal : `channels.discord.commands.native` (bool ou `"auto"`). `false` efface les commandes précédemment enregistrées. +- Remplacez l’enregistrement natif des skills 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 que l’expéditeur figure dans `tools.elevated.allowFrom.`. -- `config: true` active `/config` (lecture/écriture de `openclaw.json`). Pour les clients passerelle `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érateurs normaux avec portée d’écriture. -- `mcp: true` active `/mcp` pour la configuration des serveurs MCP gérés par OpenClaw sous `mcp.servers`. +- `bash: true` active `! ` pour le shell hôte. Nécessite `tools.elevated.enabled` et un expéditeur dans `tools.elevated.allowFrom.`. +- `config: true` active `/config` (lecture/écriture de `openclaw.json`). Pour les clients Gateway `chat.send`, les écritures persistantes `/config set|unset` nécessitent aussi `operator.admin` ; la lecture seule `/config show` reste disponible pour les clients opérateur normaux à portée é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, 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 aussi les écritures ciblant ce compte (par exemple `/allowlist --config --account ` ou `/config set channels..accounts....`). -- `restart: false` désactive `/restart` et les actions de l’outil de redémarrage de passerelle. Par défaut : `true`. +- Pour les canaux multi-compte, `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 de l’outil de redémarrage de la passerelle. Par défaut : `true`. - `ownerAllowFrom` est la liste d’autorisation explicite du propriétaire pour les commandes/outils réservés au propriétaire. Elle est distincte de `allowFrom`. -- `ownerDisplay: "hash"` hache les identifiants 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 l’**unique** source d’autorisation (les listes d’autorisation/l’association du 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 aux canaux : [Canaux](/fr/channels) +- `ownerDisplay: "hash"` hache les ID de 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’autorisation/jumelage du 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. +- Correspondance 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’association : [Association](/fr/channels/pairing) - - commande de carte LINE : [LINE](/fr/channels/line) + - commandes de jumelage : [Pairing](/fr/channels/pairing) + - commande card de LINE : [LINE](/fr/channels/line) - memory dreaming : [Dreaming](/fr/concepts/dreaming) @@ -916,7 +916,7 @@ Racine de dépôt facultative affichée dans la ligne Runtime du prompt système ### `agents.defaults.skills` -Liste d’autorisation de Skills par défaut facultative pour les agents qui ne définissent pas +Liste d’autorisation par défaut facultative de Skills pour les agents qui ne définissent pas `agents.list[].skills`. ```json5 @@ -924,23 +924,23 @@ Liste d’autorisation de Skills par défaut facultative pour les agents qui ne agents: { defaults: { skills: ["github", "weather"] }, list: [ - { id: "writer" }, // inherits github, weather - { id: "docs", skills: ["docs-search"] }, // replaces defaults - { id: "locked-down", skills: [] }, // no skills + { id: "writer" }, // hérite de github, weather + { id: "docs", skills: ["docs-search"] }, // remplace les valeurs par défaut + { id: "locked-down", skills: [] }, // aucun skill ], }, } ``` -- Omettez `agents.defaults.skills` pour des Skills non restreintes par défaut. +- Omettez `agents.defaults.skills` pour des Skills non restreints par défaut. - Omettez `agents.list[].skills` pour hériter des valeurs par défaut. -- Définissez `agents.list[].skills: []` pour n’avoir aucune Skills. -- Une liste non vide dans `agents.list[].skills` constitue l’ensemble final pour cet agent ; elle - ne fusionne pas avec les valeurs par défaut. +- Définissez `agents.list[].skills: []` pour n’avoir aucun Skills. +- Une liste non vide `agents.list[].skills` est l’ensemble final pour cet agent ; elle + ne se fusionne pas avec les valeurs par défaut. ### `agents.defaults.skipBootstrap` -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`). +Désactive la création automatique des fichiers de bootstrap du workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`). ```json5 { @@ -950,9 +950,9 @@ Désactive la création automatique des fichiers bootstrap du workspace (`AGENTS ### `agents.defaults.contextInjection` -Contrôle le moment où les fichiers bootstrap du workspace sont injectés dans le prompt système. Valeur par défaut : `"always"`. +Contrôle quand les fichiers de 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 d’assistant terminée) sautent la réinjection du bootstrap du workspace, réduisant ainsi la taille du prompt. Les exécutions heartbeat et les nouvelles tentatives après compaction 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, réduisant la taille du prompt. Les exécutions heartbeat et les nouvelles tentatives après compactage reconstruisent toujours le contexte. ```json5 { @@ -962,7 +962,7 @@ Contrôle le moment où les fichiers bootstrap du workspace sont injectés dans ### `agents.defaults.bootstrapMaxChars` -Nombre maximal de caractères par fichier bootstrap de workspace avant troncature. Valeur par défaut : `20000`. +Nombre maximal de caractères par fichier de bootstrap du workspace avant troncature. Par défaut : `20000`. ```json5 { @@ -972,7 +972,7 @@ Nombre maximal de caractères par fichier bootstrap de workspace avant troncatur ### `agents.defaults.bootstrapTotalMaxChars` -Nombre total maximal de caractères injectés sur l’ensemble des fichiers bootstrap du workspace. Valeur par défaut : `150000`. +Nombre maximal total de caractères injectés sur l’ensemble des fichiers de bootstrap du workspace. Par défaut : `150000`. ```json5 { @@ -986,7 +986,7 @@ Contrôle le texte d’avertissement visible par l’agent lorsque le contexte b 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 unique de troncature (recommandé). +- `"once"` : injecter l’avertissement une fois par signature de troncature unique (recommandé). - `"always"` : injecter l’avertissement à chaque exécution lorsqu’une troncature existe. ```json5 @@ -997,11 +997,11 @@ Par défaut : `"once"`. ### `agents.defaults.imageMaxDimensionPx` -Taille maximale en pixels du plus grand côté d’image dans les blocs d’image de transcription/outil avant les appels fournisseur. +Taille maximale en pixels du plus long côté d’une image dans les blocs image de transcription/outil avant les appels fournisseur. Par défaut : `1200`. -Des valeurs plus basses réduisent généralement l’utilisation de jetons de vision et la taille des charges de requête pour les exécutions riches en captures d’écran. -Des valeurs plus élevées préservent 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 pour les exécutions riches en captures d’écran. +Des valeurs plus élevées conservent davantage de détails visuels. ```json5 { @@ -1011,7 +1011,7 @@ Des valeurs plus élevées préservent davantage de détails visuels. ### `agents.defaults.userTimezone` -Fuseau horaire pour le contexte du prompt système (pas les horodatages des messages). Revient au fuseau horaire de l’hôte si absent. +Fuseau horaire pour le contexte du prompt système (pas les horodatages des messages). Retombe sur le fuseau horaire de l’hôte. ```json5 { @@ -1021,7 +1021,7 @@ Fuseau horaire pour le contexte du prompt système (pas les horodatages des mess ### `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. Par défaut : `auto` (préférence du système d’exploitation). ```json5 { @@ -1059,7 +1059,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" }, // global default provider params + params: { cacheRetention: "long" }, // paramètres fournisseur globaux par défaut pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", @@ -1075,42 +1075,42 @@ 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 }`). - - La forme chaîne définit uniquement le modèle principal. + - La forme chaîne ne définit que le modèle principal. - La forme objet définit le principal plus les modèles de basculement ordonnés. - `imageModel` : accepte soit une chaîne (`"provider/model"`), soit un objet (`{ primary, fallbacks }`). - - Utilisé par le chemin de l’outil `image` comme configuration de modèle de vision. + - Utilisé par le chemin de l’outil `image` comme configuration du modèle de vision. - Aussi utilisé comme routage de secours lorsque le modèle sélectionné/par défaut n’accepte pas 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’image 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’image native Gemini, `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 enregistrés de génération d’image par ordre d’identifiant de fournisseur. + - 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 fournisseur/modèle, configurez aussi l’authentification/la clé API fournisseur correspondante (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 un fournisseur par défaut adossé à l’authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération d’image 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 enregistrés de génération musicale par ordre d’identifiant de fournisseur. - - Si vous sélectionnez directement un provider/model, configurez aussi l’authentification/la clé API du fournisseur correspondant. + - Si omis, `music_generate` peut toujours déduire un fournisseur par défaut adossé à l’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 fournisseur/modèle, configurez aussi l’authentification/la clé API fournisseur correspondante. - `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 enregistrés de génération vidéo par ordre d’identifiant 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 actuellement en charge jusqu’à 1 vidéo de sortie, 1 image d’entrée, 4 vidéos d’entrée, une durée de 10 secondes, ainsi que les options de niveau fournisseur `size`, `aspectRatio`, `resolution`, `audio` et `watermark`. + - Si omis, `video_generate` peut toujours déduire un fournisseur par défaut adossé à l’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 fournisseur/modèle, configurez aussi l’authentification/la clé API fournisseur correspondante. + - Le fournisseur groupé de génération vidéo Qwen prend actuellement 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 }`). - - Utilisé par l’outil `pdf` pour le routage de modèle. - - Si omis, l’outil PDF se replie sur `imageModel`, puis sur le modèle résolu de session/par défaut. -- `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 considéré par défaut par le mode de repli d’extraction dans l’outil `pdf`. -- `verboseDefault` : niveau de verbosité par défaut pour les agents. Valeurs : `"off"`, `"on"`, `"full"`. Par défaut : `"off"`. + - Utilisé par l’outil `pdf` pour le routage du modèle. + - Si omis, l’outil PDF retombe sur `imageModel`, puis sur le modèle résolu de session/par défaut. +- `pdfMaxBytesMb` : limite de taille PDF par défaut pour l’outil `pdf` lorsque `maxBytesMb` n’est pas transmis à l’appel. +- `pdfMaxPages` : nombre maximal de pages considéré par défaut par le mode d’extraction de secours de 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` (ex. `openai/gpt-5.4`). Si vous omettez le fournisseur, OpenClaw essaie d’abord un alias, puis une correspondance unique de fournisseur configuré pour cet identifiant exact de modèle, et seulement ensuite revient au fournisseur par défaut configuré (comportement de compatibilité déprécié ; préférez donc `provider/model` explicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw se replie sur le premier provider/model configuré au lieu d’exposer une ancienne valeur par défaut d’un fournisseur supprimé. -- `models` : catalogue configuré des modèles et liste d’autorisation 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 de 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` (identifiant d’agent correspondant) remplace par clé. Voir [Mise en cache des prompts](/fr/reference/prompt-caching) pour les détails. -- Les rédacteurs 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 conservent les listes de repli existantes lorsque cela est possible. -- `maxConcurrent` : nombre maximal d’exécutions parallèles d’agents sur l’ensemble des sessions (chaque session reste sérialisée). Par défaut : 4. +- `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 de fournisseur configuré pour cet ID de modèle exact, et seulement ensuite retombe sur le fournisseur par défaut configuré (comportement de compatibilité déconseillé, donc préférez `provider/model` explicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw retombe sur le premier fournisseur/modèle configuré au lieu de faire remonter une valeur par défaut obsolète de fournisseur supprimé. +- `models` : le catalogue de modèles configuré et la liste d’autorisation pour `/model`. Chaque entrée peut inclure `alias` (raccourci) et `params` (spécifiques au fournisseur, par exemple `temperature`, `maxTokens`, `cacheRetention`, `context1m`). +- `params` : paramètres fournisseur globaux par défaut appliqués à tous les modèles. À définir sous `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. +- Les rédacteurs de configuration qui modifient ces champs (par exemple `/models set`, `/models set-image` et les commandes d’ajout/suppression de fallback) enregistrent la forme objet canonique et conservent les listes de fallback existantes lorsque possible. +- `maxConcurrent` : nombre maximal d’exécutions parallèles d’agents entre les sessions (chaque session reste sérialisée). Par défaut : 4. -**Alias raccourcis intégrés** (ne s’appliquent que lorsque le modèle est présent dans `agents.defaults.models`) : +**Raccourcis d’alias intégrés** (s’appliquent uniquement lorsque le modèle est dans `agents.defaults.models`) : | Alias | Modèle | | ------------------- | -------------------------------------- | @@ -1125,13 +1125,13 @@ Format de l’heure dans le prompt système. Par défaut : `auto` (préférence 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 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 d’appels d’outil. Définissez `agents.defaults.models["zai/"].params.tool_stream` à `false` pour le désactiver. -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. +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 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 explicite n’est défini. ### `agents.defaults.cliBackends` -Backends CLI facultatifs pour les exécutions de repli texte seul (sans appels d’outils). Utile comme sauvegarde lorsque les fournisseurs d’API échouent. +Backends CLI facultatifs pour les exécutions de secours texte seul (sans appels d’outil). Utile comme solution de secours lorsque les fournisseurs API échouent. ```json5 { @@ -1159,9 +1159,23 @@ Backends CLI facultatifs pour les exécutions de repli texte seul (sans appels d } ``` -- Les backends CLI sont d’abord conçus pour le texte ; les outils sont toujours désactivés. +- Les backends CLI sont 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 fichier. +- Le passage direct d’image est pris en charge lorsque `imageArg` accepte des chemins de fichier. + +### `agents.defaults.systemPromptOverride` + +Remplace l’intégralité du 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 uniquement composée d’espaces est ignorée. Utile pour des expériences contrôlées sur les prompts. + +```json5 +{ + agents: { + defaults: { + systemPromptOverride: "You are a helpful assistant.", + }, + }, +} +``` ### `agents.defaults.heartbeat` @@ -1172,15 +1186,16 @@ Exécutions heartbeat périodiques. agents: { defaults: { heartbeat: { - every: "30m", // 0m disables + every: "30m", // 0m désactive model: "openai/gpt-5.4-mini", includeReasoning: false, - lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files - isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) + includeSystemPromptSection: true, // par défaut : true ; false omet la section Heartbeat du prompt système + lightContext: false, // par défaut : false ; true ne conserve que HEARTBEAT.md parmi les fichiers bootstrap du workspace + isolatedSession: false, // par défaut : false ; true exécute chaque heartbeat dans une session fraîche (sans historique de conversation) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (default) | block - target: "none", // default: none | options: last | whatsapp | telegram | discord | ... + directPolicy: "allow", // allow (par défaut) | block + target: "none", // par défaut : none | options : last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1191,11 +1206,12 @@ Exécutions heartbeat périodiques. ``` - `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. -- `suppressToolErrorWarnings` : lorsque vrai, supprime les charges d’avertissement d’erreur d’outil pendant les exécutions heartbeat. -- `directPolicy` : politique de livraison directe/DM. `allow` (par défaut) autorise la livraison à cible directe. `block` supprime la livraison à cible directe et émet `reason=dm-blocked`. -- `lightContext` : lorsque vrai, les exécutions heartbeat utilisent un contexte bootstrap léger et ne conservent que `HEARTBEAT.md` parmi les fichiers bootstrap du workspace. -- `isolatedSession` : lorsque vrai, chaque exécution heartbeat se fait dans une session fraîche sans historique de conversation antérieur. Même modèle d’isolation que le 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 définit `heartbeat`, **seuls ces agents** exécutent des heartbeats. +- `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. +- `directPolicy` : politique de livraison directe/DM. `allow` (par défaut) autorise la livraison à 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 allégé et ne conservent que `HEARTBEAT.md` parmi les fichiers de bootstrap du workspace. +- `isolatedSession` : lorsqu’il vaut 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 complets d’agent — des intervalles plus courts consomment plus de jetons. ### `agents.defaults.compaction` @@ -1206,14 +1222,14 @@ Exécutions heartbeat périodiques. defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id of a registered compaction provider plugin (optional) + provider: "my-provider", // id d’un plugin fournisseur de compaction enregistré (facultatif) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection - model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override - notifyUser: true, // send a brief notice when compaction starts (default: false) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // utilisé quand identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] désactive la réinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // remplacement facultatif du modèle réservé à la compaction + notifyUser: true, // envoyer une brève notification quand la compaction démarre (par défaut : false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -1226,19 +1242,19 @@ Exécutions heartbeat périodiques. } ``` -- `mode` : `default` ou `safeguard` (résumé par morceaux pour les longs historiques). Voir [Compaction](/fr/concepts/compaction). -- `provider` : identifiant 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’intégration native en cas d’échec. Définir un fournisseur force `mode: "safeguard"`. Voir [Compaction](/fr/concepts/compaction). -- `timeoutSeconds` : nombre maximal de secondes autorisées pour une opération unique de compaction avant qu’OpenClaw l’abandonne. 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 de conservation d’identifiants personnalisé utilisé lorsque `identifierPolicy=custom`. -- `postCompactionSections` : noms facultatifs de sections H2/H3 d’AGENTS.md à réinjecter après compaction. Par défaut `["Session Startup", "Red Lines"]` ; définissez `[]` pour désactiver la réinjection. Lorsqu’il n’est pas défini ou qu’il est explicitement égal à cette paire par défaut, les anciens titres `Every Session`/`Safety` sont aussi acceptés en repli hérité. -- `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 est absent, 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 afin de garder la compaction silencieuse. -- `memoryFlush` : tour agentique silencieux avant auto-compaction pour stocker des souvenirs durables. Ignoré lorsque le workspace 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 méthode `summarize()` du fournisseur est appelée au lieu du résumé LLM intégré. Retombe sur l’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’abandonne. Par défaut : `900`. +- `identifierPolicy` : `strict` (par défaut), `off` ou `custom`. `strict` préfixe une consigne intégrée de conservation des identifiants opaques pendant le résumé de compaction. +- `identifierInstructions` : texte facultatif personnalisé de préservation des identifiants utilisé quand `identifierPolicy=custom`. +- `postCompactionSections` : noms facultatifs de sections H2/H3 d’AGENTS.md à réinjecter après compaction. Par défaut `["Session Startup", "Red Lines"]` ; définissez `[]` pour désactiver la réinjection. Lorsqu’il n’est pas défini ou explicitement réglé sur cette paire par défaut, les anciens titres `Every Session`/`Safety` sont aussi acceptés comme solution de secours 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 une brève notification à l’utilisateur lorsque la compaction commence (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 souvenirs durables. Ignoré si le workspace est en lecture seule. ### `agents.defaults.contextPruning` -Élague les **anciens résultats d’outils** du contexte en mémoire avant l’envoi au LLM. Cela **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 le disque. ```json5 { @@ -1246,7 +1262,7 @@ Exécutions heartbeat périodiques. defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // duration (ms/s/m/h), default unit: minutes + ttl: "1h", // durée (ms/s/m/h), unité par défaut : minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, @@ -1263,24 +1279,24 @@ Exécutions heartbeat périodiques. - `mode: "cache-ttl"` active les passes d’élagage. -- `ttl` contrôle à quelle fréquence l’élagage peut de nouveau s’exécuter (après le dernier accès au cache). -- L’élagage réduit d’abord en douceur les résultats d’outils surdimensionnés, puis efface complètement les plus anciens si nécessaire. +- `ttl` contrôle au bout de combien de temps l’élagage peut se réexécuter (après le dernier contact avec le cache). +- L’élagage tronque d’abord en douceur les résultats d’outil surdimensionnés, puis efface complètement les résultats d’outil plus anciens si nécessaire. -**Soft-trim** conserve le début + la fin et insère `...` au milieu. +**Le soft-trim** conserve le début + la fin et insère `...` au milieu. -**Hard-clear** remplace l’intégralité du résultat de l’outil par le placeholder. +**Le hard-clear** remplace l’intégralité du résultat d’outil par l’espace réservé. Remarques : -- Les blocs d’image ne sont jamais réduits/effacés. -- Les ratios sont basés sur les caractères (approximatifs), pas sur des comptages exacts de jetons. -- S’il y a moins de `keepLastAssistants` messages d’assistant, l’élagage est ignoré. +- Les blocs image ne sont jamais tronqués/effacés. +- Les ratios sont basés sur les caractères (approximatifs), pas sur des décomptes exacts de jetons. +- S’il y a moins de `keepLastAssistants` messages assistant, l’élagage est ignoré. Voir [Élagage de session](/fr/concepts/session-pruning) pour les détails de comportement. -### Réponses en blocs +### Streaming par blocs ```json5 { @@ -1290,17 +1306,17 @@ Voir [Élagage de session](/fr/concepts/session-pruning) pour les détails de co blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (utiliser minMs/maxMs) }, }, } ``` -- Les canaux autres que Telegram nécessitent `*.blockStreaming: true` explicite pour activer les réponses par blocs. +- Les canaux non-Telegram nécessitent un `*.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–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 et les détails de segmentation. ### Indicateurs de saisie @@ -1315,7 +1331,7 @@ Voir [Streaming](/fr/concepts/streaming) pour les détails de comportement + dé } ``` -- Valeurs par défaut : `instant` pour les chats directs/mentions, `message` pour les discussions de groupe sans mention. +- Valeurs par défaut : `instant` pour les chats directs/mentions, `message` pour les chats de groupe sans mention. - Remplacements par session : `session.typingMode`, `session.typingIntervalSeconds`. Voir [Indicateurs de saisie](/fr/concepts/typing-indicators). @@ -1324,7 +1340,7 @@ Voir [Indicateurs de saisie](/fr/concepts/typing-indicators). ### `agents.defaults.sandbox` -Sandboxing facultatif pour l’agent intégré. Voir [Sandboxing](/fr/gateway/sandboxing) pour le guide complet. +Sandboxing facultatif pour l’agent embarqué. Voir [Sandboxing](/fr/gateway/sandboxing) pour le guide complet. ```json5 { @@ -1370,7 +1386,7 @@ Sandboxing facultatif pour l’agent intégré. Voir [Sandboxing](/fr/gateway/sa identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // SecretRefs / inline contents also supported: + // SecretRefs / contenus inline également pris en charge : // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1423,36 +1439,36 @@ Sandboxing facultatif pour l’agent intégré. Voir [Sandboxing](/fr/gateway/sa **Backend :** -- `docker` : environnement Docker local (par défaut) -- `ssh` : environnement distant générique adossé à SSH -- `openshell` : environnement OpenShell +- `docker` : runtime Docker local (par défaut) +- `ssh` : runtime distant générique adossé à SSH +- `openshell` : runtime OpenShell -Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques à l’environnement sont déplacés vers +Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques au runtime passent à `plugins.entries.openshell.config`. **Configuration du backend SSH :** - `target` : cible SSH au format `user@host[:port]` -- `command` : commande client SSH (par défaut : `ssh`) +- `command` : commande du client SSH (par défaut : `ssh`) - `workspaceRoot` : racine distante absolue utilisée pour les workspaces par portée -- `identityFile` / `certificateFile` / `knownHostsFile` : fichiers locaux existants passés à OpenSSH -- `identityData` / `certificateData` / `knownHostsData` : contenus inline ou SecretRef qu’OpenClaw matérialise en fichiers temporaires à l’exécution -- `strictHostKeyChecking` / `updateHostKeys` : paramètres de politique de clé d’hôte OpenSSH +- `identityFile` / `certificateFile` / `knownHostsFile` : fichiers locaux existants transmis à OpenSSH +- `identityData` / `certificateData` / `knownHostsData` : contenus inline ou SecretRefs que OpenClaw matérialise en fichiers temporaires à l’exécution +- `strictHostKeyChecking` / `updateHostKeys` : réglages de politique de clé d’hôte OpenSSH **Priorité d’authentification SSH :** - `identityData` a priorité sur `identityFile` - `certificateData` a priorité sur `certificateFile` - `knownHostsData` a priorité sur `knownHostsFile` -- Les valeurs `*Data` adossées à SecretRef sont résolues depuis l’instantané actif du runtime de secrets avant le démarrage de la session sandbox +- Les valeurs `*Data` adossées à 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 :** - initialise le workspace distant une fois après création ou recréation -- conserve ensuite le workspace SSH distant comme canonique -- achemine `exec`, les outils de fichiers et les chemins média via SSH +- puis conserve le workspace SSH distant comme canonique +- route `exec`, les outils de fichier et les chemins média via SSH - ne synchronise pas automatiquement les modifications distantes vers l’hôte -- ne prend pas en charge les conteneurs de navigateur en sandbox +- ne prend pas en charge les conteneurs de navigateur sandbox **Accès au workspace :** @@ -1464,7 +1480,7 @@ Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques - `session` : conteneur + workspace par session - `agent` : un conteneur + workspace par agent (par défaut) -- `shared` : conteneur et workspace partagés (pas d’isolation inter-sessions) +- `shared` : conteneur et workspace partagés (pas d’isolation inter-session) **Configuration du plugin OpenShell :** @@ -1479,10 +1495,10 @@ Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // optional - gatewayEndpoint: "https://lab.example", // optional - policy: "strict", // optional OpenShell policy id - providers: ["openai"], // optional + gateway: "lab", // facultatif + gatewayEndpoint: "https://lab.example", // facultatif + policy: "strict", // id facultatif de politique OpenShell + providers: ["openai"], // facultatif autoProviders: true, timeoutSeconds: 120, }, @@ -1494,30 +1510,30 @@ Lorsque `backend: "openshell"` est sélectionné, les paramètres spécifiques **Mode OpenShell :** -- `mirror` : initialise le distant depuis le local avant exec, resynchronise ensuite après exec ; le workspace local reste canonique -- `remote` : initialise le distant une fois lors de la création du sandbox, puis conserve le workspace 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 faites sur l’hôte en dehors d’OpenClaw ne sont pas automatiquement synchronisées vers le sandbox après l’étape d’initialisation. -Le transport utilise SSH vers le sandbox OpenShell, mais le plugin gère le cycle de vie du sandbox et la synchronisation miroir facultative. +En mode `remote`, les modifications locales de 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 gère 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 un accès réseau sortant, une racine inscriptible 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` (mode « break-glass »). +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). **Les pièces jointes entrantes** sont placées dans `media/inbound/*` dans le workspace actif. **`docker.binds`** monte des répertoires hôtes 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`. -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). +L’accès observateur noVNC utilise par défaut l’authentification VNC 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 de l’hôte. -- `network` vaut par défaut `openclaw-sandbox-browser` (réseau bridge dédié). Définissez `bridge` uniquement si vous voulez explicitement une connectivité bridge globale. -- `cdpSourceRange` peut restreindre facultativement l’entrée CDP en bord de conteneur à une plage CIDR (par exemple `172.21.0.1/32`). -- `sandbox.browser.binds` monte des répertoires hôtes 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 optimisées pour les hôtes conteneurisés : +- `allowHostControl: false` (par défaut) empêche les sessions sandboxées de cibler le navigateur hôte. +- `network` vaut par défaut `openclaw-sandbox-browser` (réseau bridge dédié). Définissez `bridge` uniquement si vous souhaitez explicitement une connectivité bridge globale. +- `cdpSourceRange` permet facultativement de restreindre l’entrée CDP au bord du conteneur à une plage CIDR (par exemple `172.21.0.1/32`). +- `sandbox.browser.binds` monte des répertoires hôtes supplémentaires uniquement dans le conteneur de navigateur sandbox. Lorsqu’il est défini (y compris `[]`), il remplace `docker.binds` pour le conteneur navigateur. +- Les valeurs de lancement par défaut sont définies dans `scripts/sandbox-browser-entrypoint.sh` et adaptées aux hôtes de conteneur : - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1538,23 +1554,24 @@ L’accès observateur noVNC utilise l’authentification VNC par défaut et Ope - `--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’utilisation de WebGL/3D l’exige. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` réactive les extensions si votre flux de travail + - `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 limite de processus par défaut de Chromium. - - plus `--no-sandbox` et `--disable-setuid-sandbox` lorsque `noSandbox` est activé. - - Les valeurs par défaut constituent la base de l’image conteneur ; utilisez une image 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 constituent la base de l’image de conteneur ; utilisez une image navigateur personnalisée avec un point d’entrée personnalisé + pour modifier les valeurs par défaut du conteneur. -Le sandboxing navigateur et `sandbox.docker.binds` sont actuellement réservés à Docker. +Le sandboxing du navigateur et `sandbox.docker.binds` sont actuellement limités à Docker. Construire les images : ```bash -scripts/sandbox-setup.sh # main sandbox image -scripts/sandbox-browser-setup.sh # optional browser image +scripts/sandbox-setup.sh # image sandbox principale +scripts/sandbox-browser-setup.sh # image navigateur facultative ``` ### `agents.list` (remplacements par agent) @@ -1569,12 +1586,12 @@ scripts/sandbox-browser-setup.sh # optional browser image name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } - thinkingDefault: "high", // per-agent thinking level override - reasoningDefault: "on", // per-agent reasoning visibility override - fastModeDefault: false, // per-agent fast mode override - params: { cacheRetention: "none" }, // overrides matching defaults.models params by key - skills: ["docs-search"], // replaces agents.defaults.skills when set + model: "anthropic/claude-opus-4-6", // ou { primary, fallbacks } + thinkingDefault: "high", // remplacement du niveau thinking par agent + reasoningDefault: "on", // remplacement de la visibilité du raisonnement par agent + fastModeDefault: false, // remplacement du mode rapide par agent + params: { cacheRetention: "none" }, // remplace les clés correspondantes de defaults.models params + skills: ["docs-search"], // remplace agents.defaults.skills lorsqu’il est défini identity: { name: "Samantha", theme: "helpful sloth", @@ -1605,20 +1622,20 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -- `id` : identifiant d’agent stable (obligatoire). -- `default` : lorsque plusieurs agents sont définis, le premier gagne (avertissement consigné). 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 seulement `primary` ; la forme objet `{ primary, fallbacks }` remplace les deux (`[]` désactive les secours globaux). Les tâches cron qui ne remplacent que `primary` héritent toujours des secours 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’autorisation facultative de Skills par agent. Si elle est omise, l’agent hérite de `agents.defaults.skills` si défini ; une liste explicite remplace les valeurs par défaut au lieu de fusionner, et `[]` signifie aucune Skills. -- `thinkingDefault` : niveau de thinking par défaut facultatif pour l’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é par défaut facultative du reasoning (`on | off | stream`). S’applique lorsqu’aucun remplacement du reasoning par message ou session n’est défini. -- `fastModeDefault` : valeur par défaut facultative pour le mode rapide (`true | false`). S’applique lorsqu’aucun remplacement du mode rapide par message ou session n’est défini. -- `runtime` : descripteur facultatif du runtime 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 harnais ACP. +- `id` : ID d’agent stable (obligatoire). +- `default` : si plusieurs sont définis, le premier l’emporte (un avertissement est consigné). 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 ne remplace que `primary` ; la forme objet `{ primary, fallbacks }` remplace les deux (`[]` désactive les fallbacks globaux). Les tâches cron qui ne remplacent que `primary` héritent quand même des fallbacks par défaut sauf si vous définissez `fallbacks: []`. +- `params` : paramètres de flux par agent fusionnés par-dessus l’entrée de modèle sélectionnée dans `agents.defaults.models`. Utilisez cela pour des remplacements spécifiques à un agent comme `cacheRetention`, `temperature` ou `maxTokens` sans dupliquer tout le catalogue de modèles. +- `skills` : liste d’autorisation 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 les fusionner, 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é de raisonnement par défaut facultative par agent (`on | off | stream`). S’applique lorsqu’aucun remplacement de raisonnement 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. +- `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 avec harness ACP. - `identity.avatar` : chemin relatif au workspace, URL `http(s)` ou URI `data:`. -- `identity` déduit des valeurs par défaut : `ackReaction` depuis `emoji`, `mentionPatterns` depuis `name`/`emoji`. -- `subagents.allowAgents` : liste d’autorisation d’identifiants d’agent pour `sessions_spawn` (`["*"]` = n’importe lequel ; par défaut : même agent uniquement). +- `identity` dérive des valeurs par défaut : `ackReaction` à partir de `emoji`, `mentionPatterns` à partir de `name`/`emoji`. +- `subagents.allowAgents` : liste d’autorisation des ID d’agents pour `sessions_spawn` (`["*"]` = n’importe lequel ; par défaut : le même agent uniquement). - Garde d’héritage sandbox : si la session demandeuse est sandboxée, `sessions_spawn` rejette les cibles qui s’exécuteraient sans sandbox. -- `subagents.requireAgentId` : lorsque vrai, bloque les appels `sessions_spawn` qui omettent `agentId` (force une sélection explicite de profil ; valeur par défaut : false). +- `subagents.requireAgentId` : lorsqu’il vaut true, bloque les appels `sessions_spawn` qui omettent `agentId` (force une sélection de profil explicite ; par défaut : false). --- @@ -1641,27 +1658,27 @@ Exécutez plusieurs agents isolés dans une même passerelle. Voir [Multi-Agent] } ``` -### Champs de correspondance des liaisons +### Champs de correspondance de liaison -- `type` (facultatif) : `route` pour le routage normal (l’absence de type vaut route), `acp` pour les liaisons de conversation ACP persistantes. +- `type` (facultatif) : `route` pour le routage normal (type manquant = route par défaut), `acp` pour les liaisons persistantes de conversation ACP. - `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 les entrées `type: "acp"`) : `{ mode, label, cwd, backend }` +- `acp` (facultatif ; uniquement pour `type: "acp"`) : `{ mode, label, cwd, backend }` **Ordre de correspondance déterministe :** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` -4. `match.accountId` (exact, sans pair/guild/team) +4. `match.accountId` (exact, sans peer/guild/team) 5. `match.accountId: "*"` (à l’échelle du canal) 6. Agent par défaut -À l’intérieur de chaque niveau, la première entrée `bindings` correspondante l’emporte. +Dans chaque niveau, la première entrée `bindings` correspondante l’emporte. -Pour les entrées `type: "acp"`, OpenClaw résout par identité de conversation exacte (`match.channel` + compte + `match.peer.id`) et n’utilise pas l’ordre des niveaux de liaison de route ci-dessus. +Pour les entrées `type: "acp"`, OpenClaw résout par identité de conversation exacte (`match.channel` + compte + `match.peer.id`) et n’utilise pas l’ordre de niveau de liaison de route ci-dessus. ### Profils d’accès par agent @@ -1784,22 +1801,22 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) + parentForkMaxTokens: 100000, // ignorer la bifurcation du fil parent au-delà de ce nombre de jetons (0 désactive) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // duration or false - maxDiskBytes: "500mb", // optional hard budget - highWaterBytes: "400mb", // optional cleanup target + resetArchiveRetention: "30d", // durée ou false + maxDiskBytes: "500mb", // facultatif, budget strict + highWaterBytes: "400mb", // facultatif, cible de nettoyage }, threadBindings: { enabled: true, - idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) - maxAgeHours: 0, // default hard max age in hours (`0` disables) + idleHours: 24, // valeur par défaut du retrait automatique du focus après inactivité en heures (`0` désactive) + maxAgeHours: 0, // valeur par défaut de l’âge maximal strict en heures (`0` désactive) }, - mainKey: "main", // legacy (runtime always uses "main") + mainKey: "main", // hérité (le runtime utilise toujours "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1811,35 +1828,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. +- **`scope`** : stratégie de groupement de session de base pour les contextes de chat de groupe. - `per-sender` (par défaut) : chaque expéditeur obtient une session isolée dans un contexte de canal. - - `global` : tous les participants dans un contexte de canal partagent une même session (à utiliser seulement lorsqu’un contexte partagé est voulu). + - `global` : tous les participants d’un contexte de canal partagent une seule session (à utiliser uniquement lorsque le contexte partagé est voulu). - **`dmScope`** : comment les DM sont regroupés. - `main` : tous les DM partagent la session principale. - - `per-peer` : isole par identifiant d’expéditeur à travers les canaux. - - `per-channel-peer` : isole par canal + expéditeur (recommandé pour les boîtes de réception multi-utilisateurs). + - `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-utilisateur). - `per-account-channel-peer` : isole par compte + canal + expéditeur (recommandé pour le multi-compte). -- **`identityLinks`** : mappe les identifiants canoniques à des pairs préfixés par fournisseur pour le partage inter-canaux de session. -- **`reset`** : politique principale de réinitialisation. `daily` réinitialise à `atHour` heure locale ; `idle` réinitialise après `idleMinutes`. Lorsque les deux sont configurés, la première expiration l’emporte. -- **`resetByType`** : remplacements par type (`direct`, `group`, `thread`). L’ancien alias `dm` est accepté comme alias de `direct`. -- **`parentForkMaxTokens`** : nombre maximal de `totalTokens` de session parente autorisé lors de la création d’une session de fil dérivée (par défaut `100000`). - - Si `totalTokens` du parent est supérieur à cette valeur, OpenClaw démarre une session de fil fraîche au lieu d’hériter de l’historique de transcription du parent. - - Définissez `0` pour désactiver cette garde et toujours autoriser la dérivation depuis le parent. -- **`mainKey`** : champ hérité. Le runtime utilise désormais toujours `"main"` pour le compartiment principal des discussions directes. -- **`agentToAgent.maxPingPongTurns`** : nombre maximal de tours de réponse en va-et-vient entre agents lors d’échanges agent-à-agent (entier, plage : `0`–`5`). `0` désactive les enchaînements ping-pong. +- **`identityLinks`** : mappe des ID canoniques à des peers 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, la première échéance l’emporte. +- **`resetByType`** : remplacements par type (`direct`, `group`, `thread`). L’ancien `dm` est accepté comme alias de `direct`. +- **`parentForkMaxTokens`** : nombre maximal de `totalTokens` de la session parente autorisé lors de la création d’une session de fil bifurquée (par défaut `100000`). + - Si `totalTokens` du parent dépasse 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 garde et toujours autoriser la bifurcation depuis le parent. +- **`mainKey`** : champ hérité. Le runtime utilise désormais toujours `"main"` pour le compartiment principal de chat direct. +- **`agentToAgent.maxPingPongTurns`** : nombre maximal de tours de réponse croisés 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 des sessions. - - `mode` : `warn` émet seulement des avertissements ; `enforce` applique le nettoyage. +- **`maintenance`** : contrôles de nettoyage + rétention du magasin de sessions. + - `mode` : `warn` n’émet que des avertissements ; `enforce` applique le nettoyage. - `pruneAfter` : seuil d’âge 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` : durée de rétention des archives de transcription `*.reset.`. Par défaut à `pruneAfter` ; définissez `false` pour désactiver. - - `maxDiskBytes` : budget disque facultatif pour le répertoire des sessions. En mode `warn`, il consigne 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` : commutateur maître par défaut (les fournisseurs peuvent remplacer ; Discord utilise `channels.discord.threadBindings.enabled`) - - `idleHours` : valeur par défaut de désancrage automatique sur inactivité en heures (`0` désactive ; les fournisseurs peuvent remplacer) - - `maxAgeHours` : valeur par défaut d’âge maximal strict en heures (`0` désactive ; les fournisseurs peuvent remplacer) + - `rotateBytes` : fait pivoter `sessions.json` lorsqu’il dépasse cette taille (par défaut `10mb`). + - `resetArchiveRetention` : durée de rétention pour les archives de transcription `*.reset.`. Par défaut, reprend `pruneAfter` ; définissez `false` pour désactiver. + - `maxDiskBytes` : budget disque facultatif du répertoire de sessions. En mode `warn`, consigne des avertissements ; en mode `enforce`, supprime d’abord les artefacts/sessions les plus anciens. + - `highWaterBytes` : cible facultative après nettoyage de budget. Par défaut : `80%` de `maxDiskBytes`. +- **`threadBindings`** : valeurs par défaut globales pour les fonctions 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) @@ -1850,7 +1867,7 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l ```json5 { messages: { - responsePrefix: "🦞", // or "auto" + responsePrefix: "🦞", // ou "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -1865,7 +1882,7 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l }, }, inbound: { - debounceMs: 2000, // 0 disables + debounceMs: 2000, // 0 désactive byChannel: { whatsapp: 5000, slack: 1500, @@ -1879,34 +1896,34 @@ Voir [Sandbox et outils multi-agent](/fr/tools/multi-agent-sandbox-tools) pour l Remplacements par canal/compte : `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Résolution (le 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 gagne) : compte → canal → global. `""` désactive et arrête la cascade. `"auto"` dérive `[{identity.name}]`. **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 thinking actuel | `high`, `low`, `off` | -| `{identity.name}` | Nom de l’identité de l’agent | (identique à `"auto"`) | +| `{provider}` | Nom du fournisseur | `anthropic` | +| `{thinkingLevel}` | Niveau 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é de réception +### Réaction d’accusé -- Utilise par défaut `identity.emoji` de l’agent actif, sinon `"👀"`. Définissez `""` pour désactiver. +- Par défaut, reprend `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é. +- Ordre de résolution : compte → canal → `messages.ackReaction` → repli sur l’identité. - 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 de statut de cycle de vie sur Slack, Discord et Telegram. - Sur Slack et Discord, si absent, les réactions de statut restent activées lorsque les réactions d’accusé sont actives. - Sur Telegram, définissez-le explicitement à `true` pour activer les réactions de statut de cycle de vie. +- `removeAckAfterReply` : supprime l’accusé après réponse sur Slack, Discord et Telegram. +- `messages.statusReactions.enabled` : active les réactions de statut du cycle de vie sur Slack, Discord et Telegram. + Sur Slack et Discord, une valeur non définie conserve les réactions de statut activées lorsque les réactions d’accusé sont actives. + Sur Telegram, définissez-la explicitement à `true` pour activer les réactions de statut du cycle de vie. -### Debounce entrant +### Débounce entrant -Regroupe les messages textuels rapides provenant du même expéditeur en un seul tour d’agent. Les médias/pièces jointes provoquent un flush immédiat. Les commandes de contrôle contournent le debounce. +Regroupe les messages texte rapides provenant du même expéditeur dans un seul tour d’agent. Les médias/pièces jointes forcent un flush immédiat. Les commandes de contrôle contournent le debounce. ### TTS (synthèse vocale) @@ -1951,10 +1968,10 @@ Regroupe les messages textuels rapides provenant du même expéditeur en un seul - `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 par défaut `false` (activation explicite requise). -- Les clés API utilisent `ELEVENLABS_API_KEY`/`XI_API_KEY` et `OPENAI_API_KEY` comme repli. -- `openai.baseUrl` remplace le point de terminaison OpenAI TTS. 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 `false` par défaut (activation explicite). +- Les clés API retombent sur `ELEVENLABS_API_KEY`/`XI_API_KEY` et `OPENAI_API_KEY`. +- `openai.baseUrl` remplace l’endpoint 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 endpoint non OpenAI, OpenClaw le traite comme un serveur TTS compatible OpenAI et assouplit la validation du modèle/de la voix. --- @@ -1984,13 +2001,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`) ne sont conservées que pour compatibilité et sont automatiquement migrées vers `talk.providers.`. -- Les identifiants de voix utilisent `ELEVENLABS_VOICE_ID` ou `SAG_VOICE_ID` comme repli. +- `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 de compatibilité et sont migrées automatiquement vers `talk.providers.`. +- Les ID de voix retombent sur `ELEVENLABS_VOICE_ID` ou `SAG_VOICE_ID`. - `providers.*.apiKey` accepte des chaînes en clair ou des objets SecretRef. - Le repli `ELEVENLABS_API_KEY` ne s’applique que lorsqu’aucune clé API Talk n’est configurée. - `providers.*.voiceAliases` permet aux directives Talk d’utiliser des noms conviviaux. -- `silenceTimeoutMs` contrôle la durée d’attente du mode Talk après le silence utilisateur avant l’envoi de la transcription. Si absent, 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. Non défini conserve la fenêtre de pause par défaut de la plateforme (`700 ms sur macOS et Android, 900 ms sur iOS`). --- @@ -2000,31 +2017,31 @@ Valeurs par défaut du mode Talk (macOS/iOS/Android). `tools.profile` définit une liste d’autorisation de base avant `tools.allow`/`tools.deny` : -L’onboarding local définit par défaut `tools.profile: "coding"` pour les nouvelles configurations locales lorsqu’il est absent (les profils explicites existants sont conservés). +L’intégration locale 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). -| Profil | Inclut | -| ----------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `minimal` | `session_status` uniquement | +| Profil | Inclut | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `minimal` | `session_status` uniquement | | `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` | | `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | -| `full` | Aucune restriction (identique à absent) | +| `full` | Aucune restriction (identique à non défini) | ### 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 (hors plugins de 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 (hors plugins fournisseurs) | ### `tools.allow` / `tools.deny` @@ -2038,7 +2055,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 fournisseur → autorisation/refus. +Restreint davantage les outils pour des fournisseurs ou modèles spécifiques. Ordre : profil de base → profil fournisseur → allow/deny. ```json5 { @@ -2072,7 +2089,7 @@ Contrôle l’accès exec élevé en dehors du sandbox : - Le remplacement par agent (`agents.list[].tools.elevated`) ne peut que restreindre davantage. - `/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`). +- L’`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` @@ -2096,7 +2113,7 @@ Contrôle l’accès exec élevé en dehors du sandbox : ### `tools.loopDetection` -Les vérifications de sécurité contre les boucles d’outils sont **désactivées par défaut**. Définissez `enabled: true` pour activer la détection. +Les contrôles de sécurité de boucle d’outil sont **désactivés par défaut**. Définissez `enabled: true` pour activer la détection. Les paramètres peuvent être définis globalement dans `tools.loopDetection` et remplacés par agent dans `agents.list[].tools.loopDetection`. ```json5 @@ -2118,13 +2135,13 @@ Les paramètres peuvent être définis globalement dans `tools.loopDetection` et } ``` -- `historySize` : historique maximal d’appels d’outils conservé pour l’analyse des boucles. +- `historySize` : historique maximal d’appels d’outil conservé pour l’analyse des boucles. - `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 strict pour toute exécution sans progression. - `detectors.genericRepeat` : avertit en cas d’appels répétés au même outil/aux 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 en paire sans progression. +- `detectors.knownPollNoProgress` : avertit/bloque pour les outils de sondage connus (`process.poll`, `command_status`, etc.). +- `detectors.pingPong` : avertit/bloque pour les motifs alternés sans progression par paire. - Si `warningThreshold >= criticalThreshold` ou `criticalThreshold >= globalCircuitBreakerThreshold`, la validation échoue. ### `tools.web` @@ -2135,14 +2152,14 @@ Les paramètres peuvent être définis globalement dans `tools.loopDetection` et web: { search: { enabled: true, - apiKey: "brave_api_key", // or BRAVE_API_KEY env + apiKey: "brave_api_key", // ou env BRAVE_API_KEY maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // optional; omit for auto-detect + provider: "firecrawl", // facultatif ; omettre pour la détection automatique maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2159,7 +2176,7 @@ Les paramètres peuvent être définis globalement dans `tools.loopDetection` et ### `tools.media` -Configure l’analyse des médias entrants (image/audio/vidéo) : +Configure la compréhension des médias entrants (image/audio/vidéo) : ```json5 { @@ -2167,7 +2184,7 @@ Configure l’analyse des médias entrants (image/audio/vidéo) : media: { concurrency: 2, asyncCompletion: { - directSend: false, // opt-in: send finished async music/video directly to the channel + directSend: false, // activation explicite : envoyer les tâches musique/vidéo asynchrones terminées directement au canal }, audio: { enabled: true, @@ -2191,32 +2208,32 @@ Configure l’analyse des médias entrants (image/audio/vidéo) : } ``` - + **Entrée fournisseur** (`type: "provider"` ou omis) : -- `provider` : identifiant du fournisseur d’API (`openai`, `anthropic`, `google`/`gemini`, `groq`, etc.) -- `model` : remplacement d’identifiant de modèle -- `profile` / `preferredProfile` : sélection de profil `auth-profiles.json` +- `provider` : ID du fournisseur 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"`) : - `command` : exécutable à lancer -- `args` : arguments à modèle (prend en charge `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, etc.) +- `args` : arguments avec modèles (prend en charge `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, etc.) **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. -- Les échecs passent à l’entrée suivante. +- Les échecs retombent sur l’entrée suivante. -L’authentification du fournisseur suit l’ordre standard : `auth-profiles.json` → variables d’environnement → `models.providers.*.apiKey`. +L’authentification fournisseur suit l’ordre standard : `auth-profiles.json` → variables d’environnement → `models.providers.*.apiKey`. -**Champs de fin asynchrone :** +**Champs de complétion asynchrone :** - `asyncCompletion.directSend` : lorsque `true`, les tâches `music_generate` - et `video_generate` asynchrones terminées tentent d’abord une livraison directe au canal. Valeur par défaut : `false` - (ancien chemin de réveil de session demandeuse/livraison par modèle). + et `video_generate` asynchrones terminées essaient d’abord la livraison directe au canal. Par défaut : `false` + (ancien chemin de réveil de session demandeur / livraison par modèle). @@ -2254,9 +2271,9 @@ Remarques : - `self` : uniquement la clé de session actuelle. - `tree` : session actuelle + sessions engendrées par la session actuelle (sous-agents). -- `agent` : toute session appartenant à l’identifiant d’agent actuel (peut inclure d’autres utilisateurs si vous exécutez des sessions par expéditeur sous le même identifiant d’agent). -- `all` : n’importe quelle session. Le ciblage inter-agents nécessite toujours `tools.agentToAgent`. -- Limitation par 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"`. +- `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-agent 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` @@ -2267,11 +2284,11 @@ Contrôle la prise en charge des pièces jointes inline pour `sessions_spawn`. tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: set true to allow inline file attachments - maxTotalBytes: 5242880, // 5 MB total across all files + enabled: false, // activation explicite : définir true pour autoriser les pièces jointes inline + maxTotalBytes: 5242880, // 5 MB total sur tous les fichiers maxFiles: 50, - maxFileBytes: 1048576, // 1 MB per file - retainOnSessionKeep: false, // keep attachments when cleanup="keep" + maxFileBytes: 1048576, // 1 MB par fichier + retainOnSessionKeep: false, // conserver les pièces jointes quand cleanup="keep" }, }, }, @@ -2282,20 +2299,20 @@ 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 le workspace enfant à `.openclaw/attachments//` avec un `.manifest.json`. -- Le contenu des pièces jointes est automatiquement masqué de la persistance de transcription. +- Le contenu des pièces jointes est automatiquement caviardé de la persistance de transcription. - Les entrées base64 sont validées avec des contrôles stricts d’alphabet/remplissage et une garde de taille avant décodage. -- Les permissions des fichiers sont `0700` pour les répertoires et `0600` pour les fichiers. +- 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 d’outils intégrés expérimentaux. Désactivés par défaut sauf lorsqu’une règle d’activation automatique spécifique au runtime s’applique. +Drapeaux expérimentaux des outils intégrés. Désactivés par défaut sauf si une règle d’auto-activation spécifique au runtime s’applique. ```json5 { tools: { experimental: { - planTool: true, // enable experimental update_plan + planTool: true, // activer update_plan expérimental }, }, } @@ -2303,9 +2320,9 @@ Indicateurs d’outils intégrés expérimentaux. Désactivés par défaut sauf Remarques : -- `planTool` : active l’outil structuré `update_plan` pour le suivi du travail non trivial en plusieurs étapes. -- Valeur par défaut : `false` pour les fournisseurs non OpenAI. Les exécutions OpenAI et OpenAI Codex l’activent automatiquement lorsqu’il est absent ; définissez `false` pour désactiver cette activation automatique. -- Lorsqu’il est activé, le prompt système ajoute aussi des consignes d’usage afin que le modèle ne l’utilise que pour un travail substantiel et conserve au plus une étape `in_progress`. +- `planTool` : active l’outil structuré `update_plan` pour le suivi des travaux multi-étapes non triviaux. +- Par défaut : `false` pour les fournisseurs non OpenAI. Les exécutions OpenAI et OpenAI Codex l’activent automatiquement lorsqu’il n’est pas défini ; définissez `false` pour désactiver cette auto-activation. +- Lorsqu’il est activé, le prompt système ajoute également des consignes d’usage afin que le modèle ne l’utilise que pour un travail substantiel et conserve au plus une étape `in_progress`. ### `agents.defaults.subagents` @@ -2325,21 +2342,21 @@ 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’autorisation par défaut des identifiants 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 (en secondes) pour `sessions_spawn` lorsque l’appel à l’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 engendrés. S’il est omis, les sous-agents héritent du modèle de l’appelant. +- `allowAgents` : liste d’autorisation par défaut des ID d’agents cibles pour `sessions_spawn` lorsque l’agent demandeur ne définit pas son propre `subagents.allowAgents` (`["*"]` = n’importe lequel ; par défaut : le même agent uniquement). +- `runTimeoutSeconds` : délai d’expiration par défaut (secondes) pour `sessions_spawn` lorsque l’appel d’outil omet `runTimeoutSeconds`. `0` signifie aucune expiration. +- Politique d’outils par sous-agent : `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- ## Fournisseurs personnalisés et URL de base -OpenClaw utilise le catalogue intégré de modèles. Ajoutez des fournisseurs personnalisés via `models.providers` dans la configuration ou `~/.openclaw/agents//agent/models.json`. +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`. ```json5 { models: { - mode: "merge", // merge (default) | replace + mode: "merge", // merge (par défaut) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2364,46 +2381,46 @@ OpenClaw utilise le catalogue intégré de modèles. Ajoutez des fournisseurs pe ``` - Utilisez `authHeader: true` + `headers` pour les besoins d’authentification personnalisés. -- Remplacez la racine de configuration d’agent avec `OPENCLAW_AGENT_DIR` (ou `PI_CODING_AGENT_DIR`, ancien alias de variable d’environnement). -- Priorité de fusion pour les identifiants de fournisseur correspondants : - - Les valeurs `baseUrl` non vides de `models.json` d’agent ont priorité. - - Les valeurs `apiKey` non vides de l’agent ont priorité seulement 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 rafraîchies à partir des marqueurs de source (`ENV_VAR_NAME` pour les références env, `secretref-managed` pour les références file/exec) au lieu de persister les secrets résolus. - - Les valeurs d’en-tête de fournisseur gérées par SecretRef sont rafraîchies à partir des marqueurs de source (`secretref-env:ENV_VAR_NAME` pour les références env, `secretref-managed` pour les références file/exec). - - Les `apiKey`/`baseUrl` vides ou absents de l’agent reviennent à `models.providers` dans la configuration. - - Les `contextWindow`/`maxTokens` du modèle correspondant utilisent la valeur la plus élevée entre la configuration explicite et les valeurs implicites du catalogue. - - Les `contextTokens` du modèle correspondant conservent une limite explicite du runtime lorsqu’elle est présente ; utilisez-la pour limiter le contexte effectif sans changer les métadonnées natives du modèle. - - Utilisez `models.mode: "replace"` lorsque vous voulez que la configuration réécrive complètement `models.json`. - - La persistance des marqueurs est pilotée par la source : les marqueurs sont écrits depuis l’instantané actif de configuration source (avant résolution), et non depuis les valeurs de secret résolues à l’exécution. +- 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` d’agent `models.json` non vides l’emportent. + - Les valeurs `apiKey` d’agent non vides 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 réactualisées à partir des marqueurs de source (`ENV_VAR_NAME` pour les refs env, `secretref-managed` pour les refs file/exec) au lieu de persister les secrets résolus. + - Les valeurs d’en-tête de fournisseur gérées par SecretRef sont réactualisées à partir des marqueurs de source (`secretref-env:ENV_VAR_NAME` pour les refs env, `secretref-managed` pour les refs file/exec). + - Les `apiKey`/`baseUrl` d’agent vides ou absents retombent sur `models.providers` dans la configuration. + - Les `contextWindow`/`maxTokens` de modèle correspondant utilisent la valeur la plus élevée entre la configuration explicite et les valeurs implicites du catalogue. + - Les `contextTokens` de modèle correspondant préservent 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 souhaitez que la configuration réécrive entièrement `models.json`. + - La persistance des marqueurs est pilotée par la source : les marqueurs sont écrits depuis l’instantané actif de la configuration source (pré-résolution), et non depuis les valeurs secrètes résolues à l’exécution. -### Détails des champs du fournisseur +### Détails des champs fournisseur - `models.mode` : comportement du catalogue fournisseur (`merge` ou `replace`). -- `models.providers` : map des fournisseurs personnalisés, indexée par identifiant de fournisseur. -- `models.providers.*.api` : adaptateur de requête (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, etc.). -- `models.providers.*.apiKey` : identifiant fournisseur (préférez SecretRef/substitution d’environnement). +- `models.providers` : map de 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 fournisseur (préférer 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 de l’identifiant dans l’en-tête `Authorization` lorsque nécessaire. -- `models.providers.*.baseUrl` : URL de base de l’API amont. +- `models.providers.*.authHeader` : forcer le transport des identifiants dans l’en-tête `Authorization` lorsque nécessaire. +- `models.providers.*.baseUrl` : URL de base de l’API en 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èles. - `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 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 de proxy HTTP. Modes : `"env-proxy"` (utiliser les variables d’environnement `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (avec `url`). Les deux modes acceptent un sous-objet `tls` facultatif. + - `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"` (utiliser 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`. -- `models.providers.*.models` : entrées explicites du catalogue de modèles du fournisseur. +- `models.providers.*.models` : entrées explicites du catalogue de modèles fournisseur. - `models.providers.*.models.*.contextWindow` : métadonnées de fenêtre de contexte native du modèle. -- `models.providers.*.models.*.contextTokens` : limite facultative du contexte à l’exécution. Utilisez-la lorsque vous voulez un budget de contexte effectif plus faible que le `contextWindow` natif du modèle. -- `models.providers.*.models.*.compat.supportsDeveloperRole` : indice facultatif de compatibilité. Pour `api: "openai-completions"` avec un `baseUrl` non natif non vide (hôte différent de `api.openai.com`), OpenClaw le force à `false` à l’exécution. `baseUrl` vide/absent conserve le comportement OpenAI par défaut. -- `models.providers.*.models.*.compat.requiresStringContent` : indice facultatif de compatibilité pour les points de terminaison chat OpenAI-compatibles n’acceptant que des chaînes. Lorsqu’il vaut `true`, OpenClaw aplatit en chaînes simples les tableaux `messages[].content` de texte pur avant envoi. -- `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 par identifiant 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. +- `models.providers.*.models.*.contextTokens` : limite facultative de contexte à l’exécution. Utilisez-la lorsque vous souhaitez un budget de contexte effectif plus faible que le `contextWindow` natif du modèle. +- `models.providers.*.models.*.compat.supportsDeveloperRole` : indice de compatibilité facultatif. Pour `api: "openai-completions"` avec un `baseUrl` non vide et non natif (hôte différent de `api.openai.com`), OpenClaw le force à `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 endpoints de chat compatibles OpenAI n’acceptant que des chaînes. Lorsqu’il vaut `true`, OpenClaw aplatit les tableaux `messages[].content` en texte pur vers des 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` : activer/désactiver 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 d’ID de fournisseur pour une détection ciblée. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval` : intervalle d’interrogation pour le rafraîchissement 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. ### Exemples de fournisseurs @@ -2477,9 +2494,9 @@ Définissez `OPENCODE_API_KEY` (ou `OPENCODE_ZEN_API_KEY`). Utilisez les 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`. -- 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 remplacement de l’URL de base. +- Endpoint général : `https://api.z.ai/api/paas/v4` +- Endpoint coding (par défaut) : `https://api.z.ai/api/coding/paas/v4` +- Pour l’endpoint général, définissez un fournisseur personnalisé avec remplacement de l’URL de base. @@ -2518,11 +2535,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 l’endpoint Chine : `baseUrl: "https://api.moonshot.cn/v1"` ou `openclaw onboard --auth-choice moonshot-api-key-cn`. -Les points de terminaison Moonshot natifs annoncent une compatibilité d’usage du streaming sur le transport partagé -`openai-completions`, et OpenClaw s’appuie désormais sur les capacités du point de terminaison -plutôt que sur le seul identifiant de fournisseur intégré. +Les endpoints Moonshot natifs annoncent une compatibilité d’utilisation du streaming sur le transport partagé +`openai-completions`, et OpenClaw se base maintenant sur les capacités de l’endpoint +plutôt que sur le seul ID du fournisseur intégré. @@ -2622,9 +2639,9 @@ L’URL de base doit omettre `/v1` (le client Anthropic l’ajoute). Raccourci : 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 désormais M2.7 seul par défaut. -Sur le chemin de streaming compatible Anthropic, OpenClaw désactive le thinking MiniMax -par défaut sauf si vous définissez explicitement `thinking`. `/fast on` ou +Le catalogue de modèles utilise désormais M2.7 uniquement par défaut. +Sur le chemin de streaming compatible Anthropic, OpenClaw désactive thinking de MiniMax +par défaut 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`. @@ -2632,7 +2649,7 @@ par défaut sauf si vous définissez explicitement `thinking`. `/fast on` ou -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 pour le secours. +Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand modèle local via l’API LM Studio Responses sur du matériel sérieux ; conservez les modèles hébergés fusionnés comme solution de secours. @@ -2653,7 +2670,7 @@ Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand m }, entries: { "image-lab": { - apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string + apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // ou chaîne en clair env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, @@ -2663,14 +2680,14 @@ Voir [Modèles locaux](/fr/gateway/local-models). En bref : exécutez un grand m } ``` -- `allowBundled` : liste d’autorisation facultative pour les seules Skills fournies en bundle (les Skills gérées/en workspace ne sont pas affectées). -- `load.extraDirs` : racines partagées supplémentaires de Skills (priorité la plus basse). -- `install.preferBrew` : lorsque vrai, préfère les installateurs Homebrew lorsque `brew` est - disponible avant de revenir à d’autres types d’installateur. -- `install.nodeManager` : préférence d’installateur Node pour les spécifications +- `allowBundled` : liste d’autorisation facultative des bundled Skills uniquement (les skills gérés/de workspace ne sont pas affectés). +- `load.extraDirs` : racines de skills partagées supplémentaires (priorité la plus faible). +- `install.preferBrew` : lorsqu’il vaut true, privilégie les installateurs Homebrew lorsque `brew` est + disponible avant de retomber sur d’autres types d’installateurs. +- `install.nodeManager` : préférence du 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 fournie en bundle/installée. -- `entries..apiKey` : commodité pour les Skills déclarant une variable d’environnement primaire (chaîne en clair ou objet SecretRef). +- `entries..enabled: false` désactive un skill même s’il est groupé/installé. +- `entries..apiKey` : champ pratique de clé API au niveau du skill (lorsque pris en charge par le skill). --- @@ -2698,39 +2715,39 @@ 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 au layout par défaut. +- Chargés depuis `~/.openclaw/extensions`, `/.openclaw/extensions`, ainsi que `plugins.load.paths`. +- La découverte accepte les plugins OpenClaw natifs ainsi que les bundles compatibles Codex et Claude, y compris les bundles Claude sans manifeste dans la disposition par défaut. - **Les modifications de configuration nécessitent un redémarrage de la passerelle.** - `allow` : liste d’autorisation facultative (seuls les plugins listés sont chargés). `deny` l’emporte. -- `plugins.entries..apiKey` : champ pratique de clé API au niveau du plugin (quand le plugin le prend en charge). -- `plugins.entries..env` : map de variables d’environnement à portée du plugin. -- `plugins.entries..hooks.allowPromptInjection` : lorsque `false`, le noyau bloque `before_prompt_build` et ignore les champs de mutation de prompt des anciens `before_agent_start`, tout en préservant les anciens `modelOverride` et `providerOverride`. S’applique aux hooks de plugins natifs et aux répertoires de hooks fournis par bundle pris en charge. -- `plugins.entries..subagent.allowModelOverride` : faire 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’autorisation facultative des cibles canoniques `provider/model` pour les remplacements de sous-agents de confiance. Utilisez `"*"` seulement si 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 lorsqu’il est 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`. +- `plugins.entries..apiKey` : champ pratique de clé API au niveau du plugin (quand pris en charge par le plugin). +- `plugins.entries..env` : map de variables d’environnement au niveau du plugin. +- `plugins.entries..hooks.allowPromptInjection` : lorsque `false`, le cœur bloque `before_prompt_build` et ignore les champs hérités modifiant le prompt de `before_agent_start`, tout en conservant les anciens `modelOverride` et `providerOverride`. S’applique aux hooks de plugins natifs et aux répertoires de hooks fournis par bundle pris en charge. +- `plugins.entries..subagent.allowModelOverride` : faire explicitement confiance à ce plugin pour demander des remplacements `provider` et `model` par exécution pour les exécutions de sous-agent en arrière-plan. +- `plugins.entries..subagent.allowedModels` : liste d’autorisation facultative des cibles canoniques `provider/model` pour les remplacements de sous-agent de confiance. Utilisez `"*"` uniquement si vous souhaitez délibérément autoriser n’importe quel modèle. +- `plugins.entries..config` : objet de configuration défini par le plugin (validé par le schéma du plugin natif OpenClaw lorsque disponible). +- `plugins.entries.firecrawl.config.webFetch` : paramètres du fournisseur de récupération web Firecrawl. + - `apiKey` : clé API Firecrawl (accepte SecretRef). Retombe sur `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` : âge maximal du cache en millisecondes (par défaut : `172800000` / 2 jours). - - `timeoutSeconds` : délai maximal de la requête de scraping en secondes (par défaut : `60`). + - `timeoutSeconds` : délai d’expiration de la requête 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 exemple `"grok-4-1-fast"`). + - `model` : modèle Grok à utiliser pour la recherche (par ex. `"grok-4-1-fast"`). - `plugins.entries.memory-core.config.dreaming` : paramètres expérimentaux de memory dreaming. Voir [Dreaming](/fr/concepts/dreaming) pour les phases et seuils. - - `enabled` : commutateur maître du dreaming (par défaut `false`). + - `enabled` : interrupteur maître de dreaming (par défaut `false`). - `frequency` : cadence cron pour chaque balayage complet de dreaming (`"0 3 * * *"` par défaut). - - la politique de phase et les seuils sont des détails d’implémentation (pas des clés de configuration exposées à l’utilisateur). -- La configuration complète de la mémoire se trouve dans [Référence de configuration de la mémoire](/fr/reference/memory-config) : + - 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 complète de la mémoire est 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 bundle Claude activés peuvent aussi fournir des 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` : choisir l’identifiant du plugin mémoire actif, ou `"none"` pour désactiver les plugins mémoire. -- `plugins.slots.contextEngine` : choisir l’identifiant du plugin moteur de contexte actif ; 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`. +- Les plugins de bundle Claude activés peuvent aussi contribuer des valeurs par défaut Pi embarquées depuis `settings.json` ; OpenClaw les applique comme paramètres d’agent assainis, pas comme correctifs de configuration OpenClaw bruts. +- `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 ; 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. @@ -2738,7 +2755,7 @@ Voir [Plugins](/fr/tools/plugin). --- -## Browser +## Navigateur ```json5 { @@ -2747,8 +2764,8 @@ Voir [Plugins](/fr/tools/plugin). evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - dangerouslyAllowPrivateNetwork: true, // default trusted-network mode - // allowPrivateNetwork: true, // legacy alias + dangerouslyAllowPrivateNetwork: true, // mode trusted-network par défaut + // allowPrivateNetwork: true, // alias hérité // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -2775,20 +2792,16 @@ Voir [Plugins](/fr/tools/plugin). ``` - `evaluateEnabled: false` désactive `act:evaluate` et `wait --fn`. -- `ssrfPolicy.dangerouslyAllowPrivateNetwork` vaut par défaut `true` lorsqu’il n’est pas défini (modèle de réseau de confiance). -- Définissez `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` pour une navigation Browser stricte limitée au réseau public. -- En mode strict, les points de terminaison de profils CDP distants (`profiles.*.cdpUrl`) sont soumis au même blocage de réseau privé pendant les contrôles de disponibilité/découverte. -- `ssrfPolicy.allowPrivateNetwork` reste pris en charge comme ancien alias. +- `ssrfPolicy.dangerouslyAllowPrivateNetwork` vaut `true` par défaut lorsqu’il n’est pas défini (modèle trusted-network). +- Définissez `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` pour une navigation navigateur stricte limitée au public. +- En mode strict, les endpoints de profil CDP distants (`profiles.*.cdpUrl`) sont soumis au même blocage de réseau privé lors des vérifications d’accessibilité/découverte. +- `ssrfPolicy.allowPrivateNetwork` reste pris en charge comme alias hérité. - En mode strict, utilisez `ssrfPolicy.hostnameAllowlist` et `ssrfPolicy.allowedHostnames` pour des exceptions explicites. -- Les profils distants sont en mode attachement uniquement (start/stop/reset désactivés). +- Les profils distants sont en attachement seul (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 que OpenClaw découvre `/json/version` ; utilisez WS(S) lorsque votre fournisseur vous donne une URL WebSocket DevTools directe. -- Les profils `existing-session` sont réservés à l’hôte et utilisent Chrome MCP au lieu de CDP. +- Les profils `existing-session` sont limité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 d’un navigateur basé sur Chromium tel que Brave ou Edge. -- Les profils `existing-session` conservent les limites actuelles de la route Chrome MCP : - actions basées sur snapshot/références plutôt que ciblage par sélecteur CSS, hooks - d’upload d’un seul fichier, pas de remplacement 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 par lots. -- Les profils locaux gérés `openclaw` attribuent automatiquement `cdpPort` et ` \ No newline at end of file + de navigateur basé sur Chromium spécifique tel que Brave ou Edge. +- Les profils \ No newline at end of file diff --git a/docs/fr/plugins/sdk-overview.md b/docs/fr/plugins/sdk-overview.md index 5d1528214..41b191127 100644 --- a/docs/fr/plugins/sdk-overview.md +++ b/docs/fr/plugins/sdk-overview.md @@ -1,33 +1,33 @@ --- read_when: - - Vous avez besoin de savoir depuis quel sous-chemin du SDK importer - - Vous voulez une référence de toutes les méthodes d’enregistrement sur OpenClawPluginApi + - Vous devez savoir depuis quel sous-chemin du SDK importer + - Vous voulez une référence pour toutes les méthodes d'enregistrement sur OpenClawPluginApi - Vous recherchez une exportation spécifique du SDK sidebarTitle: SDK Overview -summary: Map des imports, référence de l’API d’enregistrement et architecture du SDK -title: Vue d’ensemble du SDK des plugins +summary: Carte des imports, référence de l'API d'enregistrement et architecture du SDK +title: Vue d'ensemble du Plugin SDK x-i18n: - generated_at: "2026-04-08T02:17:53Z" + generated_at: "2026-04-08T06:52:19Z" model: gpt-5.4 provider: openai - source_hash: c5a41bd82d165dfbb7fbd6e4528cf322e9133a51efe55fa8518a7a0a626d9d30 + source_hash: a9141dc0303c91974fe693ce48ad9f7dc4179418ae262a96011ad565aae87d21 source_path: plugins/sdk-overview.md workflow: 15 --- -# Vue d’ensemble du SDK des plugins +# Vue d'ensemble du Plugin SDK -Le SDK des plugins est le contrat typé entre les plugins et le cœur. Cette page +Le SDK de plugin est le contrat typé entre les plugins et le cœur. Cette page est la référence pour **quoi importer** et **ce que vous pouvez enregistrer**. **Vous cherchez un guide pratique ?** - - Premier plugin ? Commencez par [Premiers pas](/fr/plugins/building-plugins) - - Plugin de canal ? Consultez [Plugins de canal](/fr/plugins/sdk-channel-plugins) - - Plugin de fournisseur ? Consultez [Plugins de fournisseur](/fr/plugins/sdk-provider-plugins) + - Premier plugin ? Commencez par [Getting Started](/fr/plugins/building-plugins) + - Plugin de canal ? Voir [Channel Plugins](/fr/plugins/sdk-channel-plugins) + - Plugin de fournisseur ? Voir [Provider Plugins](/fr/plugins/sdk-provider-plugins) -## Convention d’import +## Convention d'import Importez toujours depuis un sous-chemin spécifique : @@ -36,39 +36,37 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; ``` -Chaque sous-chemin est un petit module autonome. Cela permet de conserver un démarrage rapide et -d’éviter les problèmes de dépendances circulaires. Pour les helpers d’entrée/de build spécifiques aux canaux, -préférez `openclaw/plugin-sdk/channel-core` ; gardez `openclaw/plugin-sdk/core` pour -la surface d’ensemble plus large et les helpers partagés tels que +Chaque sous-chemin est un module petit et autonome. Cela permet un démarrage +rapide et évite les problèmes de dépendances circulaires. Pour les helpers +d'entrée/de build spécifiques aux canaux, préférez `openclaw/plugin-sdk/channel-core` ; gardez `openclaw/plugin-sdk/core` pour +la surface ombrelle plus large et les helpers partagés comme `buildChannelConfigSchema`. -N’ajoutez pas et ne dépendez pas de points d’entrée de commodité nommés d’après des fournisseurs tels que +N'ajoutez pas et ne dépendez pas de points d'entrée de commodité nommés d'après des fournisseurs tels que `openclaw/plugin-sdk/slack`, `openclaw/plugin-sdk/discord`, `openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`, ni de -points d’entrée de helpers marqués canal. Les plugins inclus doivent composer des sous-chemins -génériques du SDK dans leurs propres barils `api.ts` ou `runtime-api.ts`, et le cœur -doit soit utiliser ces barils locaux au plugin, soit ajouter un contrat SDK générique et ciblé -lorsque le besoin est réellement transversal aux canaux. +points d'entrée helpers à marque de canal. Les plugins fournis doivent composer des +sous-chemins SDK génériques dans leurs propres barrels `api.ts` ou `runtime-api.ts`, et le cœur +doit soit utiliser ces barrels locaux au plugin, soit ajouter un contrat SDK générique étroit lorsque le besoin est réellement inter-canal. -La map d’exports générée contient toujours un petit ensemble de points d’entrée de helpers de plugins inclus +La carte d'export générée contient toujours un petit ensemble de points d'entrée helpers de plugins fournis tels que `plugin-sdk/feishu`, `plugin-sdk/feishu-setup`, `plugin-sdk/zalo`, `plugin-sdk/zalo-setup` et `plugin-sdk/matrix*`. Ces -sous-chemins existent uniquement pour la maintenance et la compatibilité des plugins inclus ; ils sont -volontairement omis du tableau commun ci-dessous et ne constituent pas le -chemin d’import recommandé pour les nouveaux plugins tiers. +sous-chemins existent uniquement pour la maintenance et la compatibilité des plugins fournis ; ils +sont volontairement omis du tableau commun ci-dessous et ne constituent pas le chemin d'import recommandé pour les nouveaux plugins tiers. ## Référence des sous-chemins -Les sous-chemins les plus couramment utilisés, regroupés par usage. La liste complète générée de +Les sous-chemins les plus couramment utilisés, regroupés par usage. La liste complète générée des plus de 200 sous-chemins se trouve dans `scripts/lib/plugin-sdk-entrypoints.json`. -Les sous-chemins réservés de helpers de plugins inclus apparaissent toujours dans cette liste générée. -Considérez-les comme des surfaces de détail d’implémentation/de compatibilité sauf si une page de documentation -les présente explicitement comme publiques. +Les sous-chemins helpers réservés aux plugins fournis apparaissent toujours dans cette liste générée. +Considérez-les comme des surfaces de détail d'implémentation/de compatibilité sauf si une page de documentation +en promeut explicitement un comme public. ### Entrée de plugin -| Sous-chemin | Exports clés | +| Sous-chemin | Exportations clés | | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | `plugin-sdk/plugin-entry` | `definePluginEntry` | | `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` | @@ -77,245 +75,245 @@ les présente explicitement comme publiques. - | Sous-chemin | Exports clés | + | Sous-chemin | Exportations clés | | --- | --- | | `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` | | `plugin-sdk/config-schema` | Export du schéma Zod racine `openclaw.json` (`OpenClawSchema`) | | `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, ainsi que `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` | - | `plugin-sdk/setup` | Helpers partagés d’assistant de configuration, invites d’allowlist, constructeurs d’état de configuration | + | `plugin-sdk/setup` | Helpers partagés d'assistant de configuration, invites de liste d'autorisation, constructeurs d'état de configuration | | `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | | `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` | | `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | - | `plugin-sdk/account-core` | Helpers de configuration multi-comptes / garde de portes d’action, helpers de repli sur le compte par défaut | - | `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, helpers de normalisation d’ID de compte | + | `plugin-sdk/account-core` | Helpers de config multi-comptes/contrôle d'action, helpers de repli sur le compte par défaut | + | `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, helpers de normalisation d'identifiant de compte | | `plugin-sdk/account-resolution` | Helpers de recherche de compte + repli par défaut | - | `plugin-sdk/account-helpers` | Helpers ciblés de liste d’actions / d’actions de compte | + | `plugin-sdk/account-helpers` | Helpers étroits de liste de comptes/action sur compte | | `plugin-sdk/channel-pairing` | `createChannelPairingController` | | `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` | | `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` | - | `plugin-sdk/channel-config-schema` | Types de schéma de configuration de canal | - | `plugin-sdk/telegram-command-config` | Helpers de normalisation/validation des commandes personnalisées Telegram avec repli de contrat inclus | + | `plugin-sdk/channel-config-schema` | Types du schéma de config de canal | + | `plugin-sdk/telegram-command-config` | Helpers de normalisation/validation des commandes personnalisées Telegram avec repli de contrat fourni | | `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` | | `plugin-sdk/channel-lifecycle` | `createAccountStatusSink` | - | `plugin-sdk/inbound-envelope` | Helpers partagés de routage entrant + construction d’enveloppe | - | `plugin-sdk/inbound-reply-dispatch` | Helpers partagés d’enregistrement et de distribution entrante | - | `plugin-sdk/messaging-targets` | Helpers d’analyse/correspondance de cible | + | `plugin-sdk/inbound-envelope` | Helpers partagés de route entrante + construction d'enveloppe | + | `plugin-sdk/inbound-reply-dispatch` | Helpers partagés d'enregistrement et d'envoi entrants | + | `plugin-sdk/messaging-targets` | Helpers d'analyse/correspondance des cibles | | `plugin-sdk/outbound-media` | Helpers partagés de chargement de médias sortants | - | `plugin-sdk/outbound-runtime` | Helpers d’identité sortante / délégation d’envoi | - | `plugin-sdk/thread-bindings-runtime` | Helpers d’adaptateur et de cycle de vie des liaisons de fils | - | `plugin-sdk/agent-media-payload` | Constructeur hérité de charge utile média d’agent | - | `plugin-sdk/conversation-runtime` | Helpers de conversation/liaison de fil, d’appairage et de liaisons configurées | - | `plugin-sdk/runtime-config-snapshot` | Helper d’instantané de configuration d’exécution | - | `plugin-sdk/runtime-group-policy` | Helpers de résolution de politique de groupe à l’exécution | - | `plugin-sdk/channel-status` | Helpers partagés d’instantané/résumé d’état de canal | - | `plugin-sdk/channel-config-primitives` | Primitives ciblées de schéma de configuration de canal | - | `plugin-sdk/channel-config-writes` | Helpers d’autorisation d’écriture de configuration de canal | - | `plugin-sdk/channel-plugin-common` | Exports de prélude de plugin de canal partagés | - | `plugin-sdk/allowlist-config-edit` | Helpers de lecture/édition de configuration d’allowlist | - | `plugin-sdk/group-access` | Helpers partagés de décision d’accès de groupe | - | `plugin-sdk/direct-dm` | Helpers partagés d’authentification/garde de MP directs | - | `plugin-sdk/interactive-runtime` | Helpers de normalisation/réduction de charge utile de réponse interactive | - | `plugin-sdk/channel-inbound` | Helpers de debounce entrant, de correspondance de mention, de politique de mention et d’enveloppe | + | `plugin-sdk/outbound-runtime` | Helpers de délégation d'identité/d'envoi sortants | + | `plugin-sdk/thread-bindings-runtime` | Helpers de cycle de vie et d'adaptation des liaisons de fil | + | `plugin-sdk/agent-media-payload` | Constructeur hérité de payload média d'agent | + | `plugin-sdk/conversation-runtime` | Helpers de conversation/liaison de fil, appairage et liaison configurée | + | `plugin-sdk/runtime-config-snapshot` | Helper d'instantané de config d'exécution | + | `plugin-sdk/runtime-group-policy` | Helpers de résolution de politique de groupe à l'exécution | + | `plugin-sdk/channel-status` | Helpers partagés d'instantané/résumé de statut de canal | + | `plugin-sdk/channel-config-primitives` | Primitifs étroits de schéma de config de canal | + | `plugin-sdk/channel-config-writes` | Helpers d'autorisation d'écriture de config de canal | + | `plugin-sdk/channel-plugin-common` | Exportations de prélude partagées pour plugins de canal | + | `plugin-sdk/allowlist-config-edit` | Helpers de lecture/édition de config de liste d'autorisation | + | `plugin-sdk/group-access` | Helpers partagés de décision d'accès aux groupes | + | `plugin-sdk/direct-dm` | Helpers partagés d'authentification/de garde des messages privés directs | + | `plugin-sdk/interactive-runtime` | Helpers de normalisation/réduction de payload de réponse interactive | + | `plugin-sdk/channel-inbound` | Helpers de temporisation des entrants, correspondance de mention, politique de mention et d'enveloppe | | `plugin-sdk/channel-send-result` | Types de résultat de réponse | | `plugin-sdk/channel-actions` | `createMessageToolButtonsSchema`, `createMessageToolCardSchema` | - | `plugin-sdk/channel-targets` | Helpers d’analyse/correspondance de cible | + | `plugin-sdk/channel-targets` | Helpers d'analyse/correspondance des cibles | | `plugin-sdk/channel-contract` | Types de contrat de canal | - | `plugin-sdk/channel-feedback` | Câblage de feedback/réaction | - | `plugin-sdk/channel-secret-runtime` | Helpers ciblés de contrat de secrets tels que `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, ainsi que types de cibles de secrets | + | `plugin-sdk/channel-feedback` | Câblage des retours/réactions | + | `plugin-sdk/channel-secret-runtime` | Helpers étroits de contrat de secret tels que `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, et types de cible de secret | - | Sous-chemin | Exports clés | + | Sous-chemin | Exportations clés | | --- | --- | | `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | - | `plugin-sdk/provider-setup` | Helpers soignés de configuration de fournisseurs locaux / auto-hébergés | - | `plugin-sdk/self-hosted-provider-setup` | Helpers ciblés de configuration de fournisseurs auto-hébergés compatibles OpenAI | - | `plugin-sdk/cli-backend` | Valeurs par défaut du backend CLI + constantes watchdog | - | `plugin-sdk/provider-auth-runtime` | Helpers d’exécution de résolution de clé API pour plugins de fournisseur | - | `plugin-sdk/provider-auth-api-key` | Helpers d’onboarding / d’écriture de profil de clé API tels que `upsertApiKeyProfile` | - | `plugin-sdk/provider-auth-result` | Constructeur standard de résultat d’authentification OAuth | + | `plugin-sdk/provider-setup` | Helpers de configuration sélectionnés pour fournisseurs locaux/autohébergés | + | `plugin-sdk/self-hosted-provider-setup` | Helpers ciblés de configuration de fournisseur autohébergé compatible OpenAI | + | `plugin-sdk/cli-backend` | Valeurs par défaut du backend CLI + constantes de watchdog | + | `plugin-sdk/provider-auth-runtime` | Helpers d'exécution de résolution de clé API pour plugins de fournisseur | + | `plugin-sdk/provider-auth-api-key` | Helpers d'intégration/écriture de profil de clé API tels que `upsertApiKeyProfile` | + | `plugin-sdk/provider-auth-result` | Constructeur standard de résultat d'authentification OAuth | | `plugin-sdk/provider-auth-login` | Helpers partagés de connexion interactive pour plugins de fournisseur | - | `plugin-sdk/provider-env-vars` | Helpers de recherche de variables d’environnement d’authentification de fournisseur | + | `plugin-sdk/provider-env-vars` | Helpers de recherche de variables d'environnement d'authentification fournisseur | | `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` | - | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, constructeurs partagés de politique de rejeu, helpers de point de terminaison de fournisseur et helpers de normalisation d’ID de modèle tels que `normalizeNativeXaiModelId` | + | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, constructeurs partagés de politique de relecture, helpers de point de terminaison fournisseur, et helpers de normalisation d'identifiant de modèle tels que `normalizeNativeXaiModelId` | | `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` | - | `plugin-sdk/provider-http` | Helpers génériques de capacité HTTP / point de terminaison de fournisseur | - | `plugin-sdk/provider-web-fetch-contract` | Helpers ciblés de contrat de configuration / sélection web-fetch tels que `enablePluginInConfig` et `WebFetchProviderPlugin` | - | `plugin-sdk/provider-web-fetch` | Helpers d’enregistrement / cache de fournisseur web-fetch | - | `plugin-sdk/provider-web-search-contract` | Helpers ciblés de contrat de configuration / identifiants web-search tels que `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` et setters/getters d’identifiants limités | - | `plugin-sdk/provider-web-search` | Helpers d’exécution / enregistrement / cache de fournisseur web-search | - | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, nettoyage + diagnostics de schéma Gemini et helpers de compatibilité xAI tels que `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | + | `plugin-sdk/provider-http` | Helpers génériques de capacités HTTP/point de terminaison de fournisseur | + | `plugin-sdk/provider-web-fetch-contract` | Helpers étroits de contrat de config/sélection web-fetch tels que `enablePluginInConfig` et `WebFetchProviderPlugin` | + | `plugin-sdk/provider-web-fetch` | Helpers d'enregistrement/cache de fournisseur web-fetch | + | `plugin-sdk/provider-web-search-contract` | Helpers étroits de contrat de config/d'identifiants web-search tels que `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`, et setters/getters d'identifiants à portée limitée | + | `plugin-sdk/provider-web-search` | Helpers d'enregistrement/cache/exécution de fournisseur web-search | + | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, nettoyage du schéma Gemini + diagnostics, et helpers de compatibilité xAI tels que `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | | `plugin-sdk/provider-usage` | `fetchClaudeUsage` et similaires | - | `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, types de wrappers de flux et helpers partagés de wrappers Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | - | `plugin-sdk/provider-onboard` | Helpers de patch de configuration d’onboarding | - | `plugin-sdk/global-singleton` | Helpers de singleton / map / cache locaux au processus | + | `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, types de wrappers de flux, et helpers de wrappers partagés Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | + | `plugin-sdk/provider-onboard` | Helpers de patch de config d'intégration | + | `plugin-sdk/global-singleton` | Helpers de singleton/map/cache locaux au processus | - - | Sous-chemin | Exports clés | + + | Sous-chemin | Exportations clés | | --- | --- | - | `plugin-sdk/command-auth` | `resolveControlCommandGate`, helpers de registre de commandes, helpers d’autorisation d’expéditeur | - | `plugin-sdk/approval-auth-runtime` | Helpers de résolution d’approbateur et d’authentification d’action dans le même chat | - | `plugin-sdk/approval-client-runtime` | Helpers natifs de profil / filtre d’approbation exec | - | `plugin-sdk/approval-delivery-runtime` | Adaptateurs natifs de capacité / livraison d’approbation | - | `plugin-sdk/approval-gateway-runtime` | Helper partagé de résolution de passerelle d’approbation | - | `plugin-sdk/approval-handler-adapter-runtime` | Helpers légers de chargement d’adaptateur d’approbation native pour points d’entrée de canal à chaud | - | `plugin-sdk/approval-handler-runtime` | Helpers d’exécution plus larges du gestionnaire d’approbation ; préférez les points d’entrée plus ciblés adaptateur/passerelle lorsqu’ils suffisent | - | `plugin-sdk/approval-native-runtime` | Helpers natifs de cible d’approbation + liaison de compte | - | `plugin-sdk/approval-reply-runtime` | Helpers de charge utile de réponse pour approbations exec/plugin | - | `plugin-sdk/command-auth-native` | Helpers d’authentification native de commande + cible de session native | - | `plugin-sdk/command-detection` | Helpers partagés de détection de commande | + | `plugin-sdk/command-auth` | `resolveControlCommandGate`, helpers de registre de commandes, helpers d'autorisation de l'expéditeur | + | `plugin-sdk/approval-auth-runtime` | Résolution d'approbateur et helpers d'authentification d'action dans la même discussion | + | `plugin-sdk/approval-client-runtime` | Helpers de profil/filtre d'approbation d'exécution native | + | `plugin-sdk/approval-delivery-runtime` | Adaptateurs de capacité/livraison d'approbation native | + | `plugin-sdk/approval-gateway-runtime` | Helper partagé de résolution de passerelle d'approbation | + | `plugin-sdk/approval-handler-adapter-runtime` | Helpers légers de chargement d'adaptateur d'approbation native pour points d'entrée de canaux à chaud | + | `plugin-sdk/approval-handler-runtime` | Helpers d'exécution plus larges pour gestionnaire d'approbation ; préférez les points d'entrée adaptateur/passerelle plus étroits lorsqu'ils suffisent | + | `plugin-sdk/approval-native-runtime` | Helpers de cible d'approbation native + liaison de compte | + | `plugin-sdk/approval-reply-runtime` | Helpers de payload de réponse d'approbation exec/plugin | + | `plugin-sdk/command-auth-native` | Authentification de commande native + helpers natifs de cible de session | + | `plugin-sdk/command-detection` | Helpers partagés de détection de commandes | | `plugin-sdk/command-surface` | Helpers de normalisation du corps de commande et de surface de commande | | `plugin-sdk/allow-from` | `formatAllowFromLowercase` | - | `plugin-sdk/channel-secret-runtime` | Helpers ciblés de collecte de contrat de secrets pour surfaces de secrets canal/plugin | - | `plugin-sdk/secret-ref-runtime` | Helpers ciblés `coerceSecretRef` et de typage SecretRef pour l’analyse de contrat/config de secrets | - | `plugin-sdk/security-runtime` | Helpers partagés de confiance, de contrôle d’accès MP, de contenu externe et de collecte de secrets | - | `plugin-sdk/ssrf-policy` | Helpers de politique SSRF pour allowlist d’hôtes et réseau privé | - | `plugin-sdk/ssrf-runtime` | Helpers de fetch protégé SSRF, de dispatcher épinglé et de politique SSRF | - | `plugin-sdk/secret-input` | Helpers d’analyse d’entrée de secret | - | `plugin-sdk/webhook-ingress` | Helpers de requête / cible de webhook | - | `plugin-sdk/webhook-request-guards` | Helpers de taille de corps / délai d’attente de requête | + | `plugin-sdk/channel-secret-runtime` | Helpers étroits de collecte de contrat de secret pour surfaces de secret de canal/plugin | + | `plugin-sdk/secret-ref-runtime` | Helpers étroits `coerceSecretRef` et de typage SecretRef pour l'analyse de contrat de secret/config | + | `plugin-sdk/security-runtime` | Helpers partagés de confiance, filtrage des messages privés, contenu externe et collecte de secrets | + | `plugin-sdk/ssrf-policy` | Helpers de liste d'autorisation d'hôtes et de politique SSRF de réseau privé | + | `plugin-sdk/ssrf-runtime` | Helpers de répartiteur épinglé, fetch protégé contre SSRF et politique SSRF | + | `plugin-sdk/secret-input` | Helpers d'analyse des entrées secrètes | + | `plugin-sdk/webhook-ingress` | Helpers de requête/cible webhook | + | `plugin-sdk/webhook-request-guards` | Helpers de taille de corps/délai d'attente de requête | - - | Sous-chemin | Exports clés | + + | Sous-chemin | Exportations clés | | --- | --- | - | `plugin-sdk/runtime` | Helpers larges d’exécution / journalisation / sauvegarde / installation de plugin | - | `plugin-sdk/runtime-env` | Helpers ciblés d’environnement d’exécution, logger, délai, nouvelle tentative et backoff | - | `plugin-sdk/channel-runtime-context` | Helpers génériques d’enregistrement et de recherche de contexte d’exécution de canal | + | `plugin-sdk/runtime` | Helpers larges d'exécution/journalisation/sauvegarde/installation de plugin | + | `plugin-sdk/runtime-env` | Helpers étroits d'environnement d'exécution, logger, délai d'attente, retry et backoff | + | `plugin-sdk/channel-runtime-context` | Helpers génériques d'enregistrement et de recherche de contexte d'exécution de canal | | `plugin-sdk/runtime-store` | `createPluginRuntimeStore` | - | `plugin-sdk/plugin-runtime` | Helpers partagés de commande / hook / HTTP / interaction de plugin | - | `plugin-sdk/hook-runtime` | Helpers partagés de pipeline de hook webhook/interne | - | `plugin-sdk/lazy-runtime` | Helpers de liaison/import paresseux d’exécution tels que `createLazyRuntimeModule`, `createLazyRuntimeMethod` et `createLazyRuntimeSurface` | - | `plugin-sdk/process-runtime` | Helpers d’exécution de processus | - | `plugin-sdk/cli-runtime` | Helpers CLI de formatage, d’attente et de version | - | `plugin-sdk/gateway-runtime` | Helpers de client passerelle et de patch d’état de canal | - | `plugin-sdk/config-runtime` | Helpers de chargement / écriture de configuration | - | `plugin-sdk/telegram-command-config` | Normalisation du nom/de la description de commande Telegram et vérifications de doublons/conflits, même lorsque la surface de contrat Telegram incluse n’est pas disponible | - | `plugin-sdk/approval-runtime` | Helpers d’approbation exec/plugin, constructeurs de capacité d’approbation, helpers d’authentification / profil, helpers natifs de routage / exécution | - | `plugin-sdk/reply-runtime` | Helpers partagés d’exécution de réponse/entrée, découpage, distribution, heartbeat, planificateur de réponse | - | `plugin-sdk/reply-dispatch-runtime` | Helpers ciblés de distribution / finalisation de réponse | - | `plugin-sdk/reply-history` | Helpers partagés d’historique de réponse sur courte fenêtre tels que `buildHistoryContext`, `recordPendingHistoryEntry` et `clearHistoryEntriesIfEnabled` | + | `plugin-sdk/plugin-runtime` | Helpers partagés de commande/hook/http/interaction de plugin | + | `plugin-sdk/hook-runtime` | Helpers partagés de pipeline de hooks webhook/internes | + | `plugin-sdk/lazy-runtime` | Helpers de liaison/import d'exécution paresseuse tels que `createLazyRuntimeModule`, `createLazyRuntimeMethod` et `createLazyRuntimeSurface` | + | `plugin-sdk/process-runtime` | Helpers d'exécution de processus | + | `plugin-sdk/cli-runtime` | Helpers de formatage CLI, attente et version | + | `plugin-sdk/gateway-runtime` | Helpers de client Gateway et de patch de statut de canal | + | `plugin-sdk/config-runtime` | Helpers de chargement/écriture de config | + | `plugin-sdk/telegram-command-config` | Normalisation du nom/de la description de commande Telegram et vérifications de doublons/conflits, même lorsque la surface de contrat Telegram fournie n'est pas disponible | + | `plugin-sdk/approval-runtime` | Helpers d'approbation exec/plugin, constructeurs de capacité d'approbation, helpers d'authentification/de profil, helpers natifs de routage/exécution | + | `plugin-sdk/reply-runtime` | Helpers partagés d'exécution entrante/de réponse, segmentation, envoi, heartbeat, planificateur de réponse | + | `plugin-sdk/reply-dispatch-runtime` | Helpers étroits d'envoi/finalisation de réponse | + | `plugin-sdk/reply-history` | Helpers partagés d'historique de réponse sur courte fenêtre tels que `buildHistoryContext`, `recordPendingHistoryEntry` et `clearHistoryEntriesIfEnabled` | | `plugin-sdk/reply-reference` | `createReplyReferencePlanner` | - | `plugin-sdk/reply-chunking` | Helpers ciblés de découpage texte/Markdown | - | `plugin-sdk/session-store-runtime` | Helpers de chemin de magasin de session + `updated-at` | - | `plugin-sdk/state-paths` | Helpers de chemin de répertoire d’état / OAuth | - | `plugin-sdk/routing` | Helpers de routage / clé de session / liaison de compte tels que `resolveAgentRoute`, `buildAgentSessionKey` et `resolveDefaultAgentBoundAccountId` | - | `plugin-sdk/status-helpers` | Helpers partagés de résumé d’état canal/compte, valeurs par défaut d’état d’exécution et helpers de métadonnées de problème | + | `plugin-sdk/reply-chunking` | Helpers étroits de segmentation de texte/Markdown | + | `plugin-sdk/session-store-runtime` | Helpers de chemin du magasin de session + `updated-at` | + | `plugin-sdk/state-paths` | Helpers de chemin de répertoire d'état/OAuth | + | `plugin-sdk/routing` | Helpers de route/clé de session/liaison de compte tels que `resolveAgentRoute`, `buildAgentSessionKey` et `resolveDefaultAgentBoundAccountId` | + | `plugin-sdk/status-helpers` | Helpers partagés de résumé de statut de canal/compte, valeurs par défaut d'état d'exécution et helpers de métadonnées de problème | | `plugin-sdk/target-resolver-runtime` | Helpers partagés de résolution de cible | | `plugin-sdk/string-normalization-runtime` | Helpers de normalisation de slug/chaîne | - | `plugin-sdk/request-url` | Extraire des URL chaîne à partir d’entrées de type fetch/requête | - | `plugin-sdk/run-command` | Exécuteur de commande chronométré avec résultats stdout/stderr normalisés | - | `plugin-sdk/param-readers` | Lecteurs de paramètres communs d’outil/CLI | - | `plugin-sdk/tool-send` | Extraire les champs de cible d’envoi canonique des arguments d’outil | + | `plugin-sdk/request-url` | Extraire des URL de chaîne à partir d'entrées de type fetch/request | + | `plugin-sdk/run-command` | Exécuteur de commandes temporisé avec résultats stdout/stderr normalisés | + | `plugin-sdk/param-readers` | Lecteurs communs de paramètres d'outil/CLI | + | `plugin-sdk/tool-send` | Extraire les champs cibles d'envoi canoniques des arguments d'outil | | `plugin-sdk/temp-path` | Helpers partagés de chemin de téléchargement temporaire | | `plugin-sdk/logging-core` | Helpers de logger de sous-système et de masquage | - | `plugin-sdk/markdown-table-runtime` | Helpers de mode tableau Markdown | - | `plugin-sdk/json-store` | Petits helpers de lecture/écriture d’état JSON | - | `plugin-sdk/file-lock` | Helpers de verrou de fichier réentrant | - | `plugin-sdk/persistent-dedupe` | Helpers de cache de déduplication sauvegardé sur disque | - | `plugin-sdk/acp-runtime` | Helpers d’exécution/session ACP et de distribution de réponse | - | `plugin-sdk/agent-config-primitives` | Primitives ciblées de schéma de configuration d’exécution d’agent | - | `plugin-sdk/boolean-param` | Lecteur permissif de paramètre booléen | + | `plugin-sdk/markdown-table-runtime` | Helpers de mode de tableau Markdown | + | `plugin-sdk/json-store` | Petits helpers de lecture/écriture d'état JSON | + | `plugin-sdk/file-lock` | Helpers de verrouillage de fichier réentrant | + | `plugin-sdk/persistent-dedupe` | Helpers de cache de déduplication persisté sur disque | + | `plugin-sdk/acp-runtime` | Helpers ACP d'exécution/session et d'envoi de réponse | + | `plugin-sdk/agent-config-primitives` | Primitifs étroits de schéma de config d'exécution d'agent | + | `plugin-sdk/boolean-param` | Lecteur tolérant de paramètre booléen | | `plugin-sdk/dangerous-name-runtime` | Helpers de résolution de correspondance de noms dangereux | - | `plugin-sdk/device-bootstrap` | Helpers de bootstrap d’appareil et de jeton d’appairage | - | `plugin-sdk/extension-shared` | Primitives partagées de canal passif, d’état et de proxy ambiant | - | `plugin-sdk/models-provider-runtime` | Helpers de réponse de fournisseur / commande `/models` | - | `plugin-sdk/skill-commands-runtime` | Helpers de liste de commandes de Skills | - | `plugin-sdk/native-command-registry` | Helpers de registre/construction/sérialisation de commandes natives | + | `plugin-sdk/device-bootstrap` | Helpers de bootstrap d'appareil et de jeton d'appairage | + | `plugin-sdk/extension-shared` | Primitifs helpers partagés pour canal passif, statut et proxy ambiant | + | `plugin-sdk/models-provider-runtime` | Helpers de réponse de commande `/models`/fournisseur | + | `plugin-sdk/skill-commands-runtime` | Helpers de liste de commandes Skills | + | `plugin-sdk/native-command-registry` | Helpers natifs de registre/construction/sérialisation de commandes | | `plugin-sdk/provider-zai-endpoint` | Helpers de détection de point de terminaison Z.AI | - | `plugin-sdk/infra-runtime` | Helpers d’événement système / heartbeat | + | `plugin-sdk/infra-runtime` | Helpers d'événement système/heartbeat | | `plugin-sdk/collection-runtime` | Petits helpers de cache borné | - | `plugin-sdk/diagnostic-runtime` | Helpers de drapeau et d’événement de diagnostic | - | `plugin-sdk/error-runtime` | Helpers de graphe d’erreur, de formatage, de classification partagée d’erreur, `isApprovalNotFoundError` | + | `plugin-sdk/diagnostic-runtime` | Helpers de drapeau et d'événement de diagnostic | + | `plugin-sdk/error-runtime` | Helpers de graphe d'erreurs, formatage, classification d'erreurs partagée, `isApprovalNotFoundError` | | `plugin-sdk/fetch-runtime` | Helpers de fetch encapsulé, proxy et recherche épinglée | - | `plugin-sdk/host-runtime` | Helpers de normalisation de nom d’hôte et d’hôte SCP | - | `plugin-sdk/retry-runtime` | Helpers de configuration et d’exécuteur de nouvelle tentative | - | `plugin-sdk/agent-runtime` | Helpers de répertoire / identité / espace de travail d’agent | - | `plugin-sdk/directory-runtime` | Requête/déduplication de répertoire appuyée sur la configuration | + | `plugin-sdk/host-runtime` | Helpers de normalisation de nom d'hôte et d'hôte SCP | + | `plugin-sdk/retry-runtime` | Helpers de configuration et d'exécuteur de retry | + | `plugin-sdk/agent-runtime` | Helpers de répertoire/identité/espace de travail d'agent | + | `plugin-sdk/directory-runtime` | Requête/déduplication de répertoire adossée à la config | | `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` | - | Sous-chemin | Exports clés | + | Sous-chemin | Exportations clés | | --- | --- | - | `plugin-sdk/media-runtime` | Helpers partagés de récupération / transformation / stockage de médias ainsi que constructeurs de charge utile média | - | `plugin-sdk/media-generation-runtime` | Helpers partagés de repli de génération de média, sélection de candidats et messages de modèle manquant | - | `plugin-sdk/media-understanding` | Types de fournisseur de compréhension média ainsi qu’exports de helpers d’image/audio orientés fournisseur | - | `plugin-sdk/text-runtime` | Helpers partagés de texte/Markdown/journalisation tels que suppression de texte visible par l’assistant, helpers de rendu/découpage/tableau Markdown, helpers de masquage, helpers de balise de directive et utilitaires de texte sûr | - | `plugin-sdk/text-chunking` | Helper de découpage de texte sortant | - | `plugin-sdk/speech` | Types de fournisseur de parole ainsi que helpers de directive, de registre et de validation orientés fournisseur | - | `plugin-sdk/speech-core` | Types partagés de fournisseur de parole, helpers de registre, de directive et de normalisation | - | `plugin-sdk/realtime-transcription` | Types de fournisseur de transcription temps réel et helpers de registre | - | `plugin-sdk/realtime-voice` | Types de fournisseur de voix temps réel et helpers de registre | - | `plugin-sdk/image-generation` | Types de fournisseur de génération d’image | - | `plugin-sdk/image-generation-core` | Types partagés de génération d’image, helpers de repli, d’authentification et de registre | - | `plugin-sdk/music-generation` | Types de fournisseur / requête / résultat de génération musicale | - | `plugin-sdk/music-generation-core` | Types partagés de génération musicale, helpers de repli, recherche de fournisseur et analyse de model-ref | - | `plugin-sdk/video-generation` | Types de fournisseur / requête / résultat de génération vidéo | - | `plugin-sdk/video-generation-core` | Types partagés de génération vidéo, helpers de repli, recherche de fournisseur et analyse de model-ref | - | `plugin-sdk/webhook-targets` | Registre de cibles webhook et helpers d’installation de route | - | `plugin-sdk/webhook-path` | Helpers de normalisation de chemin de webhook | + | `plugin-sdk/media-runtime` | Helpers partagés de récupération/transformation/stockage de médias ainsi que constructeurs de payload média | + | `plugin-sdk/media-generation-runtime` | Helpers partagés de bascule de génération de médias, sélection de candidats et messages de modèle manquant | + | `plugin-sdk/media-understanding` | Types de fournisseur de compréhension média ainsi qu'exportations d'helpers d'image/audio côté fournisseur | + | `plugin-sdk/text-runtime` | Helpers partagés de texte/Markdown/journalisation tels que suppression de texte visible par l'assistant, helpers de rendu/segmentation/tableau Markdown, helpers de masquage, helpers de balise de directive et utilitaires de texte sûr | + | `plugin-sdk/text-chunking` | Helper de segmentation de texte sortant | + | `plugin-sdk/speech` | Types de fournisseur vocal ainsi qu'helpers côté fournisseur pour directives, registre et validation | + | `plugin-sdk/speech-core` | Types partagés de fournisseur vocal, helpers de registre, de directive et de normalisation | + | `plugin-sdk/realtime-transcription` | Types de fournisseur de transcription en temps réel et helpers de registre | + | `plugin-sdk/realtime-voice` | Types de fournisseur vocal en temps réel et helpers de registre | + | `plugin-sdk/image-generation` | Types de fournisseur de génération d'image | + | `plugin-sdk/image-generation-core` | Types partagés de génération d'image, helpers de bascule, d'authentification et de registre | + | `plugin-sdk/music-generation` | Types de fournisseur/requête/résultat de génération musicale | + | `plugin-sdk/music-generation-core` | Types partagés de génération musicale, helpers de bascule, recherche de fournisseur et analyse de référence de modèle | + | `plugin-sdk/video-generation` | Types de fournisseur/requête/résultat de génération vidéo | + | `plugin-sdk/video-generation-core` | Types partagés de génération vidéo, helpers de bascule, recherche de fournisseur et analyse de référence de modèle | + | `plugin-sdk/webhook-targets` | Helpers de registre de cibles webhook et d'installation de route | + | `plugin-sdk/webhook-path` | Helpers de normalisation de chemin webhook | | `plugin-sdk/web-media` | Helpers partagés de chargement de médias distants/locaux | - | `plugin-sdk/zod` | `zod` réexporté pour les consommateurs du SDK de plugin | + | `plugin-sdk/zod` | `zod` réexporté pour les consommateurs du Plugin SDK | | `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` | - | Sous-chemin | Exports clés | + | Sous-chemin | Exportations clés | | --- | --- | - | `plugin-sdk/memory-core` | Surface de helpers memory-core incluse pour les helpers de gestionnaire/config/fichier/CLI | - | `plugin-sdk/memory-core-engine-runtime` | Façade d’exécution d’indexation/recherche mémoire | - | `plugin-sdk/memory-core-host-engine-foundation` | Exports de moteur de fondation hôte mémoire | - | `plugin-sdk/memory-core-host-engine-embeddings` | Exports de moteur d’embeddings hôte mémoire | - | `plugin-sdk/memory-core-host-engine-qmd` | Exports de moteur QMD hôte mémoire | - | `plugin-sdk/memory-core-host-engine-storage` | Exports de moteur de stockage hôte mémoire | - | `plugin-sdk/memory-core-host-multimodal` | Helpers multimodaux d’hôte mémoire | - | `plugin-sdk/memory-core-host-query` | Helpers de requête d’hôte mémoire | - | `plugin-sdk/memory-core-host-secret` | Helpers de secret d’hôte mémoire | - | `plugin-sdk/memory-core-host-events` | Helpers de journal d’événements d’hôte mémoire | - | `plugin-sdk/memory-core-host-status` | Helpers d’état d’hôte mémoire | - | `plugin-sdk/memory-core-host-runtime-cli` | Helpers d’exécution CLI d’hôte mémoire | - | `plugin-sdk/memory-core-host-runtime-core` | Helpers d’exécution cœur d’hôte mémoire | - | `plugin-sdk/memory-core-host-runtime-files` | Helpers de fichiers/exécution d’hôte mémoire | - | `plugin-sdk/memory-host-core` | Alias neutre vis-à-vis du fournisseur pour les helpers d’exécution cœur d’hôte mémoire | - | `plugin-sdk/memory-host-events` | Alias neutre vis-à-vis du fournisseur pour les helpers de journal d’événements d’hôte mémoire | - | `plugin-sdk/memory-host-files` | Alias neutre vis-à-vis du fournisseur pour les helpers de fichiers/exécution d’hôte mémoire | - | `plugin-sdk/memory-host-markdown` | Helpers partagés de Markdown géré pour plugins adjacents à la mémoire | - | `plugin-sdk/memory-host-search` | Façade d’exécution mémoire active pour l’accès au gestionnaire de recherche | - | `plugin-sdk/memory-host-status` | Alias neutre vis-à-vis du fournisseur pour les helpers d’état d’hôte mémoire | - | `plugin-sdk/memory-lancedb` | Surface de helpers memory-lancedb incluse | + | `plugin-sdk/memory-core` | Surface helper `memory-core` fournie pour gestionnaire/config/fichier/helpers CLI | + | `plugin-sdk/memory-core-engine-runtime` | Façade d'exécution d'index/recherche mémoire | + | `plugin-sdk/memory-core-host-engine-foundation` | Exportations du moteur fondation d'hôte mémoire | + | `plugin-sdk/memory-core-host-engine-embeddings` | Exportations du moteur d'embeddings d'hôte mémoire | + | `plugin-sdk/memory-core-host-engine-qmd` | Exportations du moteur QMD d'hôte mémoire | + | `plugin-sdk/memory-core-host-engine-storage` | Exportations du moteur de stockage d'hôte mémoire | + | `plugin-sdk/memory-core-host-multimodal` | Helpers multimodaux d'hôte mémoire | + | `plugin-sdk/memory-core-host-query` | Helpers de requête d'hôte mémoire | + | `plugin-sdk/memory-core-host-secret` | Helpers de secret d'hôte mémoire | + | `plugin-sdk/memory-core-host-events` | Helpers de journal d'événements d'hôte mémoire | + | `plugin-sdk/memory-core-host-status` | Helpers de statut d'hôte mémoire | + | `plugin-sdk/memory-core-host-runtime-cli` | Helpers d'exécution CLI d'hôte mémoire | + | `plugin-sdk/memory-core-host-runtime-core` | Helpers d'exécution cœur d'hôte mémoire | + | `plugin-sdk/memory-core-host-runtime-files` | Helpers de fichier/exécution d'hôte mémoire | + | `plugin-sdk/memory-host-core` | Alias neutre vis-à-vis du fournisseur pour les helpers d'exécution cœur d'hôte mémoire | + | `plugin-sdk/memory-host-events` | Alias neutre vis-à-vis du fournisseur pour les helpers de journal d'événements d'hôte mémoire | + | `plugin-sdk/memory-host-files` | Alias neutre vis-à-vis du fournisseur pour les helpers de fichier/exécution d'hôte mémoire | + | `plugin-sdk/memory-host-markdown` | Helpers partagés de Markdown géré pour plugins proches de la mémoire | + | `plugin-sdk/memory-host-search` | Façade d'exécution de mémoire active pour accès au gestionnaire de recherche | + | `plugin-sdk/memory-host-status` | Alias neutre vis-à-vis du fournisseur pour les helpers de statut d'hôte mémoire | + | `plugin-sdk/memory-lancedb` | Surface helper `memory-lancedb` fournie | - - | Famille | Sous-chemins actuels | Usage prévu | + + | Famille | Sous-chemins actuels | Utilisation prévue | | --- | --- | --- | - | Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Helpers de prise en charge du plugin Browser inclus (`browser-support` reste le baril de compatibilité) | - | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Surface d’exécution/helper Matrix incluse | - | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Surface d’exécution/helper LINE incluse | - | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Surface de helper IRC incluse | - | Helpers spécifiques à un canal | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Points d’entrée de compatibilité/helper de canaux inclus | - | Helpers spécifiques à l’authentification/au plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Points d’entrée de helpers de fonctionnalité/plugin inclus ; `plugin-sdk/github-copilot-token` exporte actuellement `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` et `resolveCopilotApiToken` | + | Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Helpers de prise en charge du plugin Browser fourni (`browser-support` reste le barrel de compatibilité) | + | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Surface helper/exécution Matrix fournie | + | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Surface helper/exécution LINE fournie | + | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Surface helper IRC fournie | + | Helpers spécifiques à un canal | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Points d'entrée de compatibilité/helper de canaux fournis | + | Helpers spécifiques à l'authentification/au plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Points d'entrée helpers de fonctionnalité/plugin fournis ; `plugin-sdk/github-copilot-token` exporte actuellement `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` et `resolveCopilotApiToken` | -## API d’enregistrement +## API d'enregistrement Le callback `register(api)` reçoit un objet `OpenClawPluginApi` avec ces méthodes : -### Enregistrement de capacités +### Enregistrement de capacité -| Méthode | Ce qu’elle enregistre | +| Méthode | Ce qu'elle enregistre | | ------------------------------------------------ | -------------------------------- | | `api.registerProvider(...)` | Inférence de texte (LLM) | -| `api.registerCliBackend(...)` | Backend d’inférence CLI local | +| `api.registerCliBackend(...)` | Backend CLI local d'inférence | | `api.registerChannel(...)` | Canal de messagerie | -| `api.registerSpeechProvider(...)` | Synthèse texte-vers-parole / STT | +| `api.registerSpeechProvider(...)` | Synthèse text-to-speech / STT | | `api.registerRealtimeTranscriptionProvider(...)` | Transcription temps réel en flux | -| `api.registerRealtimeVoiceProvider(...)` | Sessions vocales temps réel duplex | -| `api.registerMediaUnderstandingProvider(...)` | Analyse d’image/audio/vidéo | -| `api.registerImageGenerationProvider(...)` | Génération d’image | +| `api.registerRealtimeVoiceProvider(...)` | Sessions vocales duplex en temps réel | +| `api.registerMediaUnderstandingProvider(...)` | Analyse d'image/audio/vidéo | +| `api.registerImageGenerationProvider(...)` | Génération d'image | | `api.registerMusicGenerationProvider(...)` | Génération musicale | | `api.registerVideoGenerationProvider(...)` | Génération vidéo | | `api.registerWebFetchProvider(...)` | Fournisseur de récupération / scraping web | @@ -323,39 +321,39 @@ méthodes : ### Outils et commandes -| Méthode | Ce qu’elle enregistre | -| ------------------------------ | -------------------------------------------- | -| `api.registerTool(tool, opts?)` | Outil d’agent (obligatoire ou `{ optional: true }`) | -| `api.registerCommand(def)` | Commande personnalisée (contourne le LLM) | +| Méthode | Ce qu'elle enregistre | +| ------------------------------- | --------------------------------------------- | +| `api.registerTool(tool, opts?)` | Outil d'agent (obligatoire ou `{ optional: true }`) | +| `api.registerCommand(def)` | Commande personnalisée (contourne le LLM) | ### Infrastructure -| Méthode | Ce qu’elle enregistre | -| --------------------------------------------- | ------------------------------------ | -| `api.registerHook(events, handler, opts?)` | Hook d’événement | -| `api.registerHttpRoute(params)` | Point de terminaison HTTP de passerelle | -| `api.registerGatewayMethod(name, handler)` | Méthode RPC de passerelle | -| `api.registerCli(registrar, opts?)` | Sous-commande CLI | -| `api.registerService(service)` | Service d’arrière-plan | -| `api.registerInteractiveHandler(registration)`| Gestionnaire interactif | -| `api.registerMemoryPromptSupplement(builder)` | Section additive de prompt adjacente à la mémoire | -| `api.registerMemoryCorpusSupplement(adapter)` | Corpus additif de recherche/lecture mémoire | +| Méthode | Ce qu'elle enregistre | +| ---------------------------------------------- | ------------------------------------- | +| `api.registerHook(events, handler, opts?)` | Hook d'événement | +| `api.registerHttpRoute(params)` | Point de terminaison HTTP Gateway | +| `api.registerGatewayMethod(name, handler)` | Méthode RPC Gateway | +| `api.registerCli(registrar, opts?)` | Sous-commande CLI | +| `api.registerService(service)` | Service en arrière-plan | +| `api.registerInteractiveHandler(registration)` | Gestionnaire interactif | +| `api.registerMemoryPromptSupplement(builder)` | Section de prompt additive adjacente à la mémoire | +| `api.registerMemoryCorpusSupplement(adapter)` | Corpus additif de recherche/lecture mémoire | -Les espaces de noms d’administration du cœur réservés (`config.*`, `exec.approvals.*`, `wizard.*`, -`update.*`) restent toujours `operator.admin`, même si un plugin essaie d’assigner une -portée de méthode de passerelle plus étroite. Préférez des préfixes spécifiques au plugin pour -les méthodes possédées par le plugin. +Les espaces de noms d'administration du cœur réservés (`config.*`, `exec.approvals.*`, `wizard.*`, +`update.*`) restent toujours `operator.admin`, même si un plugin tente d'attribuer une +portée de méthode Gateway plus étroite. Préférez des préfixes spécifiques au plugin pour +les méthodes appartenant au plugin. -### Métadonnées d’enregistrement CLI +### Métadonnées d'enregistrement CLI `api.registerCli(registrar, opts?)` accepte deux types de métadonnées de premier niveau : -- `commands` : racines de commande explicites possédées par le registrar -- `descriptors` : descripteurs de commande au moment de l’analyse, utilisés pour l’aide CLI racine, - le routage et l’enregistrement paresseux de CLI de plugin +- `commands` : racines de commandes explicites appartenant au registrar +- `descriptors` : descripteurs de commande à l'analyse utilisés pour l'aide de la CLI racine, + le routage et l'enregistrement paresseux de la CLI de plugin -Si vous voulez qu’une commande de plugin reste chargée paresseusement dans le chemin CLI racine normal, -fournissez des `descriptors` couvrant chaque racine de commande de premier niveau exposée par ce +Si vous voulez qu'une commande de plugin reste chargée paresseusement dans le chemin CLI racine normal, +fournissez des `descriptors` qui couvrent chaque racine de commande de premier niveau exposée par ce registrar. ```typescript @@ -368,7 +366,7 @@ api.registerCli( descriptors: [ { name: "matrix", - description: "Gérer les comptes Matrix, la vérification, les appareils et l’état du profil", + description: "Gérer les comptes Matrix, la vérification, les appareils et l'état du profil", hasSubcommands: true, }, ], @@ -376,135 +374,133 @@ api.registerCli( ); ``` -Utilisez `commands` seul uniquement lorsque vous n’avez pas besoin d’un enregistrement CLI racine paresseux. -Ce chemin de compatibilité eager reste pris en charge, mais il n’installe pas -d’espaces réservés adossés à des descripteurs pour le chargement paresseux au moment de l’analyse. +Utilisez `commands` seul uniquement lorsque vous n'avez pas besoin de l'enregistrement paresseux de la CLI racine. +Ce chemin de compatibilité eager reste pris en charge, mais il n'installe pas +d'espaces réservés adossés à des descripteurs pour le chargement paresseux à l'analyse. ### Enregistrement de backend CLI -`api.registerCliBackend(...)` permet à un plugin de posséder la configuration par défaut d’un +`api.registerCliBackend(...)` permet à un plugin de posséder la config par défaut d'un backend CLI IA local tel que `codex-cli`. -- Le backend `id` devient le préfixe de fournisseur dans des références de modèle comme `codex-cli/gpt-5`. -- Le backend `config` utilise la même forme que `agents.defaults.cliBackends.`. -- La configuration utilisateur garde la priorité. OpenClaw fusionne `agents.defaults.cliBackends.` sur la - valeur par défaut du plugin avant d’exécuter la CLI. -- Utilisez `normalizeConfig` lorsqu’un backend a besoin de réécritures de compatibilité après la fusion - (par exemple pour normaliser d’anciennes formes de drapeaux). +- Le `id` du backend devient le préfixe du fournisseur dans des références de modèle comme `codex-cli/gpt-5`. +- La `config` du backend utilise la même forme que `agents.defaults.cliBackends.`. +- La config utilisateur a toujours priorité. OpenClaw fusionne `agents.defaults.cliBackends.` par-dessus la + valeur par défaut du plugin avant d'exécuter la CLI. +- Utilisez `normalizeConfig` lorsqu'un backend a besoin de réécritures de compatibilité après fusion + (par exemple pour normaliser d'anciennes formes de drapeaux). ### Emplacements exclusifs -| Méthode | Ce qu’elle enregistre | -| ----------------------------------------- | ----------------------------------- | -| `api.registerContextEngine(id, factory)` | Moteur de contexte (un seul actif à la fois) | -| `api.registerMemoryCapability(capability)` | Capacité mémoire unifiée | -| `api.registerMemoryPromptSection(builder)` | Constructeur de section de prompt mémoire | -| `api.registerMemoryFlushPlan(resolver)` | Résolveur de plan de vidage mémoire | -| `api.registerMemoryRuntime(runtime)` | Adaptateur d’exécution mémoire | +| Méthode | Ce qu'elle enregistre | +| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `api.registerContextEngine(id, factory)` | Moteur de contexte (un seul actif à la fois). Le callback `assemble()` reçoit `availableTools` et `citationsMode` afin que le moteur puisse adapter les ajouts au prompt. | +| `api.registerMemoryCapability(capability)` | Capacité mémoire unifiée | +| `api.registerMemoryPromptSection(builder)` | Constructeur de section de prompt mémoire | +| `api.registerMemoryFlushPlan(resolver)` | Résolveur de plan de vidage mémoire | +| `api.registerMemoryRuntime(runtime)` | Adaptateur d'exécution mémoire | -### Adaptateurs d’embeddings mémoire +### Adaptateurs d'embedding mémoire -| Méthode | Ce qu’elle enregistre | -| --------------------------------------------- | --------------------------------------------------- | -| `api.registerMemoryEmbeddingProvider(adapter)` | Adaptateur d’embeddings mémoire pour le plugin actif | +| Méthode | Ce qu'elle enregistre | +| ---------------------------------------------- | --------------------------------------------- | +| `api.registerMemoryEmbeddingProvider(adapter)` | Adaptateur d'embedding mémoire pour le plugin actif | -- `registerMemoryCapability` est l’API préférée de plugin mémoire exclusif. -- `registerMemoryCapability` peut également exposer `publicArtifacts.listArtifacts(...)` +- `registerMemoryCapability` est l'API exclusive privilégiée pour les plugins mémoire. +- `registerMemoryCapability` peut aussi exposer `publicArtifacts.listArtifacts(...)` afin que des plugins compagnons puissent consommer des artefacts mémoire exportés via - `openclaw/plugin-sdk/memory-host-core` au lieu d’atteindre l’agencement privé - d’un plugin mémoire spécifique. + `openclaw/plugin-sdk/memory-host-core` au lieu d'accéder à la disposition privée d'un + plugin mémoire spécifique. - `registerMemoryPromptSection`, `registerMemoryFlushPlan` et - `registerMemoryRuntime` sont des API héritées compatibles de plugin mémoire exclusif. -- `registerMemoryEmbeddingProvider` permet au plugin mémoire actif d’enregistrer un - ou plusieurs identifiants d’adaptateur d’embeddings (par exemple `openai`, `gemini` ou un identifiant - personnalisé défini par le plugin). -- La configuration utilisateur telle que `agents.defaults.memorySearch.provider` et - `agents.defaults.memorySearch.fallback` se résout par rapport à ces identifiants - d’adaptateur enregistrés. + `registerMemoryRuntime` sont des API exclusives de plugin mémoire compatibles avec l'héritage. +- `registerMemoryEmbeddingProvider` permet au plugin mémoire actif d'enregistrer un + ou plusieurs identifiants d'adaptateur d'embedding (par exemple `openai`, `gemini` ou un identifiant personnalisé défini par plugin). +- La config utilisateur telle que `agents.defaults.memorySearch.provider` et + `agents.defaults.memorySearch.fallback` se résout à partir de ces identifiants d'adaptateur enregistrés. ### Événements et cycle de vie -| Méthode | Ce qu’elle fait | -| ------------------------------------------- | ---------------------------- | -| `api.on(hookName, handler, opts?)` | Hook de cycle de vie typé | -| `api.onConversationBindingResolved(handler)`| Callback de liaison de conversation | +| Méthode | Ce qu'elle fait | +| -------------------------------------------- | ---------------------------- | +| `api.on(hookName, handler, opts?)` | Hook de cycle de vie typé | +| `api.onConversationBindingResolved(handler)` | Callback de liaison de conversation | -### Sémantique des décisions de hook +### Sémantique de décision des hooks -- `before_tool_call` : renvoyer `{ block: true }` est terminal. Dès qu’un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. -- `before_tool_call` : renvoyer `{ block: false }` est traité comme aucune décision (comme si `block` était omis), pas comme une substitution. -- `before_install` : renvoyer `{ block: true }` est terminal. Dès qu’un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. -- `before_install` : renvoyer `{ block: false }` est traité comme aucune décision (comme si `block` était omis), pas comme une substitution. -- `reply_dispatch` : renvoyer `{ handled: true, ... }` est terminal. Dès qu’un gestionnaire revendique la distribution, les gestionnaires de priorité inférieure et le chemin de distribution du modèle par défaut sont ignorés. -- `message_sending` : renvoyer `{ cancel: true }` est terminal. Dès qu’un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. -- `message_sending` : renvoyer `{ cancel: false }` est traité comme aucune décision (comme si `cancel` était omis), pas comme une substitution. +- `before_tool_call` : renvoyer `{ block: true }` est terminal. Dès qu'un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. +- `before_tool_call` : renvoyer `{ block: false }` est traité comme aucune décision (comme si `block` était omis), et non comme une surcharge. +- `before_install` : renvoyer `{ block: true }` est terminal. Dès qu'un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. +- `before_install` : renvoyer `{ block: false }` est traité comme aucune décision (comme si `block` était omis), et non comme une surcharge. +- `reply_dispatch` : renvoyer `{ handled: true, ... }` est terminal. Dès qu'un gestionnaire revendique l'envoi, les gestionnaires de priorité inférieure et le chemin d'envoi du modèle par défaut sont ignorés. +- `message_sending` : renvoyer `{ cancel: true }` est terminal. Dès qu'un gestionnaire le définit, les gestionnaires de priorité inférieure sont ignorés. +- `message_sending` : renvoyer `{ cancel: false }` est traité comme aucune décision (comme si `cancel` était omis), et non comme une surcharge. -### Champs de l’objet API +### Champs de l'objet API | Champ | Type | Description | | ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- | -| `api.id` | `string` | ID du plugin | -| `api.name` | `string` | Nom d’affichage | -| `api.version` | `string?` | Version du plugin (facultative) | -| `api.description` | `string?` | Description du plugin (facultative) | +| `api.id` | `string` | Identifiant du plugin | +| `api.name` | `string` | Nom d'affichage | +| `api.version` | `string?` | Version du plugin (facultatif) | +| `api.description` | `string?` | Description du plugin (facultatif) | | `api.source` | `string` | Chemin source du plugin | | `api.rootDir` | `string?` | Répertoire racine du plugin (facultatif) | -| `api.config` | `OpenClawConfig` | Instantané actuel de configuration (instantané actif en mémoire à l’exécution lorsqu’il est disponible) | -| `api.pluginConfig` | `Record` | Configuration spécifique au plugin depuis `plugins.entries..config` | -| `api.runtime` | `PluginRuntime` | [Helpers d’exécution](/fr/plugins/sdk-runtime) | -| `api.logger` | `PluginLogger` | Logger limité (`debug`, `info`, `warn`, `error`) | -| `api.registrationMode` | `PluginRegistrationMode` | Mode de chargement actuel ; `"setup-runtime"` est la fenêtre légère de démarrage/configuration avant l’entrée complète | +| `api.config` | `OpenClawConfig` | Instantané de config actuel (instantané d'exécution en mémoire actif lorsqu'il est disponible) | +| `api.pluginConfig` | `Record` | Config spécifique au plugin provenant de `plugins.entries..config` | +| `api.runtime` | `PluginRuntime` | [Helpers d'exécution](/fr/plugins/sdk-runtime) | +| `api.logger` | `PluginLogger` | Logger à portée limitée (`debug`, `info`, `warn`, `error`) | +| `api.registrationMode` | `PluginRegistrationMode` | Mode de chargement actuel ; `"setup-runtime"` est la fenêtre légère de démarrage/configuration avant l'entrée complète | | `api.resolvePath(input)` | `(string) => string` | Résoudre un chemin relatif à la racine du plugin | ## Convention de module interne -À l’intérieur de votre plugin, utilisez des fichiers barils locaux pour les imports internes : +Dans votre plugin, utilisez des fichiers barrel locaux pour les imports internes : ``` my-plugin/ - api.ts # Exports publics pour les consommateurs externes - runtime-api.ts # Exports d’exécution internes uniquement - index.ts # Point d’entrée du plugin - setup-entry.ts # Entrée légère de configuration uniquement (facultative) + api.ts # Exportations publiques pour les consommateurs externes + runtime-api.ts # Exportations d'exécution internes uniquement + index.ts # Point d'entrée du plugin + setup-entry.ts # Entrée légère réservée à la configuration (facultative) ``` - N’importez jamais votre propre plugin via `openclaw/plugin-sdk/` - dans le code de production. Faites passer les imports internes par `./api.ts` ou - `./runtime-api.ts`. Le chemin SDK est uniquement le contrat externe. + N'importez jamais votre propre plugin via `openclaw/plugin-sdk/` + depuis le code de production. Faites passer les imports internes par `./api.ts` ou + `./runtime-api.ts`. Le chemin SDK n'est que le contrat externe. -Les surfaces publiques de plugins inclus chargées via façade (`api.ts`, `runtime-api.ts`, -`index.ts`, `setup-entry.ts` et fichiers d’entrée publics similaires) préfèrent désormais -l’instantané actif de configuration d’exécution lorsqu’OpenClaw fonctionne déjà. Si aucun instantané -d’exécution n’existe encore, elles se rabattent sur le fichier de configuration résolu sur disque. +Les surfaces publiques de plugin fourni chargées via façade (`api.ts`, `runtime-api.ts`, +`index.ts`, `setup-entry.ts` et fichiers d'entrée publics similaires) préfèrent désormais l'instantané +de config d'exécution actif lorsque OpenClaw est déjà en cours d'exécution. Si aucun instantané +d'exécution n'existe encore, elles reviennent à la config résolue sur le disque. -Les plugins de fournisseur peuvent également exposer un baril de contrat local au plugin et ciblé lorsqu’un -helper est intentionnellement spécifique au fournisseur et n’a pas encore sa place dans un sous-chemin SDK -générique. Exemple inclus actuel : le fournisseur Anthropic conserve ses -helpers de flux Claude dans son propre point d’entrée public `api.ts` / `contract-api.ts` au lieu de -promouvoir la logique d’en-tête bêta Anthropic et `service_tier` dans un contrat +Les plugins de fournisseur peuvent également exposer un barrel de contrat local au plugin et étroit lorsqu'un +helper est volontairement spécifique au fournisseur et n'a pas encore sa place dans un sous-chemin SDK générique. +Exemple fourni actuel : le fournisseur Anthropic conserve ses helpers de flux Claude +dans son propre point d'entrée public `api.ts` / `contract-api.ts` au lieu +de promouvoir la logique d'en-tête bêta Anthropic et `service_tier` dans un contrat générique `plugin-sdk/*`. -Autres exemples inclus actuels : +Autres exemples fournis actuels : - `@openclaw/openai-provider` : `api.ts` exporte des constructeurs de fournisseur, des helpers de modèle par défaut et des constructeurs de fournisseur temps réel - `@openclaw/openrouter-provider` : `api.ts` exporte le constructeur de fournisseur ainsi que - des helpers d’onboarding/configuration + des helpers d'intégration/de config - Le code de production d’extension doit également éviter les imports `openclaw/plugin-sdk/`. - Si un helper est réellement partagé, faites-le remonter vers un sous-chemin SDK neutre + Le code de production des extensions doit également éviter les imports `openclaw/plugin-sdk/`. + Si un helper est réellement partagé, faites-le évoluer vers un sous-chemin SDK neutre tel que `openclaw/plugin-sdk/speech`, `.../provider-model-shared` ou une autre - surface orientée capacité au lieu de coupler deux plugins ensemble. + surface orientée capacité au lieu de coupler deux plugins entre eux. -## Associé +## Liens connexes -- [Points d’entrée](/fr/plugins/sdk-entrypoints) — options `definePluginEntry` et `defineChannelPluginEntry` -- [Helpers d’exécution](/fr/plugins/sdk-runtime) — référence complète de l’espace de noms `api.runtime` -- [Configuration et config](/fr/plugins/sdk-setup) — packaging, manifestes, schémas de configuration -- [Tests](/fr/plugins/sdk-testing) — utilitaires de test et règles de lint -- [Migration SDK](/fr/plugins/sdk-migration) — migration depuis des surfaces obsolètes -- [Internes des plugins](/fr/plugins/architecture) — architecture détaillée et modèle de capacités +- [Entry Points](/fr/plugins/sdk-entrypoints) — options de `definePluginEntry` et `defineChannelPluginEntry` +- [Runtime Helpers](/fr/plugins/sdk-runtime) — référence complète de l'espace de noms `api.runtime` +- [Setup and Config](/fr/plugins/sdk-setup) — packaging, manifestes, schémas de config +- [Testing](/fr/plugins/sdk-testing) — utilitaires de test et règles de lint +- [SDK Migration](/fr/plugins/sdk-migration) — migration depuis des surfaces obsolètes +- [Plugin Internals](/fr/plugins/architecture) — architecture approfondie et modèle de capacité diff --git a/docs/fr/providers/google.md b/docs/fr/providers/google.md index c656a36ff..b8f2cdf27 100644 --- a/docs/fr/providers/google.md +++ b/docs/fr/providers/google.md @@ -2,26 +2,24 @@ read_when: - Vous souhaitez utiliser les modèles Google Gemini avec OpenClaw - Vous avez besoin du flux d’authentification par clé API ou OAuth -summary: Configuration de Google Gemini (clé API + OAuth, génération d’images, compréhension des médias, recherche web) +summary: Configuration de Google Gemini (clé API + OAuth, génération d’images, compréhension des médias, recherche Web) title: Google (Gemini) x-i18n: - generated_at: "2026-04-08T02:17:25Z" + generated_at: "2026-04-08T06:51:01Z" model: gpt-5.4 provider: openai - source_hash: e9e558f5ce35c853e0240350be9a1890460c5f7f7fd30b05813a656497dee516 + source_hash: fad2ff68987301bd86145fa6e10de8c7b38d5bd5dbcd13db9c883f7f5b9a4e01 source_path: providers/google.md workflow: 15 --- # Google (Gemini) -Le plugin Google donne accès aux modèles Gemini via Google AI Studio, ainsi qu’à la -génération d’images, à la compréhension des médias (image/audio/vidéo) et à la recherche web via -Gemini Grounding. +Le plugin Google fournit l’accès aux modèles Gemini via Google AI Studio, ainsi que la génération d’images, la compréhension des médias (image/audio/vidéo) et la recherche Web via Gemini Grounding. - Fournisseur : `google` -- Auth : `GEMINI_API_KEY` ou `GOOGLE_API_KEY` -- API : Google Gemini API +- Authentification : `GEMINI_API_KEY` ou `GOOGLE_API_KEY` +- API : API Google Gemini - Fournisseur alternatif : `google-gemini-cli` (OAuth) ## Démarrage rapide @@ -55,13 +53,11 @@ openclaw onboard --non-interactive \ ## OAuth (Gemini CLI) -Un fournisseur alternatif, `google-gemini-cli`, utilise OAuth PKCE au lieu d’une -clé API. Il s’agit d’une intégration non officielle ; certains utilisateurs signalent des -restrictions de compte. Utilisez-la à vos propres risques. +Un fournisseur alternatif `google-gemini-cli` utilise OAuth PKCE au lieu d’une clé API. Il s’agit d’une intégration non officielle ; certains utilisateurs signalent des restrictions de compte. Utilisez-la à vos propres risques. - Modèle par défaut : `google-gemini-cli/gemini-3-flash-preview` - Alias : `gemini-cli` -- Prérequis d’installation : Gemini CLI disponible localement sous le nom `gemini` +- Prérequis d’installation : la Gemini CLI locale doit être disponible sous le nom `gemini` - Homebrew : `brew install gemini-cli` - npm : `npm install -g @google/gemini-cli` - Connexion : @@ -75,48 +71,44 @@ Variables d’environnement : - `OPENCLAW_GEMINI_OAUTH_CLIENT_ID` - `OPENCLAW_GEMINI_OAUTH_CLIENT_SECRET` -(ou les variantes `GEMINI_CLI_*`). +(Ou les variantes `GEMINI_CLI_*`.) -Si les requêtes OAuth de Gemini CLI échouent après la connexion, définissez -`GOOGLE_CLOUD_PROJECT` ou `GOOGLE_CLOUD_PROJECT_ID` sur l’hôte de la passerelle et -réessayez. +Si les requêtes OAuth de Gemini CLI échouent après la connexion, définissez `GOOGLE_CLOUD_PROJECT` ou `GOOGLE_CLOUD_PROJECT_ID` sur l’hôte de la passerelle, puis réessayez. -Si la connexion échoue avant le démarrage du flux du navigateur, assurez-vous que la commande locale `gemini` -est installée et présente dans le `PATH`. OpenClaw prend en charge les installations Homebrew -et les installations npm globales, y compris les dispositions Windows/npm courantes. +Si la connexion échoue avant le démarrage du flux dans le navigateur, assurez-vous que la commande locale `gemini` est installée et présente dans le `PATH`. OpenClaw prend en charge les installations Homebrew et les installations npm globales, y compris les dispositions Windows/npm courantes. -Notes sur l’utilisation du JSON de Gemini CLI : +Remarques sur l’utilisation du JSON de Gemini CLI : -- Le texte de réponse provient du champ JSON `response` du CLI. -- L’utilisation bascule sur `stats` lorsque le CLI laisse `usage` vide. -- `stats.cached` est normalisé en `cacheRead` OpenClaw. -- Si `stats.input` est absent, OpenClaw dérive les jetons d’entrée à partir de - `stats.input_tokens - stats.cached`. +- Le texte de réponse provient du champ JSON `response` de la CLI. +- L’utilisation se rabat sur `stats` lorsque la CLI laisse `usage` vide. +- `stats.cached` est normalisé en `cacheRead` dans OpenClaw. +- Si `stats.input` est absent, OpenClaw dérive les jetons d’entrée à partir de `stats.input_tokens - stats.cached`. ## Capacités -| Capacité | Pris en charge | -| ------------------------ | ------------------ | -| Complétions de chat | Oui | -| Génération d’images | Oui | -| Génération musicale | Oui | -| Compréhension d’images | Oui | -| Transcription audio | Oui | -| Compréhension vidéo | Oui | -| Recherche web (Grounding) | Oui | -| Thinking/reasoning | Oui (Gemini 3.1+) | +| Capacité | Pris en charge | +| ----------------------- | ----------------- | +| Complétions de chat | Oui | +| Génération d’images | Oui | +| Génération de musique | Oui | +| Compréhension d’images | Oui | +| Transcription audio | Oui | +| Compréhension vidéo | Oui | +| Recherche Web (Grounding) | Oui | +| Thinking/reasoning | Oui (Gemini 3.1+) | +| Modèles Gemma 4 | Oui | + +Les modèles Gemma 4 (par exemple `gemma-4-26b-a4b-it`) prennent en charge le mode thinking. OpenClaw réécrit `thinkingBudget` vers un `thinkingLevel` Google pris en charge pour Gemma 4. Définir thinking sur `off` conserve la désactivation de thinking au lieu d’un mappage vers `MINIMAL`. ## Réutilisation directe du cache Gemini -Pour les exécutions directes de l’API Gemini (`api: "google-generative-ai"`), OpenClaw -transmet désormais un handle `cachedContent` configuré aux requêtes Gemini. +Pour les exécutions directes de l’API Gemini (`api: "google-generative-ai"`), OpenClaw transmet désormais un handle `cachedContent` configuré aux requêtes Gemini. - Configurez des paramètres par modèle ou globaux avec `cachedContent` ou l’ancien `cached_content` - Si les deux sont présents, `cachedContent` est prioritaire - Exemple de valeur : `cachedContents/prebuilt-context` -- L’utilisation d’un accès au cache Gemini est normalisée dans `cacheRead` OpenClaw à partir de - `cachedContentTokenCount` en amont +- L’utilisation en cas de réussite du cache Gemini est normalisée en `cacheRead` dans OpenClaw à partir de `cachedContentTokenCount` en amont Exemple : @@ -138,17 +130,14 @@ Exemple : ## Génération d’images -Le fournisseur groupé de génération d’images `google` utilise par défaut -`google/gemini-3.1-flash-image-preview`. +Le fournisseur de génération d’images `google` inclus utilise par défaut `google/gemini-3.1-flash-image-preview`. - Prend aussi en charge `google/gemini-3-pro-image-preview` - Génération : jusqu’à 4 images par requête - Mode édition : activé, jusqu’à 5 images d’entrée - Contrôles de géométrie : `size`, `aspectRatio` et `resolution` -Le fournisseur `google-gemini-cli`, limité à OAuth, constitue une surface distincte -d’inférence de texte. La génération d’images, la compréhension des médias et Gemini Grounding restent sur -l’identifiant de fournisseur `google`. +Le fournisseur `google-gemini-cli`, uniquement OAuth, constitue une surface d’inférence de texte distincte. La génération d’images, la compréhension des médias et Gemini Grounding restent associées à l’identifiant de fournisseur `google`. Pour utiliser Google comme fournisseur d’images par défaut : @@ -164,18 +153,16 @@ Pour utiliser Google comme fournisseur d’images par défaut : } ``` -Voir [Génération d’images](/fr/tools/image-generation) pour les paramètres partagés de l’outil, -la sélection du fournisseur et le comportement de basculement. +Consultez [Image Generation](/fr/tools/image-generation) pour les paramètres d’outil partagés, la sélection du fournisseur et le comportement de basculement. ## Génération de vidéo -Le plugin groupé `google` enregistre aussi la génération vidéo via l’outil partagé -`video_generate`. +Le plugin `google` inclus enregistre également la génération de vidéo via l’outil partagé `video_generate`. - Modèle vidéo par défaut : `google/veo-3.1-fast-generate-preview` -- Modes : texte vers vidéo, image vers vidéo et flux de référence à vidéo unique +- Modes : texte vers vidéo, image vers vidéo et flux à référence vidéo unique - Prend en charge `aspectRatio`, `resolution` et `audio` -- Limite actuelle de durée : **4 à 8 secondes** +- Limitation actuelle de durée : **4 à 8 secondes** Pour utiliser Google comme fournisseur vidéo par défaut : @@ -191,20 +178,18 @@ Pour utiliser Google comme fournisseur vidéo par défaut : } ``` -Voir [Génération de vidéo](/fr/tools/video-generation) pour les paramètres partagés de l’outil, -la sélection du fournisseur et le comportement de basculement. +Consultez [Video Generation](/fr/tools/video-generation) pour les paramètres d’outil partagés, la sélection du fournisseur et le comportement de basculement. -## Génération musicale +## Génération de musique -Le plugin groupé `google` enregistre aussi la génération musicale via l’outil partagé -`music_generate`. +Le plugin `google` inclus enregistre également la génération de musique via l’outil partagé `music_generate`. - Modèle musical par défaut : `google/lyria-3-clip-preview` - Prend aussi en charge `google/lyria-3-pro-preview` -- Contrôles du prompt : `lyrics` et `instrumental` -- Format de sortie : `mp3` par défaut, plus `wav` sur `google/lyria-3-pro-preview` +- Contrôles d’invite : `lyrics` et `instrumental` +- Format de sortie : `mp3` par défaut, ainsi que `wav` sur `google/lyria-3-pro-preview` - Entrées de référence : jusqu’à 10 images -- Les exécutions appuyées sur une session se détachent via le flux partagé tâche/état, y compris `action: "status"` +- Les exécutions avec session se détachent via le flux partagé de tâche/statut, y compris `action: "status"` Pour utiliser Google comme fournisseur musical par défaut : @@ -220,11 +205,8 @@ Pour utiliser Google comme fournisseur musical par défaut : } ``` -Voir [Génération musicale](/fr/tools/music-generation) pour les paramètres partagés de l’outil, -la sélection du fournisseur et le comportement de basculement. +Consultez [Music Generation](/fr/tools/music-generation) pour les paramètres d’outil partagés, la sélection du fournisseur et le comportement de basculement. ## Remarque sur l’environnement -Si la passerelle s’exécute comme daemon (launchd/systemd), assurez-vous que `GEMINI_API_KEY` -est disponible pour ce processus (par exemple dans `~/.openclaw/.env` ou via -`env.shellEnv`). +Si la passerelle s’exécute en tant que démon (launchd/systemd), assurez-vous que `GEMINI_API_KEY` est disponible pour ce processus (par exemple dans `~/.openclaw/.env` ou via `env.shellEnv`). diff --git a/docs/fr/providers/ollama.md b/docs/fr/providers/ollama.md index d36f1faa9..2da74aa17 100644 --- a/docs/fr/providers/ollama.md +++ b/docs/fr/providers/ollama.md @@ -1,43 +1,43 @@ --- 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 mise en place pour Ollama + - Vous avez besoin d'instructions pour l'installation et la configuration d'Ollama summary: Exécuter OpenClaw avec Ollama (modèles cloud et locaux) title: Ollama x-i18n: - generated_at: "2026-04-08T02:18:12Z" + generated_at: "2026-04-08T06:51:18Z" model: gpt-5.4 provider: openai - source_hash: 222ec68f7d4bb29cc7796559ddef1d5059f5159e7a51e2baa3a271ddb3abb716 + source_hash: d3295a7c879d3636a2ffdec05aea6e670e54a990ef52bd9b0cae253bc24aa3f7 source_path: providers/ollama.md workflow: 15 --- # Ollama -Ollama est un runtime LLM local qui permet d’exécuter facilement des 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`. +Ollama est un environnement d'exécution 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étecter automatiquement les modèles Ollama locaux lorsque vous activez `OLLAMA_API_KEY` (ou un profil d'authentification) et que vous ne définissez pas d'entrée `models.providers.ollama` explicite. -**Utilisateurs d’Ollama distant** : n’utilisez pas l’URL `/v1` compatible OpenAI (`http://host:11434/v1`) avec OpenClaw. Cela casse l’appel d’outils et les modèles peuvent produire du JSON d’outil brut comme texte brut. Utilisez à la place 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 le JSON brut des outils sous forme de texte brut. Utilisez à la place l'URL de l'API native d'Ollama : `baseUrl: "http://host:11434"` (sans `/v1`). ## Démarrage rapide -### Onboarding (recommandé) +### Intégration guidée (recommandée) -Le moyen le plus rapide de configurer Ollama est de passer par l’onboarding : +Le moyen le plus rapide de configurer Ollama consiste à passer par l'intégration guidée : ```bash openclaw onboard ``` -Sélectionnez **Ollama** dans la liste des fournisseurs. L’onboarding va : +Sélectionnez **Ollama** dans la liste des fournisseurs. L'intégration guidée va : -1. Demander l’URL de base Ollama où votre instance est accessible (par défaut `http://127.0.0.1:11434`). -2. Vous permettre de choisir **Cloud + Local** (modèles cloud et locaux) ou **Local** (modèles locaux uniquement). -3. Ouvrir un flux de connexion dans le navigateur si vous choisissez **Cloud + Local** et que vous n’êtes pas connecté à ollama.com. -4. Découvrir les modèles disponibles et suggérer des valeurs par défaut. -5. Télécharger automatiquement le modèle sélectionné s’il n’est pas disponible localement. +1. Demander l'URL de base Ollama à laquelle votre instance est accessible (par défaut `http://127.0.0.1:11434`). +2. Vous permettre de choisir **Cloud + Local** (modèles cloud et modèles locaux) ou **Local** (modèles locaux uniquement). +3. Ouvrir un flux de connexion dans le navigateur si vous choisissez **Cloud + Local** et que vous n'êtes pas connecté à ollama.com. +4. Détecter les modèles disponibles et suggérer des valeurs par défaut. +5. Télécharger automatiquement le modèle sélectionné s'il n'est pas disponible localement. Le mode non interactif est également pris en charge : @@ -47,7 +47,7 @@ openclaw onboard --non-interactive \ --accept-risk ``` -Vous pouvez éventuellement spécifier une URL de base ou un modèle personnalisé : +Vous pouvez éventuellement spécifier une URL de base ou un modèle personnalisés : ```bash openclaw onboard --non-interactive \ @@ -77,7 +77,7 @@ ollama pull llama3.3 ollama signin ``` -4. Lancez l’onboarding et choisissez `Ollama` : +4. Exécutez l'intégration guidée et choisissez `Ollama` : ```bash openclaw onboard @@ -85,17 +85,17 @@ openclaw onboard - `Local` : modèles locaux uniquement - `Cloud + Local` : modèles locaux plus modèles cloud -- Les modèles cloud comme `kimi-k2.5:cloud`, `minimax-m2.7:cloud` et `glm-5.1:cloud` ne nécessitent **pas** de `ollama pull` local +- Les modèles cloud tels que `kimi-k2.5:cloud`, `minimax-m2.7:cloud` et `glm-5.1:cloud` ne nécessitent **pas** de `ollama pull` local OpenClaw suggère actuellement : - valeur par défaut locale : `gemma4` - valeurs par défaut cloud : `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud` -5. Si vous préférez une configuration manuelle, activez directement Ollama pour OpenClaw (n’importe quelle valeur fonctionne ; Ollama n’exige pas de vraie clé) : +5. Si vous préférez une configuration manuelle, activez directement Ollama pour OpenClaw (n'importe quelle valeur convient ; Ollama n'exige pas de vraie clé) : ```bash -# Définir la variable d’environnement +# Définir la variable d'environnement export OLLAMA_API_KEY="ollama-local" # Ou configurer dans votre fichier de configuration @@ -121,17 +121,18 @@ openclaw models set ollama/gemma4 } ``` -## Découverte de modèles (fournisseur implicite) +## Détection 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 à partir de l’instance Ollama locale sur `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étecte les modèles depuis l'instance Ollama locale à l'adresse `http://127.0.0.1:11434` : -- interroge `/api/tags` -- utilise des recherches `/api/show` au mieux pour lire `contextWindow` lorsqu’il est disponible -- marque `reasoning` avec une heuristique sur le nom du modèle (`r1`, `reasoning`, `think`) -- définit `maxTokens` sur la limite maximale de jetons Ollama par défaut utilisée par OpenClaw -- définit tous les coûts à `0` +- Interroge `/api/tags` +- Utilise des recherches `/api/show` en mode best effort pour lire `contextWindow` et détecter les capacités (y compris la vision) lorsque disponibles +- Les modèles avec une capacité `vision` signalée par `/api/show` sont marqués comme compatibles avec les images (`input: ["text", "image"]`), afin qu'OpenClaw injecte automatiquement les images dans l'invite pour ces modèles +- Marque `reasoning` à l'aide d'une heuristique basée sur le nom du modèle (`r1`, `reasoning`, `think`) +- Définit `maxTokens` sur le plafond de jetons maximum Ollama par défaut utilisé par OpenClaw +- Définit tous les coûts à `0` -Cela évite les entrées manuelles de modèle tout en gardant le catalogue aligné sur l’instance Ollama locale. +Cela évite les entrées de modèles manuelles tout en conservant un catalogue aligné sur l'instance Ollama locale. Pour voir quels modèles sont disponibles : @@ -140,21 +141,21 @@ ollama list openclaw models list ``` -Pour ajouter un nouveau modèle, il suffit de le télécharger avec Ollama : +Pour ajouter un nouveau modèle, téléchargez-le simplement 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étecté 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 (voir ci-dessous). +Si vous définissez explicitement `models.providers.ollama`, la détection automatique est ignorée et vous devez définir les modèles manuellement (voir ci-dessous). ## Configuration -### Configuration de base (découverte implicite) +### Configuration de base (détection implicite) -La façon la plus simple d’activer Ollama est via une variable d’environnement : +Le moyen le plus simple d'activer Ollama consiste à utiliser une variable d'environnement : ```bash export OLLAMA_API_KEY="ollama-local" @@ -164,9 +165,9 @@ export OLLAMA_API_KEY="ollama-local" Utilisez une configuration explicite lorsque : -- Ollama s’exécute sur un autre hôte/port. +- Ollama s'exécute sur un autre hôte/port. - Vous souhaitez imposer des fenêtres de contexte ou des listes de modèles spécifiques. -- Vous souhaitez des définitions de modèle entièrement manuelles. +- Vous souhaitez des définitions de modèles entièrement manuelles. ```json5 { @@ -193,11 +194,11 @@ Utilisez une configuration explicite lorsque : } ``` -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é. ### URL de base personnalisée (configuration explicite) -Si Ollama s’exécute sur un hôte ou un port différent (la configuration explicite désactive la découverte automatique, donc définissez les modèles manuellement) : +Si Ollama s'exécute sur un hôte ou un port différent (la configuration explicite désactive la détection automatique, vous devez donc définir les modèles manuellement) : ```json5 { @@ -205,8 +206,8 @@ Si Ollama s’exécute sur un hôte ou un port différent (la configuration expl 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 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 d'Ollama + api: "ollama", // Définissez explicitement pour garantir le comportement natif d'appel d'outils }, }, }, @@ -214,10 +215,10 @@ Si Ollama s’exécute sur un hôte ou un port différent (la configuration expl ``` -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 d'Ollama sans suffixe de chemin. -### Sélection de modèle +### Sélection du modèle Une fois configurés, tous vos modèles Ollama sont disponibles : @@ -236,21 +237,19 @@ Une fois configurés, tous vos modèles Ollama sont disponibles : ## Modèles cloud -Les modèles cloud vous permettent d’exécuter des modèles hébergés dans le cloud (par exemple `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`) en parallèle de vos modèles locaux. +Les modèles cloud vous permettent d'exécuter des modèles hébergés dans le cloud (par exemple `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`) en parallèle de vos modèles locaux. -Pour utiliser les modèles cloud, 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 bascule vers les valeurs par défaut des modèles locaux. +Pour utiliser les modèles cloud, 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 valeurs par défaut des modèles locaux. -Vous pouvez aussi vous connecter directement sur [ollama.com/signin](https://ollama.com/signin). +Vous pouvez également vous connecter directement sur [ollama.com/signin](https://ollama.com/signin). -## Recherche Web Ollama +## Ollama Web Search -OpenClaw prend également en charge **Ollama Web Search** comme fournisseur groupé -`web_search`. +OpenClaw prend également en charge **Ollama Web Search** comme fournisseur `web_search` intégré. -- Il utilise l’hôte Ollama configuré (`models.providers.ollama.baseUrl` lorsqu’il - est défini, sinon `http://127.0.0.1:11434`). -- Il ne nécessite pas de clé. -- Il nécessite qu’Ollama soit en cours d’exécution et connecté avec `ollama signin`. +- Il utilise votre hôte Ollama configuré (`models.providers.ollama.baseUrl` lorsqu'il est défini, sinon `http://127.0.0.1:11434`). +- Il ne nécessite aucune clé. +- 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 : @@ -267,13 +266,13 @@ Choisissez **Ollama Web Search** pendant `openclaw onboard` ou } ``` -Pour la configuration complète et le détail du comportement, voir [Ollama Web Search](/fr/tools/ollama-search). +Pour la configuration complète et le détail du comportement, consultez [Ollama Web Search](/fr/tools/ollama-search). ## Avancé ### Modèles de raisonnement -OpenClaw traite par défaut comme capables de raisonnement les modèles dont le nom contient `deepseek-r1`, `reasoning` ou `think` : +OpenClaw traite par défaut les modèles dont le nom contient `deepseek-r1`, `reasoning` ou `think` comme capables de raisonnement : ```bash ollama pull deepseek-r1:32b @@ -281,19 +280,19 @@ ollama pull deepseek-r1:32b ### Coûts des modèles -Ollama est gratuit et s’exécute localement, donc tous les coûts de modèle sont définis à $0. +Ollama est gratuit et s'exécute localement, donc tous les coûts des modèles sont définis à 0 $. ### Configuration du streaming -L’intégration Ollama d’OpenClaw utilise par défaut l’**API native Ollama** (`/api/chat`), qui prend pleinement 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 le streaming et l'appel d'outils simultanément. Aucune configuration particulière n'est nécessaire. #### Ancien mode compatible OpenAI -**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 l’endpoint compatible OpenAI (par ex. derrière un proxy qui ne prend en charge que le format OpenAI), définissez explicitement `api: "openai-completions"` : +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"` : ```json5 { @@ -302,7 +301,7 @@ Si vous devez utiliser à la place l’endpoint compatible OpenAI (par ex. derri ollama: { baseUrl: "http://ollama-host:11434/v1", api: "openai-completions", - injectNumCtxForOpenAICompat: true, // valeur par défaut : true + injectNumCtxForOpenAICompat: true, // par défaut : true apiKey: "ollama-local", models: [...] } @@ -311,9 +310,9 @@ Si vous devez utiliser à la place l’endpoint compatible OpenAI (par ex. derri } ``` -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/amont 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 { @@ -333,19 +332,19 @@ Lorsque `api: "openai-completions"` est utilisé avec Ollama, OpenClaw injecte ` ### Fenêtres de contexte -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. +Pour les modèles détectés 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. ## Dépannage ### Ollama non détecté -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 ``` -Et que l’API est accessible : +Et que l'API est accessible : ```bash curl http://localhost:11434/api/tags @@ -353,10 +352,10 @@ curl http://localhost:11434/api/tags ### Aucun modèle disponible -Si votre modèle n’est pas listé, soit : +Si votre modèle n'est pas répertorié, soit : -- téléchargez le modèle localement, soit -- définissez explicitement le modèle dans `models.providers.ollama`. +- téléchargez le modèle localement, ou +- définissez le modèle explicitement dans `models.providers.ollama`. Pour ajouter des modèles : @@ -369,10 +368,10 @@ ollama pull llama3.3 # Ou un autre modèle ### Connexion refusée -Vérifiez qu’Ollama s’exécute 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 @@ -381,6 +380,6 @@ ollama serve ## Voir aussi -- [Fournisseurs de modèles](/fr/concepts/model-providers) - Vue d’ensemble de tous les fournisseurs -- [Sélection de modèle](/fr/concepts/models) - Comment choisir les modèles -- [Configuration](/fr/gateway/configuration) - Référence complète de configuration +- [Fournisseurs de modèles](/fr/concepts/model-providers) - Vue d'ensemble de tous les fournisseurs +- [Sélection des modèles](/fr/concepts/models) - Comment choisir des modèles +- [Configuration](/fr/gateway/configuration) - Référence complète de la configuration