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
oar statusindique si le relais répond. Comparez ses premières lignes au tableau ci-dessous.oar doctoraffiche 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.- 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.
- Lisez le journal qui correspond au problème (Journaux).
- 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. localhost 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/, 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- 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- ; voir État et journaux |
| Tout ce qu’a fait le relais : aperçus, tunnels, mises à jour, redémarrages | relay-. 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>., le worker de cette conversation. Le moteur d’extension Copilot n’en a pas ; voir ext- 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 reconnectset 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- é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- précompilé pour votre plateforme |
Installation |
Le relais ne démarre pas après une installation avec npm 12, avec une erreur better- |
npm 12 a sauté les scripts d’installation | Réinstallez avec --allow-, jamais avec --ignore-. Installation. L’erreur se trouve dans server- 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 …/ |
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., -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é . 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 trust, 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- 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 allowed. allowed |
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 | Open, la découverte des modèles a échoué, Open |
OpenAI |
| Claude | Absent de New Chat (Nouveau chat), Not logged in, une réponse qui renvoie à la facturation, Ajouté en 0.9.18 relay. |
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. ou par Start on subscription (Démarrer sur l’abonnement) dans New Chat, la clé n’est pas acceptée (relay.), le crédit ou la limite de dépenses du compte (relay., relay.), 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.), la clé n’est pas acceptée (relay.), trop de requêtes à la fois (relay.) ; les autres échecs s’affichent sous la forme relay., par exemple relay. |
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>. 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.) 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_, REMOTE_ ou REMOTE_ |
L’interrupteur est désactivé, ou une limite s’applique | Sessions d’agent |
REMOTE_ |
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_) |
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_ |
L’agent a nommé un modèle que le relais cible ne liste pas pour le fournisseur, par exemple gpt- pour gpt- |
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_ 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_ 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. fonctionne toujours. Si ça ne marche pas |
oar update --to= installe la version la plus récente |
--to= est ignoré |
Écrivez --to 0. 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=, 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 heap (en Mo entiers, au moins 512) dans config. et redémarrez le relais. Un --max- dans NODE_, ou sur la ligne de commande node qui démarre server., l’emporte sur heap. Contrairement à heap, un NODE_ 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>.) 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 deoar 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.