Toutes les pages
Sur cette page

La commande oar

oar est la ligne de commande de la machine du relais. Elle écrit la config, démarre et arrête le relais, affiche l’adresse à ouvrir dans un navigateur, installe le service de démarrage à l’ouverture de session, met à jour OAR, vérifie l’installation et la supprime. Elle agit sur l’installation depuis laquelle elle a été lancée, sur la machine où elle tourne ; elle ne parle pas à un relais situé sur une autre machine.

Lancez oar sans rien derrière pour obtenir un menu, ou oar help pour le texte d’aide. L’installation d’OAR est décrite dans Installation, le premier démarrage dans Premier lancement.

Les commandes #

Commande Ce qu’elle fait
oar Un menu dans un terminal ; ailleurs, l’état et le texte d’aide
oar setup Écrit la config : token d’auth, accès (cette machine ou LAN) et port ; sous Windows, aussi le mode de démarrage automatique
oar start Démarre le relais en arrière-plan
oar stop Arrête le relais dès qu’aucun turn ne tourne
oar restart Redémarre un relais en marche, ou démarre un relais arrêté
oar status Indique si le relais tourne ; code de sortie 0 ou 3
oar url Affiche l’adresse du relais avec le token, et un QR code là où un téléphone peut l’utiliser
oar update Installe la version la plus récente, ou celle que vous indiquez, et redémarre le relais
oar service Installe, supprime ou décrit le service de démarrage à l’ouverture de session
oar autostart Ajouté en 0.9.15 Change la façon dont le relais démarre tout seul : à l’ouverture de session, au démarrage, ou pas du tout
oar uninstall Ajouté en 0.9.15 Supprime les entrées de démarrage automatique et le paquet ; les données restent, sauf si vous ajoutez --purge
oar copilot Démarre le relais et une session GitHub Copilot dans le terminal
oar doctor Affiche l’installation, la config et les CLI de fournisseurs qu’elle trouve
oar help Affiche le texte d’aide
oar version Affiche la version

La plupart des messages commencent par [oar]. Les erreurs vont sur la sortie d’erreur standard, la sortie normale sur la sortie standard.

Comment la ligne de commande est lue #

  • La commande est le premier mot qui n’est pas une option. Des options peuvent la précéder : oar --port 3400 setup équivaut à oar setup --port 3400.
  • --port, --migrate-from, --to et --autostart prennent une valeur, comme mot suivant ou sous la forme --port=3400. Sans valeur, oar affiche --port needs a value. et sort avec le code 2. Pour oar update --to et oar copilot --migrate-from, utilisez la forme séparée par une espace ; voir les remarques sous ces commandes.
  • --help ou -h avant un -- affiche le texte d’aide et sort avec le code 0, quoi qu’il y ait d’autre sur la ligne.
  • --setup, --start, --stop et --status désignent une commande quand aucune autre n’est donnée : oar --setup --start équivaut à oar setup --start.
  • --install-extension, --no-install-extension, --migrate-from ou une partie -- sans commande signifient oar copilot. --version ou -v sans commande affichent la version.
  • Chaque commande n’accepte que ses propres options et affiche le texte d’aide après l’un de ces messages (sur la sortie d’erreur standard), code de sortie 2 :
[oar] Unknown command: backup
[oar] Unknown option: --verbose
[oar] Unknown option for oar start: --port
[oar] Unexpected argument: extra
[oar] --lan needs a command.
[oar] oar start takes no "--" part.

Seule oar copilot accepte une partie --.

Dans un terminal, oar affiche la version, si le relais tourne, l’URL (sans le token), le port, l’accès, l’état du service et un éventuel avertissement, puis ces entrées :

Touche Entrée Lance
1 Start (Démarrer) oar start
2 Stop (Arrêter) oar stop
3 Restart (Redémarrer) oar restart
4 Show URL and QR code (Afficher l’URL et le QR code) oar url
5 Settings (Réglages) oar setup, avec ses questions
6 Install or remove the service (Installer ou supprimer le service) oar service install quand aucun service n’est installé ; oar service remove après Remove the service? [y/N] quand il y en a un ; oar service status là où aucun service n’est disponible
7 Update (Mettre à jour) oar update. Après une mise à jour réussie, le menu se ferme, car ses propres fichiers ont été remplacés
8 Doctor oar doctor
9 Copilot session (Session Copilot) oar copilot
q Quit (Quitter)

Déplacez-vous avec les flèches (ou j et k) et appuyez sur Enter, ou tapez un chiffre ou q. Une fois une entrée exécutée, n’importe quelle touche ramène au menu. Ctrl+C dans une question ramène au menu ; dans le menu, il termine oar avec le code de sortie 130. La variable d’environnement NO_COLOR désactive les couleurs. Un terminal qui ne sait pas lire des touches isolées reçoit la même liste avec l’invite Choose (1-9, q):.

Quand l’entrée ou la sortie standard n’est pas un terminal, oar affiche ce qu’affiche oar status, une ligne vide et le texte d’aide, et sort avec le code 0 quel que soit l’état.

oar setup #

oar setup [--port <port>] [--lan | --local] [--new-token] [--autostart signin|boot|off] [--defaults] [--start] [--migrate-from <dir>]

Écrit config.json dans le dossier d’état d’OAR (Où oar garde ses fichiers ; les clés sont décrites dans config.json). Lancez-la après l’installation et chaque fois que vous voulez un autre port, un autre accès ou un autre token. Les réglages que la commande ne touche pas restent tels quels dans une config existante.

Dans un terminal, et quand vous ne passez aucune des options --port, --lan, --local, --new-token, --autostart ou --defaults, elle pose trois questions et affiche la valeur actuelle entre crochets ; Enter la conserve. Ajouté en 0.9.15 Sous Windows, une quatrième demande comment le relais démarre, avec le mode en vigueur comme valeur par défaut ; elle est omise quand la tâche de démarrage ne peut pas être lue. Premier lancement les parcourt une à une.

New auth token? It signs every device out. [y/N]
Access: 1 = this machine only, 2 = LAN (other devices on your network) [1]:
Port [3333]:
Autostart: 1 = at sign-in, 2 = at boot, before anyone signs in (one administrator prompt), 3 = off [3]:
Option Valeur Par défaut Effet
--port des chiffres, de 1 à 65535 le port de la config ; pour une nouvelle config, le premier port libre à partir de 3333 (sur 20 essayés, sinon 3333) Définit le port sans poser la question. Un port qu’un autre programme occupe est refusé
--lan aucune l’accès de la config Accès pour les autres appareils de votre réseau (localhostOnly: false). Pas en même temps que --local
--local aucune l’accès de la config ; this machine only (cette machine uniquement) pour une nouvelle config Accès pour cette machine uniquement
--new-token aucune garder le token ; une nouvelle config en reçoit un aléatoire Écrit un nouveau token d’auth. Cela déconnecte tous les appareils
--autostart signin, boot ou off le mode en vigueur Ajouté en 0.9.15 Change le démarrage automatique sans poser la question, comme le fait oar autostart : sous Windows, l’entrée d’ouverture de session ou la tâche de démarrage (une invite administrateur), sous Linux, le service. Installations globales uniquement : un checkout git est refusé et rien n’est écrit
--defaults aucune désactivé Ne pose aucune question, même dans un terminal, et redémarre un relais en marche sans demander
--start aucune désactivé Installations globales uniquement (l’installateur l’utilise). Là où une session utilisateur systemd existe, écrit aussi l’unité de service ; démarre ensuite le relais, via le service s’il y en a un. Ignoré dans un checkout git
--migrate-from un dossier aucun Copie l’état d’un checkout git datant d’avant le renommage du projet (<folder>/server) dans le dossier d’état d’OAR. La source n’est jamais modifiée. Un relais qui tourne encore depuis elle bloque la copie. Installations globales uniquement. L’option s’exécute chaque fois que vous indiquez un dossier : un dossier déjà repris dont la base de données est toujours là affiche seulement <state folder> is already migrated from <folder>; nothing to do. ; un dossier sans rien à reprendre est une erreur (Nothing to migrate from <folder>: <reason>.) ; un dossier d’état dont la base contient déjà des conversations le refuse, et rien n’est écrasé. Voir Fichiers et dossiers

Un port est libre quand rien n’y répond et qu’il peut être ouvert sur cette machine. Le port du relais en marche de cette installation compte comme libre. Dans WSL, un port que Windows occupe est refusé aussi. Pour une nouvelle config dont le port 3333 est pris, setup affiche Port 3333 is in use — using <port>. Une installation globale reprend aussi, une seule fois, l’état de l’ancien dossier de config géré, sans l’option.

Ce qu’elle fait :

  1. Migre l’ancien état (installations globales) : l’ancien dossier de config géré, une fois et d’elle-même, ou le dossier que nomme --migrate-from. [oar] Migrated <folder or "earlier relay state"> into <state folder> (<n> items, sources untouched; receipt in backups/MIGRATION.md).
  2. Écrit config.json (permission 600 hors Windows) et affiche [oar] Wrote <path>. Une nouvelle config contient authToken, port, localhostOnly, pollIntervalMs (3000), processingTimeoutMs (600000) et conversationSessionMode (isolated).
  3. Ajouté en 0.9.15 Change le démarrage automatique, comme l’indiquent --autostart ou la question (installations globales). Elle lance oar autostart avec ce mode et affiche ses lignes.
  4. Si le relais tourne et que le token, le port ou l’accès a changé, elle redémarre le relais et attend qu’il réponde avec les nouveaux réglages. Dans un terminal, elle demande The relay is running. Restart it now to apply the change? [Y/n] ; sur non, elle affiche The running relay keeps its earlier settings until it restarts: oar restart. Sans terminal, elle redémarre sans demander.
  5. Affiche l’URL du relais avec le token, et un QR code quand un téléphone peut joindre l’adresse (accès LAN avec une adresse réseau qui n’est pas interne à WSL). Si l’étape de démarrage automatique n’a pas abouti, elle affiche ensuite The config is written; the autostart step did not go through (see above). et sort avec le code 1.
  6. Quand le relais ne tourne pas, indique comment le démarrer : oar start (avec une indication sur oar service install quand aucun service n’existe) ; dans un checkout git, npm start.
Code de sortie Quand
0 La config est écrite, et le redémarrage ou le démarrage demandé a fonctionné
1 Le port est pris ; le relais n’a pas redémarré ou n’a pas démarré ; la migration est refusée ou échoue (un relais qui tourne depuis la source ou sur le dossier d’état, une base de données qui contient déjà des conversations, rien à migrer depuis le dossier indiqué) ; l’étape de démarrage automatique n’a pas abouti ; --autostart dans un checkout git
2 --port n’est pas un nombre de 1 à 65535 (--port expects a number from 1 to 65535.), --autostart ne vaut pas signin, boot ou off (--autostart expects signin, boot or off.), ou --lan et --local sont donnés tous les deux
130 Ctrl+C dans une question

oar start #

oar start

Démarre le relais en arrière-plan et affiche l’URL du relais (avec le token, sans QR code). Elle n’a pas d’options. Elle a besoin d’une config : sans config, elle affiche No config yet — run: oar setup. Un checkout git est refusé (This is a git checkout — start the relay with: npm start). Les deux cas sortent avec le code 1.

  • Un relais qui répond déjà est laissé tel quel : The relay is already running. It keeps the version and settings it started with until you restart it: oar restart.
  • Si le relais tourne avec des réglages datant d’avant un oar setup, oar start le signale et renvoie vers oar restart.
  • Avec un service utilisateur systemd installé (Linux), le service est activé et démarré. Sinon, le relais démarre comme processus d’arrière-plan qui survit au terminal et écrit server.log et server-err.log dans le dossier des journaux. Après un redémarrage de la machine, relancez oar start, ou mettez en place le démarrage à l’ouverture de session.
  • Elle attend jusqu’à 20 secondes que le relais réponde, et cesse d’attendre plus tôt quand le processus qu’elle a lancé se termine. Ensuite : The relay did not come up — see <log folder>/server-err.log (via le service : see journalctl --user -u oar). Ajouté en 0.9.14 Quand un relais actif détient le verrou, une seconde ligne nomme le verrou et dit quoi faire : The lock <path> is held by relay process <pid> (started <time>): oar stop, or end process <pid>. Quand le verrou nomme un processus dont on ne peut pas établir qu’il s’agit d’un relais : The lock <path> names process <pid>, which cannot be told to be a relay: if no relay is running, end process <pid> or delete the lock.
  • Ajouté en 0.9.14 Un relais encore en train de reprendre la base de données sur laquelle il tournait jusqu’ici (le premier démarrage après la mise à jour vers 0.9.14) n’est pas compté comme en échec : oar start affiche The relay (process <pid>) is bringing over the database it ran on until now (…) and is still running; it answers once that is done. et nomme son journal.
  • Un verrou dont le relais est encore en train de démarrer est attendu, jusqu’à 5 secondes. Un verrou d’une version antérieure dont le relais ne répond pas est supprimé (Removing a leftover relay lock) ; Ajouté en 0.9.14 un verrou écrit par cette version est laissé au relais, qui reconnaît lui-même un verrou périmé (voir Un relais par dossier de données).
  • Un port qu’un autre programme occupe, ou un relais avec un autre token : Port <port> is in use by another program, or by a relay with another token. et une indication pour choisir un autre port avec oar setup --port <port>.
  • Dans WSL, elle avertit quand Windows occupe le port (WSL).

Code de sortie 0 : le relais tourne, ou reprend encore sa base de données. Code de sortie 1 : pas de config, un checkout git, le port est pris, ou le relais n’a pas démarré.

oar stop #

oar stop

Pas d’options ; a besoin d’une config (code 1 sans config).

  • Quand le service systemd tourne, elle lance immédiatement systemctl --user stop oar et affiche The relay service is stopped. It starts again at the next boot (without lingering: at the next login); to take it out: oar service remove.
  • Tout autre relais est prié de s’arrêter via sa propre interface et s’arrête dès qu’aucun turn ne tourne. Si des turns tournent, Waiting for the relay's running turns to finish … s’affiche. oar stop attend jusqu’à 30 secondes, puis affiche The relay is stopped., ou The relay is still busy; it stops by itself when its running turns finish. Les deux cas sortent avec le code 0.
  • Aucun relais en marche : The relay is not running., code 0.
  • Port occupé par autre chose : Port <port> is in use by another program, or by a relay with another token., code 1. Si le fichier de verrou nomme un processus actif de cette installation, une seconde ligne donne son ID de processus et vous dit de le redémarrer depuis son interface web, avec ⋯ → Restart web relay (⋯ → Redémarrer le relais web), ou de terminer ce processus.
  • The relay did not accept the stop request. ou un systemctl en échec : code 1.

Sous Windows, et là où le service est installé mais ne tourne pas, le relais est arrêté via sa propre interface. Voir Redémarrer le relais pour ce qu’un arrêt fait aux turns en cours.

oar restart #

oar restart

Redémarre un relais en marche pour qu’il charge une nouvelle version et relise la config, puis affiche l’URL du relais. Un relais arrêté est démarré à la place, comme avec oar start. Pas d’options ; a besoin d’une config.

  • Quand le service systemd tourne, systemd le redémarre immédiatement ; un turn en cours prend fin (Redémarrer le relais).
  • Tout autre relais est prié de redémarrer et attend ses turns en cours. La commande attend jusqu’à 60 secondes que le relais réponde sur le port de la config avec le token de la config, puis affiche The relay restarted. Si des turns tournent encore : The relay is still busy; it restarts by itself when its running turns finish., code 0. Ajouté en 0.9.13 Le redémarrage est mis en file comme avec 🌄 Restart web relay : les navigateurs affichent sa bannière, et après le délai Ask after a queued relay restart has waited (Demander quand un redémarrage du relais en file a attendu), il y demande s’il faut redémarrer maintenant, continuer d’attendre ou annuler (Le redémarrage attend).
  • Code 1 avec The relay came back on its earlier port and token: it was started with fixed ones (oar copilot). End that session, then run: oar start : un relais démarré par oar copilot garde le port et le token qu’on lui a donnés.
  • Code 1 avec The relay did not accept the restart request. Restart it from the web UI (⋯ → Restart web relay). (Restart web relay), systemctl --user restart oar failed, ou The relay did not come back — see <log folder>/server-err.log (via le service : see journalctl --user -u oar).
  • Un port occupé par autre chose : le message d’oar stop, code 1.

oar status #

oar status

Affiche l’état du relais et sort avec un code qu’un script peut tester.

[oar] OAR 0.9.19
[oar] The relay is running on port 3333 (this machine only): http://localhost:3333/
[oar] Service: installed, running
Ligne Signification
Not set up yet — run: oar setup Pas de config ; seule la ligne de version la précède
The relay is running on port <port> (<access>): <url> Le relais répond avec le token de la config. L’accès vaut LAN access (accès LAN) ou this machine only. L’URL n’a pas de token ; oar url l’affiche
The relay is stopped (port <port>, <access>). Start it with: oar start Rien ne répond sur le port
Port <port> is in use by another program, or by a relay with another token. Quelque chose répond, mais ce n’est pas ce relais avec ce token
Service: <state> installed, running (installé, en cours d’exécution), installed ou not installed (non installé). Ligne omise là où il n’y a rien à signaler : un checkout git, macOS, un Linux sans session utilisateur systemd
Tunnel: <state> Seulement quand le tunnel Cloudflare intégré est activé dans la config. Pour un relais en marche : running, not connected, not connected (<reason>) ou off: <reason>. Sinon managed (cloudflared: <path>) ou managed, cannot start: <reason>
un avertissement The relay runs with its earlier settings; restart it to apply the new ones. après un oar setup qui a changé le port ou le token ; dans WSL, que Windows occupe le port

Code de sortie 0 : le relais tourne. Code de sortie 3 : il est arrêté, le port est occupé par autre chose, ou il n’y a pas de config.

oar url #

oar url

Affiche l’adresse à ouvrir dans un navigateur, avec le token d’auth, de la même façon que se termine oar setup. Pas d’options ; a besoin d’une config (code 1 sans config). Sinon, code 0.

[oar] Relay URL: http://localhost:3333/?token=...
[oar] This machine only. For a phone, switch on LAN access (oar setup --lan) or use a tunnel (README: Remote access).
  • Avec l’accès LAN, l’adresse est la première adresse IPv4 non interne de la machine, et un QR code pour elle suit la première ligne.
  • Avec l’accès LAN mais sans adresse réseau : LAN access is on, but this machine has no network address. Dans le réseau par défaut de WSL (NAT), l’adresse est interne à WSL ; la sortie le dit et propose un tunnel ou le réseau en miroir comme solutions. Pas de QR code dans ces cas.
  • Quand le relais en marche signale une adresse de tunnel, une ligne Tunnel URL: suit, avec le token ajouté, et un QR code pour elle.
  • Une dernière ligne affiche The relay is not running. Start it with: oar start, ou, après un changement de réglage, que le relais tourne avec ses anciens réglages jusqu’à oar restart.

oar update #

oar update [--beta] [--to <version>]

Installe une version plus récente d’OAR depuis npm et demande à un relais en marche de redémarrer. C’est le pendant en terminal du bouton Update dans Settings → General (Réglages → Général) (Mettre à jour OAR). Un checkout git affiche This install runs from a git checkout — update with git pull, then restart the relay. et sort avec le code 1.

Option Valeur Par défaut Effet
--beta aucune désactivé Prend la version du canal beta dans le manifeste de mise à jour (Canaux). Sans elle, une version beta suit le canal beta et toute autre suit stable. Un canal sans version se rabat sur stable
--to X.Y.Z, éventuellement avec une préversion (X.Y.Z-beta.N) la plus récente du canal Installe exactement cette version, directement depuis npm, sans le manifeste. Les versions plus anciennes marchent aussi ; elle ne compare pas avec la version en marche

Écrivez --to avec une espace

--to 0.9.2 fonctionne. --to=0.9.2 passe la vérification de la ligne de commande mais est ignoré : oar update installe alors la version la plus récente du canal.

Ce qu’elle fait :

  1. Sans --to, récupère https://oar.sh/latest.json (5 secondes), à chaque exécution, que la vérification automatique soit activée ou non dans l’interface web.
  2. Si la version du canal n’est pas plus récente que celle en marche : Already up to date (<version>)., code 0.
  3. Affiche Updating @oar-sh/oar <old> -> <new> ... et lance npm install -g @oar-sh/oar@<version>, avec l’option qui autorise l’exécution des scripts d’installation d’OAR et de ses dépendances natives. Hors Windows, elle lance le npm situé à côté du Node.js qui exécute oar, dans le préfixe où se trouve le paquet ; sous Windows, npm.cmd. npm affiche sa propre sortie ; puis Installed @oar-sh/oar@<version>.
  4. Si un relais tourne, lui demande de redémarrer une fois la queue inactive (Relay restart requested — it restarts once the queue is idle.) ; s’il n’y en a pas, No running relay detected — the update loads on the next start. Un refus affiche Could not request a relay restart; restart it manually to load the update.

Code de sortie 0 : installé, ou déjà à jour. Code de sortie 1 : un checkout git ; --to n’est pas une version comme 0.9.2 ; le manifeste ne peut pas être récupéré (Could not fetch <url>.), a un autre schemaVersion que 1, ou ne contient aucune version utilisable ; npm install a échoué (the running install is unchanged).

Variable Effet
OAR_NO_UPDATE_CHECK=1 Bloque la requête du manifeste. oar update sort alors avec le code 1 et renvoie vers oar update --to X.Y.Z, qui fonctionne toujours
OAR_UPDATE_MANIFEST_URL Lit le manifeste depuis cette URL à la place

oar service #

oar service [install | remove | status]

Démarre le relais à chaque ouverture de session. oar service seul équivaut à oar service status. Un checkout git est refusé (code 1). La page Démarrer le relais automatiquement explique le service du point de vue du propriétaire.

Linux #

Une unité systemd utilisateur, oar.service, dans ~/.config/systemd/user/. Elle exécute le relais avec les dossiers de config, de données et de journaux de cette installation et le PATH de votre shell, plus ~/.local/bin et le dossier du Node.js utilisé. systemd la redémarre 5 secondes après un plantage.

Mot Ce qu’il fait
install A besoin d’une config. Écrit l’unité ; lance loginctl enable-linger pour que le relais survive à une déconnexion (en cas d’échec, affiche la commande à lancer vous-même) ; recharge systemd ; arrête un relais lancé à la main pour que le service puisse prendre le port ; active et démarre le service. Si ce relais ne s’arrête pas, le service est activé et prend la relève au prochain démarrage (sans lingering, à la prochaine ouverture de session), ou une fois ce relais arrêté, quand vous lancez oar start
remove Désactive et arrête le service, supprime l’unité, recharge systemd. The service is not installed. s’il n’y en a pas
status Service: installed, running, installed, not running ou not installed

Sans session utilisateur systemd, la commande le signale et sort avec le code 1. Dans WSL, le message ajoute comment activer systemd : systemd=true sous [boot] dans /etc/wsl.conf, puis wsl --terminate <distro> depuis Windows.

Windows #

Une entrée dans votre dossier Démarrage lance le relais quand vous ouvrez une session.

Mot Ce qu’il fait
install A besoin d’une config. Active le démarrage à l’ouverture de session ; ne démarre pas le relais tout de suite (Start it now with: oar start)
remove Le désactive : Autostart is off. A running relay keeps running; stop it with: oar stop
status Autostart: on, at sign-in, on, at boot (scheduled task) ou off

Un lancement au démarrage de la machine via une tâche planifiée se met en place avec oar autostart boot ou dans l’interface web sous Settings → General → Autostart (Windows) (Réglages → Général → Démarrage automatique sous Windows) (Windows). Tant que cette tâche est prête, install et remove refusent (code 1) avec The relay starts at boot through a scheduled task. Change that with oar autostart signin|off, or in the web UI: Settings → General → Autostart (Windows). ; status la signale.

macOS #

The service is not supported on macOS yet. Start the relay with: oar start, code 1 pour chaque mot.

Code de sortie 0 : fait, ou status. Code de sortie 1 : un checkout git, macOS, pas de session utilisateur systemd, pas de config pour install, une tâche de démarrage planifiée sous Windows, ou le relais n’a pas démarré après install. Code de sortie 2 : un mot autre que les trois, ou un second mot.

oar autostart Ajouté en 0.9.15 #

oar autostart [signin | boot | off | status] [--replace]

Change la façon dont le relais de cette installation démarre tout seul. oar autostart seul équivaut à oar autostart status. Un checkout git est refusé (This is a git checkout — autostart is for global installs., code 1). signin et boot ont besoin d’une config ; off et status, non. Démarrage automatique explique les modes du point de vue du propriétaire.

Windows #

Mot Ce qu’il fait
signin Écrit l’entrée dans votre dossier Démarrage, et supprime la tâche de démarrage s’il y en a une (une invite administrateur). Affiche The relay starts when you sign in to Windows. Ne démarre pas le relais tout de suite
boot Enregistre la tâche planifiée oar-relay et son lanceur (une invite administrateur : Confirm the administrator prompt to register the boot task …), et supprime l’entrée d’ouverture de session. Affiche The relay starts at boot, before anyone signs in (scheduled task \oar-relay). Déjà en mode boot, elle ne change rien et ne déclenche aucune invite ; si le lanceur généré manque ou provient d’une version antérieure, elle enregistre de nouveau la tâche, avec une invite administrateur
off Supprime la tâche de démarrage (une invite administrateur) et l’entrée d’ouverture de session. Autostart is off. A running relay keeps running; stop it with: oar stop
status Le mode et chaque entrée, chacune marquée (generated by OAR) ou (hand-made) ; voir État

L’invite administrateur apparaît sur le bureau du PC lui-même et est attendue jusqu’à 2 minutes. Seul l’appel schtasks s’exécute avec élévation. Une invite refusée ne change rien (Nothing changed: the administrator prompt was declined.). Après un changement avec --replace, chaque copie est nommée : Kept a copy of <entry> as <copy>. Un changement qui a échoué après l’invite remet en place les tâches qu’il a supprimées, et sa ligne d’erreur se termine par Copies kept: ….

Seules les entrées générées par OAR sont supprimées ou écrasées. Tant qu’une entrée créée ou modifiée à la main resterait à côté du nouveau mode, ou serait remplacée par lui, rien ne change et l’entrée est nommée ; voir Entrées qu’OAR n’a pas créées.

Option Effet
--replace Remplace les entrées faites à la main par celles d’OAR. Elle garde d’abord une copie de chacune, sous la forme <name>.bak dans le dossier OAR : pour un lanceur, à côté de lui ; pour une tâche, son XML exporté (<task>.task.xml.bak) ; pour une entrée du dossier Démarrage, sa copie. Sans --replace, une entrée faite à la main n’est jamais modifiée

Une tâche de démarrage qui ne peut pas être lue, par exemple avec l’erreur Access is denied (Accès refusé), bloque tout changement, --replace compris : Nothing changed: the boot task could not be read (<reason>).

Linux et macOS #

Sous Linux, les mots correspondent à oar service : signin et boot lancent oar service install, off lance oar service remove, status lance oar service status. Avec le lingering, le service démarre au démarrage de la machine. Sous macOS : Autostart is not supported on macOS yet. Start the relay with: oar start, code 1.

Code de sortie 0 : fait, ou status. Code de sortie 1 : un checkout git, macOS, pas de config pour signin ou boot, une entrée faite à la main qui gêne, une invite administrateur refusée ou en échec, une tâche de démarrage illisible, ou une entrée d’ouverture de session qui ne peut pas être modifiée ; sous Linux, ceux d’oar service. Code de sortie 2 : un autre mot, un second mot, ou une autre option.

oar uninstall Ajouté en 0.9.15 #

oar uninstall [--purge]

Retire OAR de la machine et garde vos données. Un checkout git est refusé (This is a git checkout — there is no global package to uninstall., code 1). Avec --purge, elle pose d’abord ses questions (ci-dessous) ; puis, dans l’ordre :

  1. Arrête le relais, comme le fait oar stop : elle attend les turns en cours. Un relais encore occupé ensuite met fin à la commande (The relay finishes its running turns first; it stops by itself after them.), et rien d’autre n’est modifié. Un relais qui détient son verrou sans répondre, pendant qu’il reprend une base de données ou démarre, y met fin aussi : The relay (process <pid>) is bringing over its database and does not answer yet; once oar status says it runs, run oar uninstall again., ou A relay (process <pid>) holds <lock> without answering; stop it (oar stop, or end process <pid>).
  2. Supprime les entrées de démarrage automatique qu’OAR a générées pour cette installation : sous Windows, la tâche de démarrage (une invite administrateur) avec son lanceur et son XML de tâche, et l’entrée d’ouverture de session ; sous Linux, l’unité systemd, si c’est celle qu’a écrite oar service install. Puis le wrapper de l’extension Copilot dans ~/.copilot/extensions/web-relay/ qu’OAR a écrit pour cette installation. Une entrée ou un wrapper créé ou modifié à la main, ou appartenant à une autre installation, reste en place et est nommé (Left as it is: <path> (hand-made)).
  3. Avec --purge, supprime les données (ci-dessous).
  4. Lance npm uninstall -g @oar-sh/oar en arrière-plan, avec le npm situé à côté du Node.js qui exécute oar et dans le préfixe où se trouve le paquet (sous Windows, npm.cmd). npm ne peut pas supprimer un paquet pendant qu’il tourne : cette étape attend donc que oar soit terminée (jusqu’à 2 minutes), puis écrit le résultat de npm dans oar-uninstall.log : dans le dossier logs d’OAR, ou, avec --purge, dans le dossier temporaire.

Elle se termine par ce qu’elle a fait :

[oar] Done: stopped the relay.
[oar] Done: removed C:\Users\dev\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\oar-web-relay.cmd.
[oar] Your data stays in C:\Users\dev\AppData\Roaming\oar (config, database, uploads, logs). A later install picks it up again; delete the folder yourself if you no longer need it.
[oar] npm removes @oar-sh/oar once this command has ended (log: C:\Users\dev\AppData\Roaming\oar\logs\oar-uninstall.log).

Quand le dossier de données se trouve hors du dossier d’état, la ligne nomme les deux. Les workers de session continuent de tourner quand le relais s’arrête, et npm ne peut pas supprimer les fichiers qu’un programme en marche détient. Quand des programmes tournent encore depuis le paquet, la commande donne leurs ID de processus, et npm laisse leurs fichiers dans un dossier caché .oar-* à côté de l’emplacement du paquet ; le journal nomme ce dossier. Supprimez-le une fois qu’ils sont terminés, au plus tard après un redémarrage de la machine.

Si une étape échoue, la commande s’arrête avec la raison (par exemple Uninstall stopped: <reason>. ou The relay did not stop.), puis Done: … et Not done: the autostart entries; the package. (avec --purge, aussi the data), et Run oar uninstall again once that is sorted out. (avec --purge : oar uninstall --purge).

Option Effet
--purge Supprime aussi définitivement le dossier d’état : la config, la base de données avec toutes les conversations, les fichiers envoyés et les journaux. Elle affiche d’abord --purge deletes <folder> for good: …, puis vous demande de taper delete (Type "delete" to confirm: ) ; toute autre saisie y met fin avec Not confirmed. Nothing was changed. Ctrl+C, ou l’absence d’entrée à lire, y met fin avec le code de sortie 130, sans rien modifier

Avec --purge, certains dossiers reçoivent une question à part, [y/N], après le delete : le dossier d’état quand il se trouve dans un checkout git, rescued-package-data (des données qu’une version antérieure gardait dans son paquet), et un dossier de données hors du dossier d’état (dataDir dans la config, ou COPILOT_WEB_RELAY_DATA_DIR). Quoi que vous tapiez, --purge ne supprime rien dans un dossier d’état qui est la racine d’un lecteur ou d’un système de fichiers, votre dossier personnel ou un dossier au-dessus, un dossier système ou un dossier au-dessus d’un dossier système, un dossier situé dans le dossier Windows, un checkout git, ou un dossier qui ne contient ni config ni base de données OAR : --purge deletes nothing in <folder> (<reason>). Nothing was changed. Un dossier supplémentaire de ce genre n’est pas proposé (Not deleted, and not offered: …).

Code de sortie 0 : la suppression du paquet est lancée. Code de sortie 1 : un checkout git ; un dossier d’état que --purge refuse ; delete non tapé ; un relais qui ne s’est pas arrêté ou qui détient son verrou sans répondre ; une entrée de démarrage automatique qui n’a pas pu être supprimée (une invite refusée, une tâche de démarrage illisible) ; un dossier qui n’a pas pu être supprimé ; npm n’a pas pu être lancé (remove it yourself: npm uninstall -g @oar-sh/oar). Code de sortie 2 : une autre option. Code de sortie 130 : Ctrl+C à une question.

oar copilot #

oar copilot [--port <port>] [--install-extension] [--no-install-extension] [--migrate-from <dir>] [-- <gh copilot args>]

Démarre le relais si aucun ne répond, puis lance la CLI GitHub Copilot (gh copilot) dans votre terminal. Un relais qu’elle a démarré s’arrête quand la session se termine. GitHub Copilot explique quand l’utiliser. Les mêmes options sans le mot copilot la lancent aussi : oar -- <args>, oar --install-extension, oar --port 3400 --no-install-extension.

Option Valeur Par défaut Effet
--port de 1 à 65535 le port de la config, sinon 3333 Trouve ou démarre le relais sur ce port pour cette exécution, sans modifier la config ; une config créée par cette commande l’enregistre. Un relais qui y tourne déjà est utilisé. Une valeur qui n’est pas un numéro de port est ignorée sans message
--install-extension aucune désactivé Écrit ou actualise le wrapper d’extension global à l’utilisateur dans ~/.copilot/extensions/web-relay/ (COPILOT_CONFIG_HOME déplace ~/.copilot) et quitte. N’a pas besoin de gh
--no-install-extension aucune désactivé Saute le wrapper pour cette exécution. Sans elle, chaque exécution l’écrit ou l’actualise
--migrate-from un dossier aucun Comme pour oar setup. Écrivez-la avec une espace : --migrate-from=dir est ignoré
-- le reste de la ligne aucun Transmis à gh copilot après un -- qui lui est propre

Dans l’ordre : vérifie que gh existe ; actualise le wrapper (un échec est signalé, et n’arrête que --install-extension) ; migre l’ancien état (installations globales) ; cherche le relais sur le port ; le démarre s’il ne répond pas, en attendant jusqu’à 20 secondes (Relay did not become ready at <url>) ; puis lance gh copilot dans le dossier courant avec le terminal attaché. Un relais qui tournait déjà continue de tourner. Une config manquante est créée avec un accès pour cette machine uniquement.

--help ou -h avant le -- affiche le texte d’aide général, pas celui de copilot. Un --help ou -h après le -- affiche l’aide d’oar copilot et sort avec le code 0. --install-extension et --no-install-extension après le -- sont lus aussi par oar. Aucun d’eux n’atteint gh.

Le relais d’une session Copilot garde le port et le token avec lesquels il a été démarré. oar restart ne peut pas les changer ; voir oar restart.

Code de sortie Quand
le code de gh copilot La session a tourné (1 si gh a été terminé par un signal)
0 --install-extension a écrit le wrapper
1 gh n’est pas installé (The Copilot session needs the GitHub CLI (gh)...) ; le wrapper ne peut pas être écrit avec --install-extension ; le port est pris ; le relais n’est pas devenu prêt ; le relais reprend encore sa base de données ; la migration de l’état a échoué (une migration bloquée est signalée, Nothing was migrated; starting on the state root as it is., et la session démarre quand même)

oar doctor #

oar doctor

Affiche ce que oar trouve. Pas d’options, ne modifie rien, sort avec le code 0.

OAR 0.9.19
  node          : v22.13.0 (linux)
  mode          : global install
  state root    : /home/dev/.oar
  config        : /home/dev/.oar/config.json
  port          : 3333 (localhostOnly: yes)
  auth token    : set
  tunnel        : disabled
  database      : /home/dev/.oar/data/copilot.db (12.4 MB)
  provider CLIs :
    gh (Copilot)  : gh version 2.60.0 (2025-01-01)
    claude        : 2.1.0 (Claude Code)
    grok          : not found
    cursor        : bundled (@cursor/sdk)
Ligne Signification
mode global install ou git checkout
state root Le dossier d’état ; (repo-local server/) dans un checkout git
config Le chemin de la config, avec (missing — run: oar setup) quand il n’y en a pas ; port, auth token et tunnel sont alors omis
port Le port de la config ; localhostOnly: yes signifie cette machine uniquement, no le réseau
auth token set ou MISSING
tunnel disabled, managed (cloudflared: <path>) ou managed, cannot start: <reason>
database Le chemin et la taille en Mo, ou (not created yet)
provider CLIs gh (Copilot), claude et grok : la première ligne de <cli> --version (coupée à 60 caractères), installed s’il n’y en a pas, not found si la commande échoue ou manque (limite de 5 secondes). cursor vaut toujours bundled (@cursor/sdk) : Cursor n’a pas besoin de CLI
warning Dans WSL, quand Windows occupe le port du relais

oar help et oar version #

oar help          # also: oar --help, oar -h, oar <command> --help
oar version       # also: oar --version, oar -v

help affiche le texte d’aide. version affiche la version installée, par exemple 0.9.19. Les deux sortent avec le code 0. --version et -v ne fonctionnent que sans commande.

Où oar garde ses fichiers #

oar travaille sur une seule installation : le paquet depuis lequel elle a été lancée et son dossier d’état.

Installation Dossier d’état Config Données Journaux
Globale, macOS et Linux ~/.oar config.json dedans data/ logs/
Globale, Windows %APPDATA%\oar config.json dedans data\ logs\
Checkout git server/ du checkout server/config.json server/data/ ~/.config/copilot-remote/logs (Windows : %LOCALAPPDATA%\copilot-remote\logs) ; npm start écrit dans server/logs

OAR_STATE_ROOT déplace le dossier d’état d’une installation globale. Un dossier de paquet qui contient .git compte comme un checkout git. Le dossier de données contient la base de données copilot.db, le fichier de verrou relay-server.lock et, entre un oar setup et le redémarrage qui l’applique, relay-previous.json. Les journaux sont server.log et server-err.log. Autres emplacements où oar écrit : ~/.config/systemd/user/oar.service (service Linux), oar-web-relay.cmd dans le dossier Démarrage de Windows, oar-web-relay-launcher.cmd, le XML de la tâche de démarrage, oar-relay-elevate.ps1, oar-web-relay.log et oar-web-relay-launcher.log dans %APPDATA%\oar, et ~/.copilot/extensions/web-relay/extension.mjs. Ajouté en 0.9.15 oar autostart --replace garde ses copies sous la forme <name>.bak dans le dossier d’état, et oar uninstall écrit oar-uninstall.log dans le dossier des journaux (avec --purge, dans le dossier temporaire).

Variables d’environnement #

Variable Utilisée par Effet
OAR_STATE_ROOT toutes Le dossier d’état d’une installation globale
OAR_NO_UPDATE_CHECK update 1 bloque la requête du manifeste ; --to fonctionne toujours
OAR_UPDATE_MANIFEST_URL update Une autre URL pour le manifeste
COPILOT_WEB_RELAY_LOG_DIR toutes Un autre dossier de journaux
COPILOT_WEB_RELAY_CONFIG copilot uniquement Un fichier de config à utiliser quand il existe. Les autres commandes utilisent toujours le config.json propre à l’installation
COPILOT_WEB_RELAY_DATA_DIR copilot, start, restart, setup, uninstall, démarrage automatique Windows Transmise au relais comme dossier de données quand ces commandes le démarrent, sauf par le service Linux. setup migre dedans, et uninstall le nomme et le propose avec --purge. oar lui-même cherche le fichier de verrou dans le dossier de données par défaut
COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN, COPILOT_CLOUDFLARED_BINARY status, doctor Modifient la ligne Tunnel: de status et la ligne tunnel de doctor, comme elles modifient le tunnel du relais
COPILOT_CONFIG_HOME copilot Le dossier personnel de Copilot pour le wrapper, par défaut ~/.copilot
APPDATA, USERPROFILE, LOCALAPPDATA, XDG_CONFIG_HOME toutes Emplacements de dossiers de Windows et anciens emplacements
NO_COLOR menu Désactive les couleurs
PATH service install Le service reçoit ce PATH (plus ~/.local/bin et le dossier de Node.js)

Comment oar trouve le relais #

oar lit le port et le token dans le config.json de l’installation et interroge http://localhost:<port>/api/status avec le token :

Réponse oar l’interprète comme
L’état d’un relais Le relais tourne
Toute autre réponse (un mauvais token, un autre programme), ou aucune réponse en 2,5 secondes Le port est occupé par un autre programme, ou par un relais avec un autre token
La connexion est refusée Le relais est arrêté

Un fichier de verrou n’est pas une preuve : il peut survivre à son relais. oar start et oar copilot attendent un relais qui le détient et ne répond pas encore, et ne suppriment qu’un verrou écrit par une version antérieure. oar update considère un verrou actif comme un relais en marche. oar uninstall ne continue pas tant qu’un processus actif le détient. Entre un oar setup qui a changé le port ou le token et le redémarrage qui l’applique, le relais répond encore sur les anciens ; oar le trouve grâce à relay-previous.json et indique qu’il tourne avec ses anciens réglages.

Avec le service installé, start, stop et restart passent par systemd sous Linux (immédiatement, sans attendre les turns) ; sinon, start lance un processus détaché, et stop et restart utilisent l’interface propre du relais, qui attend qu’aucun turn ne tourne. Sous Windows, le démarrage automatique n’intervient jamais dans start ; status affiche Service: installed quand le démarrage automatique ou la tâche de démarrage est activé.

WSL #

Dans WSL, oar détecte la distribution (WSL_DISTRO_NAME ou WSL_INTEROP, ou la version du noyau) et demande à Windows quel programme occupe un port. oar setup refuse un port que Windows occupe. oar setup, start, status et doctor affichent Windows holds port <port> (<program>): a browser on Windows reaches that program, not this relay. Pick another port: oar setup --port N. Avec l’accès LAN activé dans le réseau par défaut de WSL, oar url indique que l’adresse est interne à WSL.

Codes de sortie #

Code Signification Commandes
0 Fait ; pour stop et restart, aussi quand le relais est encore occupé et termine tout seul toutes ; status seulement quand le relais tourne
1 La commande n’a pas pu faire ce que vous avez demandé : pas de config, un checkout git, le port est pris, le relais n’a pas démarré ou n’a pas accepté la demande, npm install a échoué, gh manque, une invite administrateur a été refusée, une entrée de démarrage automatique faite à la main gêne, --purge n’a pas été confirmé ; aussi une erreur inattendue setup, start, stop, restart, url, update, service, autostart, uninstall, copilot
2 Erreur d’utilisation : commande ou option inconnue, une valeur manquante, un mauvais --port (sauf pour copilot) ou --autostart, --lan avec --local toutes
3 Le relais ne tourne pas (arrêté, port occupé par autre chose, ou pas configuré) status uniquement
130 Ctrl+C dans une question ou dans le menu setup, uninstall, le menu
le code de gh copilot La session Copilot s’est terminée copilot