Toutes les pages
Sur cette page

Dépannage

Commencez ici quand quelque chose ne marche pas. Les premières sections présentent les vérifications qui s’appliquent à presque tout. Les tableaux qui suivent mènent de ce que vous voyez à la page qui contient la solution. La plupart de ces pages se terminent par leur propre section de dépannage ; cette page ne les répète pas.

Premières étapes #

Sur la machine du relais, dans un terminal :

oar status
oar doctor
  1. oar status indique si le relais répond. Comparez ses premières lignes au tableau ci-dessous.
  2. oar doctor affiche l’installation, la config et les CLI de fournisseurs qu’il trouve. Il ne modifie rien et se termine toujours avec le code 0 ; lisez donc les lignes.
  3. Regardez le navigateur. La pastille d’état et les bannières indiquent si le problème se situe entre le navigateur et le relais ou derrière le relais.
  4. Lisez le journal qui correspond au problème (Journaux).
  5. Redémarrez le plus petit élément qui pourrait aider (Redémarrer).

Les deux commandes sont décrites dans La commande oar.

Lire oar status #

Ligne Ce qu’elle indique
Not set up yet — run: oar setup Pas de config dans cette installation. Exécutez oar setup. Premier lancement
The relay is running on port <port> (<access>): <url> Le relais va bien. Ouvrez l’URL ; oar url l’affiche avec le token. Le problème se situe alors dans le navigateur, la connexion ou une session
The relay is stopped (port <port>, <access>). Start it with: oar start Rien ne répond sur le port. Exécutez oar start et lisez Installation et démarrage en cas d’échec
Port <port> is held by another program, or by a relay with another token. Un autre programme utilise le port, ou un ancien relais avec un token antérieur tourne encore. Voir S’il ne démarre pas
The relay runs with its earlier settings; restart it to apply the new ones. Vous avez modifié le port, le token ou l’accès avec oar setup. Exécutez oar restart
Service: <state> Le service de démarrage à l’ouverture de session. Voir Démarrer le relais automatiquement
Tunnel: <state> Le tunnel Cloudflare intégré. Voir Tunnel Cloudflare

Le code de sortie 3 signifie que le relais ne tourne pas, que le port est occupé par autre chose ou qu’il n’y a pas de config. Le code de sortie 0 signifie que le relais tourne.

Lire oar doctor #

Ligne Ce qu’elle vous dit
OAR <version> et node La version d’OAR et le Node.js qui exécute oar. Mettez les deux dans un rapport
mode git checkout (checkout git) : oar update et oar service refusent d’y fonctionner. global install (installation globale) est le cas normal
state root et config L’installation que la commande examine. Deux installations sur une même machine ont chacune les leurs. (missing — run: oar setup) après le chemin de la config signifie qu’il n’y a pas de config ; port, auth token et tunnel sont alors omis
port Le port et qui peut le joindre. localhostOnly: yes signifie cette machine uniquement ; les autres appareils ont besoin de oar setup --lan ou d’un tunnel
auth token MISSING signifie qu’aucun token n’est défini. Exécutez oar setup
tunnel disabled, managed (cloudflared: <path>) ou managed, cannot start: <reason>. La raison nomme ce qui ne va pas, par exemple un cloudflared manquant
database La base de données qu’utilise cette installation, avec sa taille. (not created yet) signifie que le relais n’a jamais tourné depuis cette installation. Si vos conversations manquent, ou si des messages restent en attente, vérifiez que c’est bien la base de données attendue (Un relais par dossier de données)
provider CLIs gh (Copilot), claude et grok affichent leur version, ou not found. Doctor cherche avec le PATH de votre terminal ; un service a le PATH du moment de son installation (Démarrer le relais automatiquement). cursor affiche toujours bundled (@cursor/sdk), qu’une clé soit enregistrée ou non
warning Sous WSL, Windows occupe le port du relais. Choisissez-en un autre avec oar setup --port <port>

Doctor affiche le dossier d’état, pas le dossier des journaux, et il ne dit pas si le relais tourne : c’est le rôle de oar status. L’emplacement des journaux figure dans Fichiers et dossiers.

Journaux #

Problème À lire
Le relais ne démarre pas, ou s’arrête server-err.log dans le dossier des journaux, mais seulement quand oar start a lui-même démarré le relais en arrière-plan. Sous le service Linux, les erreurs de démarrage se trouvent dans le journal système (journalctl --user -u oar), pas dans server-err.log ; voir État et journaux
Tout ce qu’a fait le relais : aperçus, tunnels, mises à jour, redémarrages relay-console.log. Il affiche votre token d’accès sous la forme [token]
Une conversation ne répond pas, ou son agent s’arrête worker-<session>.log, le worker de cette conversation. Le moteur d’extension Copilot n’en a pas ; voir ext-debug.log et le terminal Copilot
Le service ne démarre pas systemctl --user status oar, puis journalctl --user -u oar

Tous les fichiers journaux, leur rotation et le dossier dans un checkout git sont décrits dans Fichiers et dossiers.

Dans le navigateur #

  • La pastille d’état en haut de la liste des conversations : grise, c’est Web relay unreachable (Relais web injoignable : le navigateur ne peut pas joindre le relais) ; verte, c’est Web relay reachable (Relais web joignable) ; ambre, c’est le relais joint via un tunnel Cloudflare connecté. L’infobulle en dit plus, par exemple combien de workers sont occupés. La pastille d’état
  • La bannière CLI is offline — messages will queue until it reconnects et CLI offline (CLI hors ligne) dans la barre latérale signifient qu’aucun worker de session ne s’est manifesté depuis 10 secondes. Sur un relais inactif, c’est normal : envoyez un message et la bannière disparaît. Si elle reste, lisez le journal du worker. Quand l’agent est injoignable

Redémarrer #

Quoi Quand Comment
L’agent d’une conversation Une conversation est bloquée, Stop (Arrêter) ne marche pas, ou l’agent doit prendre en compte de nouveaux réglages ☠️ Kill session (Tuer la session) dans le menu ⋯. L’historique et la queue restent ; le message suivant démarre un nouveau worker. Kill session
Le relais Une nouvelle version, une config modifiée, une CLI de fournisseur nouvellement installée oar restart sur la machine du relais, ou 🌄 Restart web relay (Redémarrer le relais web) dans le menu ⋯. Les deux attendent la fin des turns en cours, sauf sous le service Linux, où oar restart y met fin. Redémarrer le relais

Symptômes #

Installation et démarrage #

Ce que vous voyez Cause habituelle Solution
npm install -g @oar-sh/oar échoue avec EACCES Le dossier global de npm exige root Utilisez l’installateur, pas sudo. Installation
Node.js trop ancien ou introuvable ; oar: command not found ; oar bloqué dans PowerShell Node.js antérieur à 22.13, ou le PATH n’a pas été rechargé Installation
L’installation échoue avec des erreurs node-gyp ou prebuild Pas de better-sqlite3 précompilé pour votre plateforme Installation
Le relais ne démarre pas après une installation avec npm 12, avec une erreur better-sqlite3 npm 12 a sauté les scripts d’installation Réinstallez avec --allow-scripts=@oar-sh/oar,better-sqlite3,koffi, jamais avec --ignore-scripts. Installation. L’erreur se trouve dans server-err.log si oar start a démarré le relais, sinon dans le journal système
Port 3333 is in use by another program ... Un autre programme ou un ancien relais occupe le port S’il ne démarre pas
The relay did not come up — see …/server-err.log Le relais a démarré puis s’est arrêté S’il ne démarre pas
Relay already running ou Relay appears to be owned by another live process, code de sortie 78 Un second relais sur le même dossier de données Suivez l’indication en fin de ligne (oar stop, or end process <pid>). Un relais par dossier de données
[data] Not starting: each database has changes newer than the other's Ajouté en 0.9.14 Le relais a trouvé une base de données antérieure sur laquelle il a tourné, et les deux contiennent du travail Gardez-en une, déplacez les copilot.db, -wal et -shm de l’autre dans un dossier à vous, puis oar start. Notes de mise à niveau pour 0.9.14
[oar] The relay … is bringing over the database it ran on until now … Ajouté en 0.9.14 Le premier démarrage après la mise à jour copie une base de données volumineuse Attendez ; il répond une fois la copie terminée. Ne démarrez pas un second relais. Notes de mise à niveau pour 0.9.14
Après la mise à jour, les conversations d’un relais en démarrage automatique Windows ou gh copilot ont disparu Avant 0.9.14, ce relais gardait ses données dans le paquet Notes de mise à niveau pour 0.9.14
[startup] Cannot create … ou … is a file, not a folder, code de sortie 78 Ajouté en 0.9.14 Le dossier de données ou d’envoi ne peut pas être créé, par exemple parce que son lecteur est absent Rendez le lecteur ou le dossier disponible. Attendre TEMP et le lecteur de données
No systemd user session here, Could not enable lingering, le relais a disparu après un redémarrage de la machine Pas de session utilisateur systemd, ou le lingering est désactivé Démarrer le relais automatiquement
WSL : le navigateur Windows affiche une autre page ou refuse le token Windows occupe le port oar setup --port <port>. S’il ne démarre pas
Sous le service, un outil ou node est introuvable dans les sessions Le service garde le PATH du moment de son installation Démarrer le relais automatiquement
Nothing changed: OAR does not delete or overwrite an autostart entry it did not make. (Windows) Ajouté en 0.9.15 Une entrée de démarrage, une tâche de démarrage ou un lanceur créé ou modifié à la main bloque le changement Supprimez-le vous-même, ou lancez le changement avec --replace, qui en garde une copie. Entrées qu’OAR n’a pas créées
Nothing changed: the boot task could not be read (…) (Windows) Ajouté en 0.9.15 La tâche existe mais OAR ne peut pas la lire, souvent Access is denied (Accès refusé) parce qu’elle stocke le mot de passe d’un autre compte Examinez-la dans le Planificateur de tâches en tant qu’administrateur. Entrées qu’OAR n’a pas créées
oar uninstall s’arrête avec Not done: … Ajouté en 0.9.15 Une étape a échoué : le relais ne s’est pas arrêté, une invite administrateur a été refusée, un dossier n’a pas pu être supprimé Réglez le problème de la ligne qui précède, puis relancez la même commande. oar uninstall
Un dossier caché .oar-* reste à côté du paquet supprimé Ajouté en 0.9.15 Un worker de session tournait encore depuis le paquet pendant que npm le supprimait Supprimez le dossier une fois ces programmes terminés, au plus tard après un redémarrage de la machine. oar uninstall

Connexion et accès au relais #

Ce que vous voyez Cause habituelle Solution
Invalid token (Token non valide) dans la boîte de connexion Un token ancien ou erroné Utilisez le token de oar url. S’il ne démarre pas
Too many failed sign-in attempts. Try again in … seconds. (Trop de tentatives de connexion échouées. Réessayez dans … secondes.) Dix tokens erronés depuis cette adresse en une minute Attendez que la minute soit écoulée, puis utilisez le bon token. Derrière un proxy sur une autre machine, définissez trustProxy, sinon tous les visiteurs partagent un même blocage. Protections à la connexion
Un script reçoit 401 sur des adresses d’API ou de fichiers qui portent ?token= Depuis 0.9.11, ?token= ne connecte que la page Envoyez Authorization: Bearer <token>. Façons de le présenter
Chaque appareil redemande le token oar setup --new-token déconnecte tous les appareils Si vous perdez le token
La pastille d’état est grise : Web relay unreachable Le relais est arrêté, ou l’adresse est erronée Exécutez oar status sur la machine du relais. La pastille d’état
Un téléphone ne peut pas ouvrir l’adresse L’accès est this machine only (cette machine uniquement) oar setup --lan, ou un tunnel. Depuis un téléphone
Le tunnel est désactivé (cloudflared is not installed) ou se reconnecte sans cesse cloudflared manque, le token est erroné, ou la connexion SSH échoue Tunnel Cloudflare, Tunnel SSH
Les messages restent en file et la queue est en pause Le tunnel est réglé sur required et n’est pas connecté Les deux mêmes sections
Derrière Caddy ou nginx, la page se reconnecte sans fin, reste vide sous un préfixe, ou redemande le token encore et encore Le proxy bloque les WebSockets, retire un préfixe ou exige d’autres réglages Proxy inverse
Derrière un proxy, la page se charge mais rien ne se met à jour en direct, et le journal du relais indique Refused a handshake from origin Le proxy réécrit l’en-tête Host Indiquez l’origine publique dans allowedOrigins. allowedOrigins

Une conversation ne démarre pas ou l’agent ne répond pas #

Chaque page de fournisseur se termine par les échecs que ce fournisseur peut produire. Une réponse en échec nomme généralement sa cause et porte souvent un bouton qui la corrige.

Fournisseur Échecs typiques Solution
GitHub Copilot L’enregistrement de SDK est refusé avec COPILOT_SDK_PATH did not resolve (COPILOT_SDK_PATH n’a pas pu être résolu), le runtime n’a pas pu s’authentifier, plus de crédits d’IA, oar copilot indique que la CLI GitHub manque GitHub Copilot, Quand l’enregistrement de SDK est refusé
OpenAI OpenAI API key is not configured, la découverte des modèles a échoué, OpenAI image API failed (401) OpenAI
Claude Absent de New Chat (Nouveau chat), Not logged in, une réponse qui renvoie à la facturation, Ajouté en 0.9.18 relay.subscription-key-source Claude
Claude API Ajouté en 0.9.18 La clé est hors d’un workspace (HTTP 400), le plafond mensuel est atteint, signalé par relay.claude-api-cap-reached ou par Start on subscription (Démarrer sur l’abonnement) dans New Chat, la clé n’est pas acceptée (relay.claude-api-key), le crédit ou la limite de dépenses du compte (relay.claude-api-credit, relay.claude-api-spend-limit), la carte affiche no price known pour un modèle Claude API, Erreurs
Claude Cloud La connexion a expiré, GitHub n’est pas connecté, pas d’environnement cloud Claude Cloud
Cursor Cursor API key is not configured, Cursor model "…" is not available Cursor
Grok Grok CLI was not found on PATH, Grok authentication failed Grok
DeepSeek Ajouté en 0.9.17 Le solde est épuisé (relay.deepseek-balance), la clé n’est pas acceptée (relay.deepseek-api-key), trop de requêtes à la fois (relay.deepseek-rate-limit) ; les autres échecs s’affichent sous la forme relay.deepseek-…, par exemple relay.deepseek-api-error DeepSeek, Erreurs
Ce que vous voyez Cause habituelle Solution
Un fournisseur manque dans New Chat Il est désactivé, ou n’a ni clé ni connexion La page du fournisseur ci-dessus ; Un fournisseur désactivé
Set up a provider (Configurer un fournisseur) sur le premier écran Aucun fournisseur n’est prêt Le premier coup d’œil
La liste des modèles est ancienne ou fausse La découverte doit être relancée 🤗 Select Models → Refresh (Sélectionner des modèles → Actualiser) ; par fournisseur, sur sa page ci-dessus
Pas de ligne de consommation sous une réponse Seuls les turns Copilot enregistrent la consommation du forfait GitHub Copilot
Une carte Check Usage (Vérifier la consommation) affiche Error (Erreur), Unavailable (Indisponible) ou seulement des estimations La lecture en direct a échoué ; la carte se rabat sur ce qu’elle a Actualisation et fraîcheur des chiffres

Un turn est bloqué, échoue ou redémarre #

Ce que vous voyez Cause habituelle Solution
La bannière CLI is offline Aucun worker ne s’est manifesté Quand l’agent est injoignable
Un long turn retourne dans la queue et recommence Max turn duration (Durée maximale d’un turn), 60 minutes par défaut, ou la fenêtre d’inactivité (10 minutes) a expiré Augmentez ou videz Max turn duration dans Settings → General (Réglages → Général). Quand un turn est bloqué
System note: the … runtime sent nothing for Ns ... La surveillance du silence du moteur SDK Copilot, de Cursor ou de Grok a mis fin au turn Renvoyez le message. Quand un turn échoue
Relay timeout after 5 attempts ou Relay recovery limit reached Le turn a été remis en file jusqu’à épuisement des tentatives Quand un turn échoue
Une conversation semble coincée ; Stop ne fait rien Le worker est bloqué ☠️ Kill session, puis renvoyez le message. Kill session
Les messages restent en attente Un redémarrage est en file et retient les nouveaux messages, ou un autre relais utilise la base de données Le redémarrage attend, Un relais par dossier de données
Les nouveaux messages restent en file et une bannière indique Relay restart queued — waiting for N sessions (Redémarrage du relais en file — attente de N sessions) Un redémarrage est en file et attend la fin des turns en cours des sessions qu’il relie ; d’ici là, aucun message n’est remis à une session Attendez, ou appuyez sur Restart now (Redémarrer maintenant) ou Cancel restart (Annuler le redémarrage) dans la bannière. Après Ask after a queued relay restart has waited (Demander quand un redémarrage du relais en file a attendu), 30 minutes par défaut, la bannière pose la question au lieu de continuer d’attendre. Le redémarrage attend
Les messages d’une conversation restent en file après un redémarrage du relais Son worker ne s’est pas encore reconnecté. Il réessaie de lui-même, à 8 secondes d’intervalle au plus, et depuis 0.9.13 aussi quand sa connexion se bloque Son worker-<session>.log contient une ligne worker ws disconnected par tentative échouée (les trois premières, puis une par minute) qui en donne la raison. ☠️ Kill session démarre un nouveau worker. Quand l’agent est injoignable
Après un redémarrage du relais, une session s’est arrêtée en plein turn et n’a plus rien fait Son turn n’a pas pu être relancé : l’agent avait déjà pris le message Envoyez un court « continue », ou activez After a relay restart, tell interrupted sessions to carry on (Après un redémarrage du relais, demander aux sessions interrompues de continuer) dans Settings → General. Une ligne relay (relais) qui indique que le relais a redémarré est cette note. Demander à une session interrompue de continuer
Un envoi échoue avec This conversation's model "…" is no longer available. Choose a model and send again. (Le modèle « … » de cette conversation n’est plus disponible. Choisissez un modèle et renvoyez.) L’envoi ne nommait aucun modèle, et le modèle Copilot réglé pour la conversation a quitté le catalogue. Depuis 0.9.13, le relais ne passe plus de lui-même à un autre modèle Choisissez un modèle dans la zone de saisie et renvoyez. Modèles et raisonnement
Restart web relay ou Empty queue (Vider la file) affiche une erreur Le relais a refusé la requête et en donne la raison, ou n’a pas répondu Restart web relay, Empty queue
Une variable définie pour le relais n’a aucun effet sur les agents Sous tmux, seule une liste fixe de variables leur parvient Quelles variables parviennent aux agents
Une réponse s’est arrêtée avec une note Paused (En pause) Une limite d’utilisation Quand une limite d’utilisation est atteinte
Un agent en arrière-plan ou un shell s’est arrêté de lui-même Il a atteint le Background task timeout (Délai des tâches de fond), 4 heures par défaut Background task timeout
Une ligne de tâche affiche no output for N min en ambre La commande n’a rien écrit depuis plus longtemps que Mark a background task as quiet after (Marquer une tâche de fond comme silencieuse après), 10 minutes par défaut Ouvrez sa console pour voir les dernières lignes. Certaines étapes restent longtemps silencieuses ; augmentez le réglage, ou arrêtez la tâche avec Stop si elle est bloquée. Tâches silencieuses
La console d’une commande indique This session did not report an output file for this task. (Cette session n’a signalé aucun fichier de sortie pour cette tâche.) Une session dont l’agent a démarré avant la mise à jour vers 0.9.12, ou un shell sans Stop sur le moteur SDK de Copilot Pour le second cas, ☠️ Kill session sur une session inactive ; les commandes suivantes ont une console. Par fournisseur
Une console indique This task's output is no longer available. (La sortie de cette tâche n’est plus disponible.) La tâche s’est terminée il y a plus d’une heure, ou elle a tourné avant la mise à jour vers 0.9.13 et le relais a redémarré depuis Commandes terminées, Après un redémarrage du relais
Une console s’arrête à Output stops here: this command pipes into tail (La sortie s’arrête ici : cette commande est redirigée vers tail) Une commande redirigée vers tail n’écrit rien avant sa fin ; la sortie arrive alors Pour suivre une telle exécution en direct, faites-la écrire dans un fichier (> run.log 2>&1) et suivez ce fichier. Commandes redirigées vers tail
Après un redémarrage du relais, une console indique qu’elle attend son worker, sans Stop Le relais a gardé la sortie de la commande, mais seul son worker peut dire si elle tourne encore Attendez quelques secondes. Une commande dont le worker n’est pas revenu est marquée terminée au bout d’environ une minute et demie. Après un redémarrage du relais
En revenant à une longue conversation, vous ne retrouvez pas tous les anciens messages que vous aviez chargés Seuls Messages kept per conversation for switching back (Messages conservés par conversation pour y revenir), 200 par défaut, sont gardés autour de votre position, pour les huit dernières conversations Augmentez ce réglage dans Settings → General. Rechargement, changement, rotation
Une conversation refuse d’être supprimée ou archivée Un turn ou une tâche de fond tourne encore Supprimer
Une réponse en échec affiche un bouton Le relais connaît la solution Boutons sur une réponse en échec
Le relais s’est arrêté ou a redémarré, et son journal indique JavaScript heap out of memory Ajouté en 0.9.19 La mémoire du relais a atteint sa limite de heap Le relais redémarre de lui-même. Le relais a manqué de mémoire

Questions et approbations #

Ce que vous voyez Cause habituelle Solution
L’agent attend et rien ne se passe Une carte de question ou d’approbation est ouverte, peut-être sur un autre appareil. Un turn qui attend une carte n’est jamais considéré comme bloqué Répondez à la carte, ou appuyez sur Stop. Tant qu’une carte est ouverte
Une carte d’approbation ne prend pas votre réponse tapée Le texte tapé ne permet pas de dire oui Utilisez Allow (Autoriser) ou Deny (Refuser). Cartes d’approbation
La carte a disparu et l’agent a continué Personne n’a répondu en 8 heures (2 sur le moteur d’extension de Copilot), ou Stop l’a fermée Tant qu’une carte est ouverte
Le bouton d’envoi affiche Queue (Mettre en file) Une carte est ouverte ; le message part une fois que vous avez répondu Tant qu’une carte est ouverte
You are offline. Answer queued Pas de connexion au moment de votre réponse Répondre depuis ailleurs
Un agent Grok pose une question et aucune carte n’apparaît Grok n’a pas de cartes Répondez dans la zone de saisie. Grok
Un bouton de réponse manque dans une notification La question n’a pas de choix, ou ils sont trop longs Notifications

Des agents qui travaillent avec d’autres sessions et relais #

Ce que vous voyez Cause habituelle Solution
L’agent n’a pas d’outil pour les sessions, ou signale REMOTE_RELAY_SESSION_LIMIT, REMOTE_RELAY_NESTED_SESSION ou REMOTE_RELAY_PROVIDER_UNAVAILABLE L’interrupteur est désactivé, ou une limite s’applique Sessions d’agent
REMOTE_RELAY_LOCKED Vous n’avez pas mentionné le relais dans cette conversation Relais associés
Un relais affiche Offline (Hors ligne) ou Token not accepted (Token refusé) L’autre relais est arrêté, ou son token a changé Relais associés
Les agents d’un autre relais ne peuvent pas envoyer de prompts ici (REMOTE_INBOUND_DISABLED) Accept prompts from other relays' agents (Accepter les prompts des agents d’autres relais) est désactivé Relais associés
La surveillance d’une session sur un relais associé indique qu’il faut une mise à jour L’autre relais exécute une version plus ancienne d’OAR Sessions sur un relais associé
REMOTE_RELAY_UNKNOWN_MODEL L’agent a nommé un modèle que le relais cible ne liste pas pour le fournisseur, par exemple gpt-5-4 pour gpt-5.4 La réponse donne les correspondances proches et les ids valides. Quels modèles sont acceptés
Un agent qui surveille n’est plus réveillé quand une commande shell se termine Depuis 0.9.13, les événements par défaut omettent les commandes shell qui se sont bien terminées ; les échecs le réveillent toujours Abonnez-vous avec task_finished dans events. Les événements par défaut
Tout autre code REMOTE_… Erreurs

Fichiers, aperçus et partage #

Ce que vous voyez Cause habituelle Solution
File not found (Fichier introuvable) quand vous cliquez sur un chemin dans une réponse Un chemin absolu hors du workspace est lu comme un chemin du workspace Où mène un lien dans une réponse, Ce que la visionneuse peut ouvrir
Un lien de fichier échoue ou un fichier ne s’ouvre pas Le fichier est hors de ce que la visionneuse peut lire Ce que la visionneuse peut ouvrir
Un dossier de l’explorateur de fichiers s’ouvre vide Le relais ne peut pas le lire Limites
L’agent devrait faire un commit, annuler ou pousser, mais Git changes (Modifications Git) n’a pas de bouton Cette vue ne fait qu’afficher les modifications Ce qu’elle ne fait pas
Un lien d’aperçu ne s’ouvre pas, affiche No such preview ou Preview upstream unreachable, ou la page est vide La lane est désactivée, le serveur de dev s’est arrêté, ou l’app écrit des chemins absolus Aperçus
Preview lane is disabled ou Preview lane failed its startup checks La lane est désactivée ou une vérification a échoué Quand la lane refuse de démarrer
Too many live previews (max 8) La limite Aperçus
Un lien partagé demande au lecteur de se connecter, affiche un ancien état, ou ne peut être ouvert par personne d’autre Cloudflare Access, une règle de cache, ou un relais qui n’écoute que sur cette machine Joindre le relais
Un lien partagé répond 404 Le partage a été arrêté, le lien renouvelé, ou la conversation supprimée Settings → Sharing (Réglages → Partage) liste les liens qui fonctionnent. Vos liens partagés
Un chemin apparaît encore dans une vue partagée Un chemin relatif, ou un chemin dans une image Chemins et noms de fichiers
Un aperçu apparaît comme non servi dans Settings → Previews (Réglages → Aperçus) Le relais n’a pas pu le vérifier à son démarrage Il est revérifié toutes les 15 secondes. Les aperçus après un redémarrage

Les notifications et l’app installée #

Ce que vous voyez Cause habituelle Solution
L’interrupteur des notifications est grisé La page n’est pas en HTTPS ni sur localhost Notifications
Les notifications ont cessé, ou n’arrivent que sur un appareil Bloquées dans le navigateur, appareil désactivé, ou un autre appareil a OAR ouvert au premier plan Notifications
Le navigateur ne propose pas d’installation Le relais n’est pas en HTTPS ni sur localhost Ce qu’il lui faut
L’app affiche Enter your access token to connect (Saisissez votre token d’accès pour vous connecter) Pas de connexion valide dans l’app Se connecter dans l’app
Suspend host (Mettre l’hôte en veille) manque ou ne fait rien Son réglage est désactivé, le relais n’est pas sous Windows, ou quelque chose tourne encore Mettre l’hôte en veille

Mises à jour #

Ce que vous voyez Cause habituelle Solution
Update (Mettre à jour) manque, ou la vérification ne trouve rien Un checkout git, une version ignorée, ou aucune version plus récente connue Si ça ne marche pas
Check for updates (Rechercher des mises à jour) est grisé OAR_NO_UPDATE_CHECK est défini sur le relais Si ça ne marche pas
oar update se termine avec le code 1 et Could not fetch …, ou renvoie à --to Le manifeste ne peut pas être récupéré, ou la vérification est désactivée oar update --to X.Y.Z fonctionne toujours. Si ça ne marche pas
oar update --to=0.9.2 installe la version la plus récente --to= est ignoré Écrivez --to 0.9.2 avec une espace. oar update
Une mise à jour échoue avec EACCES npm ne peut pas écrire dans le dossier du paquet Si ça ne marche pas
L’ancienne version tourne encore après une mise à jour Le redémarrage attend la fin des turns en cours, ou la mise à jour ne s’est pas appliquée Le redémarrage attend, Si ça ne marche pas
L’app installée affiche une ancienne page Elle passe à la nouvelle version à son démarrage Mises à jour

Le relais a manqué de mémoire Ajouté en 0.9.19 #

Le relais démarre avec une limite de heap fixe : 60 % de la RAM de la machine, par pas de 64 Mo, au moins 2 048 Mo et au plus 8 192 Mo, et jamais en dessous de la valeur par défaut de Node.js, mais jamais au-dessus de la mémoire disponible. Dans un conteneur doté d’une limite de mémoire, c’est cette limite qui compte à la place de la RAM. Sur une machine de 4 Go, cela fait environ 2,3 Go. Chaque démarrage inscrit la limite et son origine dans le journal :

[relay] heap limit 2368 MB (default: 60% of 3.9 GB RAM)

Au démarrage puis toutes les 10 minutes, le journal reçoit une ligne comme [relay] memory rss=812 heapUsed=640 heapLimit=2560, et une ligne [relay] memory high: … de plus quand le heap utilisé dépasse 80 % de la limite.

Quand le relais manque de mémoire, il redémarre de lui-même, comme après tout plantage : jusqu’à 2 fois de suite, et le 3ᵉ plantage d’affilée l’arrête avec le code de sortie 1, après quoi le service systemd de Linux le redémarre. Une exécution de 10 minutes ou plus remet le compte à zéro. Avant 0.9.19, un relais à court de mémoire restait arrêté. Après une mise à jour depuis une version antérieure, la limite de heap et ce redémarrage ne fonctionnent qu’une fois oar lui-même arrêté puis redémarré (Notes de mise à niveau pour 0.9.19).

Pour fixer la limite vous-même, mettez heapLimitMb (en Mo entiers, au moins 512) dans config.json et redémarrez le relais. Un --max-old-space-size dans NODE_OPTIONS, ou sur la ligne de commande node qui démarre server.js, l’emporte sur heapLimitMb. Contrairement à heapLimitMb, un NODE_OPTIONS défini dans un shell est perdu quand autre chose redémarre le relais.

L’instantané du heap #

Quand le heap approche de sa limite, Node.js écrit un instantané du heap (Heap.<date>.<time>.<pid>.….heapsnapshot) dans le dossier diagnostics du dossier de données du relais (Fichiers et dossiers). Le relais crée ce dossier et inscrit son chemin dans le journal au démarrage ; sous Linux et macOS, vous seul pouvez l’ouvrir.

  • Disque : un instantané fait à peu près la taille du heap utilisé, donc jusqu’à la limite. Quand le lecteur du dossier de données a moins de deux fois la limite de heap de libre, le relais démarre sans instantané et indique pourquoi dans le journal.
  • Mémoire : l’écrire peut demander jusqu’à environ deux fois le heap utilisé, et le relais ne répond pas pendant l’écriture. Sur une petite machine, l’écriture peut échouer ou faire terminer le processus ; le relais s’arrête alors comme il l’aurait fait sans instantané.
  • Le lire : copiez-le hors de la machine, ouvrez-le dans Chrome DevTools, sous Memory → Load (Mémoire → Charger), et triez par Retained size (taille retenue) pour voir ce qui occupe la mémoire. Un instantané d’une exécution antérieure saine montre ce qui a grossi.

Un instantané contient vos secrets

Un instantané du heap contient tout ce qui était dans la mémoire du relais, y compris le token d’accès et les clés d’API des fournisseurs. Ne le partagez jamais tel quel, et supprimez-le une fois lu : le relais ne supprime jamais les instantanés.

Signaler un problème #

Si rien de ce qui précède ne vous aide, ouvrez une issue sur github.com/oar-sh/oar/issues. Joignez :

  • la sortie de oar --version ;
  • la sortie de oar doctor, et celle de oar status ;
  • ce que vous avez fait, ce que vous attendiez et ce qui s’est passé, avec le message exact ;
  • les lignes pertinentes du journal qui correspond au problème (Journaux), pas le fichier entier.

Retirez d’abord les secrets

Avant de publier, retirez les tokens d’accès (y compris la partie ?token= d’une adresse), les clés d’API et les tokens de tunnel, et remplacez les chemins personnels, les noms d’hôte et les noms de compte. L’issue est publique.