Todas las páginas
En esta página

El comando oar

oar es la línea de comandos de la máquina del relay. Escribe la configuración, inicia y detiene el relay, imprime la dirección que abres en un navegador, instala el servicio de inicio al iniciar sesión, actualiza OAR, comprueba la instalación y la vuelve a quitar. Actúa sobre la instalación desde la que se inició, en la máquina donde se ejecuta; no habla con un relay de otra máquina.

Ejecuta oar sin nada detrás para ver un menú, u oar help para ver el texto de uso. Cómo instalar OAR está en Instalación, el primer arranque en Primer arranque.

Los comandos #

Comando Qué hace
oar Un menú en una terminal; en otros casos, el estado y el texto de uso
oar setup Escribe la configuración: token de autenticación, acceso (esta máquina o LAN) y puerto; en Windows también el modo de inicio automático
oar start Inicia el relay en segundo plano
oar stop Detiene el relay cuando no hay ningún turn en curso
oar restart Reinicia un relay en ejecución, o inicia uno detenido
oar status Dice si el relay se está ejecutando; código de salida 0 o 3
oar url Imprime la dirección del relay con el token, y un código QR cuando un teléfono puede usarla
oar update Instala la versión más reciente, o la que indiques, y reinicia el relay
oar service Instala, quita o informa del servicio de inicio al iniciar sesión
oar autostart Nuevo en 0.9.15 Cambia cómo arranca el relay por sí solo: al iniciar sesión, al encender o nunca
oar uninstall Nuevo en 0.9.15 Quita las entradas de inicio automático y el paquete; los datos se quedan salvo que añadas --purge
oar copilot Inicia el relay y una sesión de terminal de GitHub Copilot
oar doctor Imprime la instalación, la configuración y las CLI de proveedores que encuentra
oar help Imprime el texto de uso
oar version Imprime la versión

La mayoría de los mensajes empiezan por [oar]. Los errores van a la salida de error estándar, la salida normal a la salida estándar.

Cómo se lee la línea de comandos #

  • El comando es la primera palabra que no es una opción. Las opciones pueden ir antes: oar --port 3400 setup es oar setup --port 3400.
  • --port, --migrate-from, --to y --autostart llevan un valor, como la palabra siguiente o como --port=3400. Sin valor, oar imprime --port needs a value. y termina con el código 2. Para oar update --to y oar copilot --migrate-from usa la forma separada por un espacio; consulta las notas de esos comandos.
  • --help o -h antes de un -- imprime el texto de uso y termina con el código 0, haya lo que haya en la línea.
  • --setup, --start, --stop y --status indican un comando cuando no se da otro: oar --setup --start es oar setup --start.
  • --install-extension, --no-install-extension, --migrate-from o una parte -- sin comando significan oar copilot. --version o -v sin comando imprimen la versión.
  • Cada comando acepta solo sus propias opciones e imprime el texto de uso tras uno de estos mensajes (en la salida de error estándar), código de salida 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.

Solo oar copilot acepta una parte --.

En una terminal, oar muestra la versión, si el relay se está ejecutando, la URL (sin el token), el puerto, el acceso, el estado del servicio y cualquier advertencia, y después estas entradas:

Tecla Entrada Ejecuta
1 Start (Iniciar) oar start
2 Stop (Detener) oar stop
3 Restart (Reiniciar) oar restart
4 Show URL and QR code (Mostrar URL y código QR) oar url
5 Settings (Ajustes) oar setup, con sus preguntas
6 Install or remove the service (Instalar o quitar el servicio) oar service install cuando no hay ninguno instalado; oar service remove tras Remove the service? [y/N] cuando lo hay; oar service status donde no hay servicio disponible
7 Update (Actualizar) oar update. Tras una actualización correcta el menú se cierra, porque sus propios archivos se han reemplazado
8 Doctor oar doctor
9 Copilot session (Sesión de Copilot) oar copilot
q Quit (Salir)

Muévete con las flechas (o j y k) y pulsa Enter, o pulsa un dígito o q. Cuando una entrada termina, cualquier tecla vuelve al menú. Ctrl+C dentro de una pregunta vuelve al menú; en el menú termina oar con el código de salida 130. La variable de entorno NO_COLOR desactiva los colores. Una terminal que no puede leer teclas sueltas recibe la misma lista con una pregunta Choose (1-9, q):.

Cuando la entrada o la salida estándar no es una terminal, oar imprime lo que imprime oar status, una línea vacía y el texto de uso, y termina con el código 0 sea cual sea el estado.

oar setup #

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

Escribe config.json en la carpeta de estado de OAR (Dónde guarda oar sus archivos; las claves están en config.json). Ejecútalo después de instalar y siempre que quieras otro puerto, acceso o token. Los ajustes que el comando no toca se quedan como están en una configuración existente.

En una terminal, y cuando no pasas ninguna de --port, --lan, --local, --new-token, --autostart ni --defaults, hace tres preguntas y muestra el valor actual entre corchetes; Enter lo conserva. Nuevo en 0.9.15 En Windows, una cuarta pregunta cómo arranca el relay, con el modo vigente como valor predeterminado; se omite cuando no se puede leer la tarea de arranque. Primer arranque las recorre.

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]:
Opción Valor Predeterminado Efecto
--port dígitos, de 1 a 65535 el puerto de la configuración; en una configuración nueva, el primer puerto libre a partir de 3333 (de 20 probados; si no, 3333) Fija el puerto sin preguntar. Se rechaza un puerto que ocupa otra cosa
--lan ninguno el acceso de la configuración Acceso para otros dispositivos de tu red (localhostOnly: false). No junto con --local
--local ninguno el acceso de la configuración; this machine only (solo esta máquina) en una configuración nueva Acceso solo para esta máquina
--new-token ninguno conserva el token; una configuración nueva recibe uno aleatorio Escribe un token de autenticación nuevo. Cierra la sesión en todos los dispositivos
--autostart signin, boot u off el modo vigente Nuevo en 0.9.15 Cambia el inicio automático sin preguntar, como hace oar autostart: en Windows, la entrada de inicio de sesión o la tarea de arranque (una solicitud de administrador); en Linux, el servicio. Solo instalaciones globales: un checkout de git se rechaza y no se escribe nada
--defaults ninguno desactivado No pregunta nada, ni siquiera en una terminal, y reinicia un relay en ejecución sin preguntar
--start ninguno desactivado Solo instalaciones globales (lo usa el instalador). Donde existe una sesión de usuario de systemd también escribe la unidad del servicio; después inicia el relay, a través del servicio si lo hay. Se ignora en un checkout de git
--migrate-from una carpeta ninguno Copia el estado de un checkout de git de antes de que el proyecto cambiara de nombre (<folder>/server) en la carpeta de estado de OAR. El origen nunca se cambia. Un relay que siga ejecutándose desde él bloquea la copia. Solo instalaciones globales. Se ejecuta cada vez que indicas una carpeta: una carpeta ya traída cuya base de datos sigue ahí solo dice <state folder> is already migrated from <folder>; nothing to do.; una carpeta sin nada que traer es un error (Nothing to migrate from <folder>: <reason>.); una carpeta de estado cuya base de datos ya tiene conversaciones la rechaza, y no se sobrescribe nada. Consulta Archivos y carpetas

Un puerto está libre cuando nada responde en él y se puede enlazar en esta máquina. El puerto del relay en ejecución de esta misma instalación cuenta como libre. En WSL también se rechaza un puerto que ocupa Windows. En una configuración nueva cuyo puerto 3333 está ocupado, setup dice Port 3333 is in use — using <port>. Una instalación global también recoge una vez el estado de la carpeta de configuración gestionada anterior, sin la opción.

Qué hace:

  1. Migra el estado antiguo (instalaciones globales): la carpeta de configuración gestionada anterior, una vez y por sí solo, o la carpeta que indica --migrate-from. [oar] Migrated <folder or "earlier relay state"> into <state folder> (<n> items, sources untouched; receipt in backups/MIGRATION.md).
  2. Escribe config.json (permiso 600 fuera de Windows) e imprime [oar] Wrote <path>. Una configuración nueva contiene authToken, port, localhostOnly, pollIntervalMs (3000), processingTimeoutMs (600000) y conversationSessionMode (isolated).
  3. Nuevo en 0.9.15 Cambia el inicio automático, según diga --autostart o la pregunta (instalaciones globales). Ejecuta oar autostart con ese modo e imprime sus líneas.
  4. Si el relay se está ejecutando y han cambiado el token, el puerto o el acceso, reinicia el relay y espera a que responda con los ajustes nuevos. En una terminal pregunta The relay is running. Restart it now to apply the change? [Y/n]; si respondes que no, imprime The running relay keeps its earlier settings until it restarts: oar restart. Sin terminal reinicia sin preguntar.
  5. Imprime la URL del relay con el token, y un código QR cuando un teléfono puede llegar a la dirección (acceso LAN con una dirección de red que no sea interna de WSL). Si el paso del inicio automático no salió bien, dice después The config is written; the autostart step did not go through (see above). y termina con el código 1.
  6. Cuando el relay no se está ejecutando, dice cómo iniciarlo: oar start (con una indicación sobre oar service install cuando no existe ningún servicio); en un checkout de git, npm start.
Código de salida Cuándo
0 La configuración está escrita, y el reinicio o el arranque que se pidió funcionó
1 El puerto está ocupado; el relay no se reinició o no llegó a arrancar; la migración se rechaza o falla (un relay que se ejecuta desde el origen o sobre la carpeta de estado, una base de datos que ya tiene conversaciones, nada que migrar desde la carpeta que indicaste); el paso del inicio automático no salió bien; --autostart en un checkout de git
2 --port no es un número de 1 a 65535 (--port expects a number from 1 to 65535.), --autostart no es signin, boot ni off (--autostart expects signin, boot or off.), o se dan a la vez --lan y --local
130 Ctrl+C en una pregunta

oar start #

oar start

Inicia el relay en segundo plano e imprime la URL del relay (con el token, sin código QR). No tiene opciones. Necesita una configuración: sin ella imprime No config yet — run: oar setup. Un checkout de git se rechaza (This is a git checkout — start the relay with: npm start). Ambos terminan con el código 1.

  • Un relay que ya responde se deja en paz: The relay is already running. It keeps the version and settings it started with until you restart it: oar restart.
  • Si el relay se ejecuta con ajustes de antes de un oar setup, oar start lo dice y remite a oar restart.
  • Con un servicio de usuario de systemd instalado (Linux), el servicio se activa y se inicia. Si no, el relay arranca como un proceso en segundo plano que sobrevive a la terminal y escribe server.log y server-err.log en la carpeta de registros. Tras reiniciar la máquina, vuelve a ejecutar oar start, o configura el inicio al iniciar sesión.
  • Espera hasta 20 segundos a que el relay responda, y deja de esperar antes si el proceso que inició termina. Entonces: The relay did not come up — see <log folder>/server-err.log (a través del servicio: see journalctl --user -u oar). Nuevo en 0.9.14 Cuando un relay vivo retiene el bloqueo, una segunda línea indica el bloqueo y dice qué hacer: The lock <path> is held by relay process <pid> (started <time>): oar stop, or end process <pid>. Cuando el bloqueo indica un proceso del que no se puede determinar que sea un relay: 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.
  • Nuevo en 0.9.14 Un relay que todavía está trayendo la base de datos con la que se ejecutaba hasta ahora (el primer arranque tras la actualización a 0.9.14) no se cuenta como fallido: oar start dice The relay (process <pid>) is bringing over the database it ran on until now (…) and is still running; it answers once that is done. e indica su registro.
  • Se espera, hasta 5 segundos, a un bloqueo cuyo relay sigue arrancando. Un bloqueo de una versión anterior cuyo relay no responde se elimina (Removing a leftover relay lock); Nuevo en 0.9.14 un bloqueo escrito por esta versión se deja al relay, que reconoce él mismo uno obsoleto (consulta Un relay por carpeta de datos).
  • Un puerto que ocupa otro programa, o un relay con otro token: Port <port> is in use by another program, or by a relay with another token. y una indicación para elegir otro puerto con oar setup --port <port>.
  • En WSL avisa cuando Windows ocupa el puerto (WSL).

Código de salida 0: el relay se está ejecutando, o sigue trayendo su base de datos. Código de salida 1: no hay configuración, es un checkout de git, el puerto está ocupado o el relay no llegó a arrancar.

oar stop #

oar stop

Sin opciones; necesita una configuración (código 1 sin ella).

  • Con el servicio de systemd en ejecución, ejecuta systemctl --user stop oar al instante y dice 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.
  • A cualquier otro relay se le pide que se detenga a través de su propia interfaz, y se detiene cuando no hay ningún turn en curso. Si hay turns en curso, se imprime Waiting for the relay's running turns to finish …. oar stop espera hasta 30 segundos y después imprime The relay is stopped. o The relay is still busy; it stops by itself when its running turns finish. Ambos terminan con el código 0.
  • Ningún relay en ejecución: The relay is not running., código 0.
  • Puerto ocupado por otra cosa: Port <port> is in use by another program, or by a relay with another token., código 1. Si el archivo de bloqueo indica un proceso vivo de esta instalación, una segunda línea da su id de proceso y te dice que lo reinicies desde su interfaz web, con ⋯ → Restart web relay (⋯ → Reiniciar el relay web), o que termines ese proceso.
  • The relay did not accept the stop request. o un systemctl fallido: código 1.

En Windows, y donde el servicio está instalado pero no en ejecución, el relay se detiene a través de su propia interfaz. Consulta Reiniciar el relay para saber qué hace una detención con los turns en curso.

oar restart #

oar restart

Reinicia un relay en ejecución para que cargue una versión nueva y vuelva a leer la configuración, y después imprime la URL del relay. Un relay detenido se inicia en su lugar, como con oar start. Sin opciones; necesita una configuración.

  • Con el servicio de systemd en ejecución, systemd lo reinicia al instante; un turn en curso termina (Reiniciar el relay).
  • A cualquier otro relay se le pide que se reinicie, y espera a sus turns en curso. El comando espera hasta 60 segundos a que el relay responda en el puerto de la configuración con el token de la configuración, y después imprime The relay restarted. Si sigue habiendo turns en curso: The relay is still busy; it restarts by itself when its running turns finish., código 0. Nuevo en 0.9.13 El reinicio se pone en cola como con 🌄 Restart web relay: los navegadores muestran su banner, y pasado el tiempo de Ask after a queued relay restart has waited (Preguntar cuando un reinicio del relay en cola lleve esperando) pregunta allí si reiniciar ahora, seguir esperando o cancelar (El reinicio espera).
  • Código 1 con 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 relay iniciado por oar copilot conserva el puerto y el token que recibió.
  • Código 1 con 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 o The relay did not come back — see <log folder>/server-err.log (a través del servicio: see journalctl --user -u oar).
  • Un puerto ocupado por otra cosa: el mensaje de oar stop, código 1.

oar status #

oar status

Imprime el estado del relay y termina con un código que un script puede comprobar.

[oar] OAR 0.9.19
[oar] The relay is running on port 3333 (this machine only): http://localhost:3333/
[oar] Service: installed, running
Línea Significado
Not set up yet — run: oar setup No hay configuración; solo va antes la línea de la versión
The relay is running on port <port> (<access>): <url> El relay responde con el token de la configuración. El acceso es LAN access (acceso LAN) o this machine only. La URL no lleva token; oar url la imprime
The relay is stopped (port <port>, <access>). Start it with: oar start Nada responde en el puerto
Port <port> is in use by another program, or by a relay with another token. Algo responde, pero no es este relay con este token
Service: <state> installed, running (instalado, en ejecución), installed (instalado) o not installed (no instalado). Se omite donde no hay nada que informar: un checkout de git, macOS, un Linux sin sesión de usuario de systemd
Tunnel: <state> Solo cuando el túnel de Cloudflare integrado está activado en la configuración. Para un relay en ejecución: running, not connected, not connected (<reason>) u off: <reason>. Si no, managed (cloudflared: <path>) o managed, cannot start: <reason>
una advertencia The relay runs with its earlier settings; restart it to apply the new ones. tras un oar setup que cambió el puerto o el token; en WSL, que Windows ocupa el puerto

Código de salida 0: el relay se está ejecutando. Código de salida 3: está detenido, el puerto lo ocupa otra cosa o no hay configuración.

oar url #

oar url

Imprime la dirección que hay que abrir en un navegador, con el token de autenticación, igual que termina oar setup. Sin opciones; necesita una configuración (código 1 sin ella). Si no, código 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).
  • Con acceso LAN, la dirección es la primera dirección IPv4 no interna de la máquina, y tras la primera línea sigue un código QR de ella.
  • Con acceso LAN pero sin dirección de red: LAN access is on, but this machine has no network address. En la red predeterminada (NAT) de WSL, la dirección es interna de WSL; la salida lo dice y propone un túnel o la red en modo espejo como alternativas. En estos casos no hay código QR.
  • Cuando el relay en ejecución informa de una dirección de túnel, sigue una línea Tunnel URL: con el token añadido, y un código QR de ella.
  • Una última línea dice The relay is not running. Start it with: oar start o, tras un cambio de ajustes, que el relay se ejecuta con sus ajustes anteriores hasta oar restart.

oar update #

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

Instala una versión más reciente de OAR desde npm y pide a un relay en ejecución que se reinicie. Es el equivalente en la terminal del botón Update (Actualizar) de Settings → General (Ajustes → General) (Actualizar OAR). Un checkout de git imprime This install runs from a git checkout — update with git pull, then restart the relay. y termina con el código 1.

Opción Valor Predeterminado Efecto
--beta ninguno desactivado Toma la versión del canal beta del manifiesto de actualizaciones (Canales). Sin ella, una versión beta sigue el canal beta y cualquier otra sigue el estable. Un canal sin versión recurre al estable
--to X.Y.Z, opcionalmente con una prerelease (X.Y.Z-beta.N) la más reciente del canal Instala exactamente esta versión directamente desde npm, sin el manifiesto. También funcionan versiones anteriores; no compara con la que está en ejecución

Escribe --to con un espacio

--to 0.9.2 funciona. --to=0.9.2 pasa la comprobación de la línea de comandos pero se ignora: oar update instala entonces la versión más reciente del canal.

Qué hace:

  1. Sin --to, descarga https://oar.sh/latest.json (5 segundos) en cada ejecución, esté o no activada la comprobación automática en la interfaz web.
  2. Si la versión del canal no es más reciente que la que está en ejecución: Already up to date (<version>)., código 0.
  3. Imprime Updating @oar-sh/oar <old> -> <new> ... y ejecuta npm install -g @oar-sh/oar@<version>, con la opción que permite ejecutar los scripts de instalación de OAR y de sus dependencias nativas. Fuera de Windows ejecuta el npm que está junto al Node.js que ejecuta oar, en el prefijo en el que está el paquete; en Windows, npm.cmd. npm imprime su propia salida; después, Installed @oar-sh/oar@<version>.
  4. Si hay un relay en ejecución, le pide que se reinicie cuando la queue esté inactiva (Relay restart requested — it restarts once the queue is idle.); si no hay ninguno, No running relay detected — the update loads on the next start. Un rechazo imprime Could not request a relay restart; restart it manually to load the update.

Código de salida 0: instalada, o ya actualizada. Código de salida 1: un checkout de git; --to no es una versión como 0.9.2; el manifiesto no se puede descargar (Could not fetch <url>.), tiene un schemaVersion distinto de 1 o no contiene ninguna versión utilizable; npm install falló (the running install is unchanged).

Variable Efecto
OAR_NO_UPDATE_CHECK=1 Bloquea la petición del manifiesto. oar update termina entonces con el código 1 y remite a oar update --to X.Y.Z, que sigue funcionando
OAR_UPDATE_MANIFEST_URL Lee el manifiesto de esta URL en su lugar

oar service #

oar service [install | remove | status]

Inicia el relay en cada inicio de sesión. oar service solo es oar service status. Un checkout de git se rechaza (código 1). La página Arrancar el relay automáticamente explica el servicio desde el punto de vista del propietario.

Linux #

Una unidad user de systemd, oar.service, en ~/.config/systemd/user/. Ejecuta el relay con las carpetas de configuración, datos y registros de esta instalación y el PATH de tu shell más ~/.local/bin y la carpeta del Node.js en uso. systemd lo reinicia 5 segundos después de un fallo.

Palabra Qué hace
install Necesita una configuración. Escribe la unidad; ejecuta loginctl enable-linger para que el relay sobreviva a un cierre de sesión (si eso falla, imprime el comando para que lo ejecutes tú); recarga systemd; detiene un relay que iniciaste a mano para que el servicio pueda tomar el puerto; activa e inicia el servicio. Si ese relay no se detiene, el servicio queda activado y toma el relevo en el siguiente arranque (sin lingering, en el siguiente inicio de sesión), o cuando ese relay se haya detenido y ejecutes oar start
remove Desactiva y detiene el servicio, elimina la unidad y recarga systemd. The service is not installed. si no hay ninguno
status Service: installed, running, installed, not running o not installed

Sin una sesión de usuario de systemd, el comando lo dice y termina con el código 1. En WSL, el mensaje añade cómo activar systemd: systemd=true en [boot] dentro de /etc/wsl.conf, y después wsl --terminate <distro> desde Windows.

Windows #

Una entrada en tu carpeta de Inicio inicia el relay cuando inicias sesión.

Palabra Qué hace
install Necesita una configuración. Activa el inicio al iniciar sesión; no inicia el relay ahora (Start it now with: oar start)
remove Lo desactiva: Autostart is off. A running relay keeps running; stop it with: oar stop
status Autostart: on, at sign-in, on, at boot (scheduled task) u off

Un inicio al encender mediante una tarea programada se configura con oar autostart boot o en la interfaz web en Settings → General → Autostart (Windows) (Ajustes → General → Inicio automático, Windows) (Windows). Mientras esa tarea esté lista, install y remove se niegan (código 1) con 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 lo indica.

macOS #

The service is not supported on macOS yet. Start the relay with: oar start, código 1 para cualquier palabra.

Código de salida 0: hecho, o status. Código de salida 1: un checkout de git, macOS, ninguna sesión de usuario de systemd, ninguna configuración en install, una tarea de arranque programada en Windows, o el relay no llegó a arrancar tras install. Código de salida 2: una palabra distinta de las tres, o una segunda palabra.

oar autostart Nuevo en 0.9.15 #

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

Cambia cómo arranca por sí solo el relay de esta instalación. oar autostart solo es oar autostart status. Un checkout de git se rechaza (This is a git checkout — autostart is for global installs., código 1). signin y boot necesitan una configuración; off y status no. Inicio automático explica los modos desde el punto de vista del propietario.

Windows #

Palabra Qué hace
signin Escribe la entrada en tu carpeta de Inicio y quita la tarea de arranque si la hay (una solicitud de administrador). Imprime The relay starts when you sign in to Windows. No inicia el relay ahora
boot Registra la tarea programada oar-relay y su lanzador (una solicitud de administrador: Confirm the administrator prompt to register the boot task …), y quita la entrada de inicio de sesión. Imprime The relay starts at boot, before anyone signs in (scheduled task \oar-relay). Si ya está en modo de arranque, no cambia nada y no pide ninguna confirmación; si el lanzador generado falta o es de una versión anterior, vuelve a registrar la tarea, con una solicitud de administrador
off Quita la tarea de arranque (una solicitud de administrador) y la entrada de inicio de sesión. Autostart is off. A running relay keeps running; stop it with: oar stop
status El modo y cada entrada, cada una (generated by OAR) o (hand-made); consulta Estado

La solicitud de administrador aparece en el escritorio del propio PC y se espera hasta 2 minutos. Solo la llamada a schtasks se ejecuta con privilegios elevados. Una solicitud rechazada no cambia nada (Nothing changed: the administrator prompt was declined.). Tras un cambio con --replace, se nombra cada copia: Kept a copy of <entry> as <copy>. Un cambio que falló después de la solicitud restaura las tareas que eliminó, y su línea de error termina con Copies kept: ….

Solo se eliminan o sobrescriben las entradas que generó OAR. Mientras una entrada creada o editada a mano fuera a quedarse junto al nuevo modo, o fuera a ser reemplazada por él, no cambia nada y se nombra la entrada; consulta Entradas que no creó OAR.

Opción Efecto
--replace Reemplaza las entradas hechas a mano por las propias de OAR. Antes guarda una copia de cada una, como <name>.bak en la carpeta de OAR: la de un lanzador junto a él, el XML exportado de una tarea (<task>.task.xml.bak), la de una entrada de Inicio. Sin --replace, una entrada hecha a mano nunca se cambia

Una tarea de arranque que no se puede leer, por ejemplo con Access is denied (Acceso denegado), detiene cualquier cambio, --replace incluido: Nothing changed: the boot task could not be read (<reason>).

Linux y macOS #

En Linux, las palabras se corresponden con oar service: signin y boot ejecutan oar service install, off ejecuta oar service remove, status ejecuta oar service status. Con lingering, el servicio arranca al encender. En macOS: Autostart is not supported on macOS yet. Start the relay with: oar start, código 1.

Código de salida 0: hecho, o status. Código de salida 1: un checkout de git, macOS, ninguna configuración para signin o boot, una entrada hecha a mano que estorba, una solicitud de administrador rechazada o fallida, una tarea de arranque que no se puede leer, o una entrada de inicio de sesión que no se puede cambiar; en Linux, los de oar service. Código de salida 2: otra palabra, una segunda palabra u otra opción.

oar uninstall Nuevo en 0.9.15 #

oar uninstall [--purge]

Quita OAR de la máquina y conserva tus datos. Un checkout de git se rechaza (This is a git checkout — there is no global package to uninstall., código 1). Con --purge hace primero sus preguntas (más abajo); después, en orden:

  1. Detiene el relay, como hace oar stop: espera a los turns en curso. Un relay que sigue ocupado después termina el comando (The relay finishes its running turns first; it stops by itself after them.), y no se cambia nada más. Un relay que retiene su bloqueo sin responder, mientras trae una base de datos o arranca, también lo termina: The relay (process <pid>) is bringing over its database and does not answer yet; once oar status says it runs, run oar uninstall again. o A relay (process <pid>) holds <lock> without answering; stop it (oar stop, or end process <pid>).
  2. Quita las entradas de inicio automático que generó OAR para esta instalación: en Windows, la tarea de arranque (una solicitud de administrador) con su lanzador y el XML de la tarea, y la entrada de inicio de sesión; en Linux, la unidad de systemd, si es la que escribió oar service install. Después, el envoltorio de la extensión de Copilot en ~/.copilot/extensions/web-relay/ que OAR escribió para esta instalación. Una entrada o un envoltorio creados o cambiados a mano, o de otra instalación, se quedan y se nombran (Left as it is: <path> (hand-made)).
  3. Con --purge, elimina los datos (más abajo).
  4. Inicia npm uninstall -g @oar-sh/oar en segundo plano, con el npm que está junto al Node.js que ejecuta oar y en el prefijo en el que está el paquete (en Windows, npm.cmd). npm no puede quitar un paquete mientras se ejecuta, así que esto espera a que oar haya terminado (hasta 2 minutos) y después escribe el resultado de npm en oar-uninstall.log: en la carpeta logs de OAR o, con --purge, en la carpeta temporal.

Termina con lo que hizo:

[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).

Cuando la carpeta de datos está fuera de la carpeta de estado, la línea nombra ambas. Los workers de sesión siguen ejecutándose cuando el relay se detiene, y npm no puede quitar los archivos que retiene un programa en ejecución. Cuando todavía se ejecutan programas desde el paquete, el comando indica sus ids de proceso, y npm deja sus archivos en una carpeta oculta .oar-* junto a donde estaba el paquete; el registro indica esa carpeta. Elimínala cuando hayan terminado, como muy tarde tras reiniciar la máquina.

Si un paso falla, el comando se detiene con el motivo (por ejemplo Uninstall stopped: <reason>. o The relay did not stop.), después Done: … y Not done: the autostart entries; the package. (con --purge también the data), y Run oar uninstall again once that is sorted out. (con --purge: oar uninstall --purge).

Opción Efecto
--purge También elimina para siempre la carpeta de estado: la configuración, la base de datos con todas las conversaciones, los archivos subidos y los registros. Primero dice --purge deletes <folder> for good: … y después te pide que escribas delete (Type "delete" to confirm: ); cualquier otra cosa lo termina con Not confirmed. Nothing was changed. Ctrl+C, o no tener entrada que leer, lo termina con el código de salida 130 sin cambiar nada

Con --purge, algunas carpetas reciben una pregunta propia, [y/N], después de delete: la carpeta de estado cuando está dentro de un checkout de git, rescued-package-data (datos que una versión anterior guardaba dentro de su paquete) y una carpeta de datos fuera de la carpeta de estado (dataDir en la configuración, o COPILOT_WEB_RELAY_DATA_DIR). Escribas lo que escribas, --purge no elimina nada en una carpeta de estado que sea la raíz de una unidad o de un sistema de archivos, tu carpeta personal o una carpeta por encima de ella, una carpeta del sistema o una carpeta por encima de una, una carpeta dentro de la carpeta de Windows, un checkout de git, o una carpeta sin una configuración ni una base de datos de OAR dentro: --purge deletes nothing in <folder> (<reason>). Nothing was changed. Una carpeta adicional así no se ofrece (Not deleted, and not offered: …).

Código de salida 0: se ha iniciado la eliminación del paquete. Código de salida 1: un checkout de git; una carpeta de estado que --purge rechaza; no se escribió delete; un relay que no se detuvo o que retiene su bloqueo sin responder; una entrada de inicio automático que no se pudo quitar (una solicitud rechazada, una tarea de arranque que no se puede leer); una carpeta que no se pudo eliminar; npm no se pudo iniciar (remove it yourself: npm uninstall -g @oar-sh/oar). Código de salida 2: otra opción. Código de salida 130: Ctrl+C en una pregunta.

oar copilot #

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

Inicia el relay si no responde ninguno y después ejecuta la CLI de GitHub Copilot (gh copilot) en tu terminal. Un relay que haya iniciado se detiene cuando termina la sesión. GitHub Copilot explica cuándo usarlo. Las mismas opciones sin la palabra copilot también lo ejecutan: oar -- <args>, oar --install-extension, oar --port 3400 --no-install-extension.

Opción Valor Predeterminado Efecto
--port de 1 a 65535 el puerto de la configuración; si no, 3333 Busca o inicia el relay en este puerto para esta ejecución, sin cambiar la configuración; una configuración que cree este comando lo guarda. Se usa un relay que ya se ejecute ahí. Un valor que no es un número de puerto se ignora sin ningún mensaje
--install-extension ninguno desactivado Escribe o renueva el envoltorio de la extensión global del usuario en ~/.copilot/extensions/web-relay/ (COPILOT_CONFIG_HOME traslada ~/.copilot) y termina. No necesita gh
--no-install-extension ninguno desactivado Omite el envoltorio en esta ejecución. Sin ella, cada ejecución lo escribe o lo renueva
--migrate-from una carpeta ninguno Como en oar setup. Escríbela con un espacio: --migrate-from=dir se ignora
-- el resto de la línea ninguno Se pasa a gh copilot tras un -- propio

En orden: comprueba que gh existe; renueva el envoltorio (un fallo se informa, y solo detiene --install-extension); migra el estado antiguo (instalaciones globales); busca el relay en el puerto; lo inicia si no responde, esperando hasta 20 segundos (Relay did not become ready at <url>); después ejecuta gh copilot en la carpeta actual con la terminal conectada. Un relay que ya se ejecutaba sigue ejecutándose. Una configuración que falta se crea con acceso solo para esta máquina.

--help o -h antes del -- imprime el texto de uso general, no uno de copilot. Un --help o -h después del -- imprime el uso de oar copilot y termina con el código 0. oar también lee --install-extension y --no-install-extension después del --. Ninguno de ellos llega a gh.

El relay de una sesión de Copilot tiene el puerto y el token con los que se inició. oar restart no puede cambiarlos; consulta oar restart.

Código de salida Cuándo
el código de gh copilot La sesión se ejecutó (1 si gh terminó por una señal)
0 --install-extension escribió el envoltorio
1 gh no está instalado (The Copilot session needs the GitHub CLI (gh)...); el envoltorio no se puede escribir con --install-extension; el puerto está ocupado; el relay no llegó a estar listo; el relay sigue trayendo su base de datos; la migración del estado falló (una bloqueada se informa, Nothing was migrated; starting on the state root as it is., y la sesión arranca igualmente)

oar doctor #

oar doctor

Imprime lo que encuentra oar. Sin opciones, no cambia nada, termina con el código 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)
Línea Significado
mode global install o git checkout
state root La carpeta de estado; (repo-local server/) en un checkout de git
config La ruta de la configuración, con (missing — run: oar setup) cuando no hay ninguna; entonces se omiten port, auth token y tunnel
port El puerto de la configuración; localhostOnly: yes es solo esta máquina, no es la red
auth token set o MISSING
tunnel disabled, managed (cloudflared: <path>) o managed, cannot start: <reason>
database La ruta y el tamaño en MB, o (not created yet)
provider CLIs gh (Copilot), claude y grok: la primera línea de <cli> --version (recortada a 60 caracteres), installed si no hay ninguna, not found si el comando falla o no existe (límite de 5 segundos). cursor es siempre bundled (@cursor/sdk): Cursor no necesita CLI
warning En WSL, cuando Windows ocupa el puerto del relay

oar help y oar version #

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

help imprime el texto de uso. version imprime la versión instalada, por ejemplo 0.9.19. Ambos terminan con el código 0. --version y -v solo funcionan sin comando.

Dónde guarda oar sus archivos #

oar trabaja sobre una instalación: el paquete desde el que se inició y su carpeta de estado.

Instalación Carpeta de estado Configuración Datos Registros
Global, macOS y Linux ~/.oar config.json dentro de ella data/ logs/
Global, Windows %APPDATA%\oar config.json dentro de ella data\ logs\
Checkout de git server/ del checkout server/config.json server/data/ ~/.config/copilot-remote/logs (Windows: %LOCALAPPDATA%\copilot-remote\logs); npm start escribe en server/logs

OAR_STATE_ROOT traslada la carpeta de estado de una instalación global. Una carpeta de paquete que contiene .git cuenta como checkout de git. La carpeta de datos contiene la base de datos copilot.db, el archivo de bloqueo relay-server.lock y, entre un oar setup y el reinicio que lo aplica, relay-previous.json. Los registros son server.log y server-err.log. Otros sitios en los que escribe oar: ~/.config/systemd/user/oar.service (servicio de Linux), oar-web-relay.cmd en la carpeta de Inicio de Windows, oar-web-relay-launcher.cmd, el XML de la tarea de arranque, oar-relay-elevate.ps1, oar-web-relay.log y oar-web-relay-launcher.log en %APPDATA%\oar, y ~/.copilot/extensions/web-relay/extension.mjs. Nuevo en 0.9.15 oar autostart --replace guarda sus copias como <name>.bak en la carpeta de estado, y oar uninstall escribe oar-uninstall.log en la carpeta de registros (con --purge, en la carpeta temporal).

Variables de entorno #

Variable La usa Efecto
OAR_STATE_ROOT todos La carpeta de estado de una instalación global
OAR_NO_UPDATE_CHECK update 1 bloquea la petición del manifiesto; --to sigue funcionando
OAR_UPDATE_MANIFEST_URL update Otra URL para el manifiesto
COPILOT_WEB_RELAY_LOG_DIR todos Otra carpeta de registros
COPILOT_WEB_RELAY_CONFIG solo copilot Un archivo de configuración que se usa cuando existe. Los demás comandos usan siempre el config.json propio de la instalación
COPILOT_WEB_RELAY_DATA_DIR copilot, start, restart, setup, uninstall, inicio automático de Windows Se pasa al relay como su carpeta de datos cuando estos lo inician, salvo el servicio de Linux. setup migra a ella, y uninstall la nombra y la ofrece con --purge. El propio oar busca el archivo de bloqueo en la carpeta de datos predeterminada
COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN, COPILOT_CLOUDFLARED_BINARY status, doctor Cambian la línea Tunnel: de status y la línea tunnel de doctor, igual que cambian el túnel del relay
COPILOT_CONFIG_HOME copilot La carpeta personal de Copilot para el envoltorio; predeterminada: ~/.copilot
APPDATA, USERPROFILE, LOCALAPPDATA, XDG_CONFIG_HOME todos Ubicaciones de carpetas de Windows y heredadas
NO_COLOR menú Desactiva los colores
PATH service install El servicio recibe este PATH (más ~/.local/bin y la carpeta del Node.js)

Cómo encuentra oar el relay #

oar lee el puerto y el token del config.json de la instalación y consulta http://localhost:<port>/api/status con el token:

Respuesta oar la interpreta como
El estado de un relay El relay se está ejecutando
Cualquier otra respuesta (un token incorrecto, otro programa), o ninguna respuesta en 2,5 segundos El puerto lo ocupa otro programa, o un relay con otro token
La conexión se rechaza El relay está detenido

Un archivo de bloqueo no es ninguna prueba: puede sobrevivir a su relay. oar start y oar copilot esperan a un relay que lo retiene y todavía no responde, y solo eliminan un bloqueo escrito por una versión anterior. oar update toma un bloqueo vivo como un relay en ejecución. oar uninstall no continúa mientras un proceso vivo lo retenga. Entre un oar setup que cambió el puerto o el token y el reinicio que lo aplica, el relay sigue respondiendo con los anteriores; oar lo encuentra a través de relay-previous.json y dice que se ejecuta con sus ajustes anteriores.

Con el servicio instalado, start, stop y restart pasan por systemd en Linux (al instante, sin esperar a los turns); si no, start lanza un proceso desacoplado y stop y restart usan la interfaz propia del relay, que espera hasta que no haya ningún turn en curso. En Windows, el inicio automático nunca interviene en start; status muestra Service: installed cuando el inicio automático o la tarea de arranque están activados.

WSL #

En WSL, oar detecta la distribución (WSL_DISTRO_NAME o WSL_INTEROP, o la versión del kernel) y pregunta a Windows qué programa ocupa un puerto. oar setup rechaza un puerto que ocupa Windows. oar setup, start, status y doctor imprimen Windows holds port <port> (<program>): a browser on Windows reaches that program, not this relay. Pick another port: oar setup --port N. Con el acceso LAN activado en la red predeterminada de WSL, oar url dice que la dirección es interna de WSL.

Códigos de salida #

Código Significado Comandos
0 Hecho; en stop y restart, también cuando el relay sigue ocupado y termina por sí solo todos; status solo cuando el relay se está ejecutando
1 El comando no pudo hacer lo que pediste: no hay configuración, es un checkout de git, el puerto está ocupado, el relay no llegó a arrancar o no aceptó la petición, npm install falló, falta gh, se rechazó una solicitud de administrador, una entrada de inicio automático hecha a mano estorba, no se confirmó --purge; también un error inesperado setup, start, stop, restart, url, update, service, autostart, uninstall, copilot
2 Error de uso: comando u opción desconocidos, un valor que falta, un --port incorrecto (salvo en copilot) o --autostart, --lan con --local todos
3 El relay no se está ejecutando (detenido, ocupado por otra cosa o sin configurar) solo status
130 Ctrl+C en una pregunta o en el menú setup, uninstall, el menú
el código de gh copilot La sesión de Copilot terminó copilot