Files
fn_registry/bash/functions/infra/supervise_fleetview_tui.md
T
egutierrez 46954d8584 feat(infra): auto-commit con 8 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 15:35:59 +02:00

5.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, error_type, file_path, tested, tests, test_file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types error_type file_path tested tests test_file_path params output
supervise_fleetview_tui function bash infra 1.0.0 impure supervise_fleetview_tui --bin <path> [--socket <s>] [--sentinel <path>] [--backoff <s>] [--min-uptime <s>] [--max-fast-exits <n>] Bucle supervisor que mantiene viva la TUI fleetview: lanza el binario y, si sale (crash, panic, kill de su proceso o pane), lo relanza tras un backoff, para que el panel de control de la flota NUNCA se pierda por un fallo puntual. Es la pieza que hace resiliente al pane izquierdo de la sesion tmux FleetView (lo invoca launch_fleetclaude). Dos valvulas de escape evitan el respawn infinito: un fichero centinela (touch <sentinel> => parada voluntaria al siguiente ciclo) y un crash-loop guard (si la TUI sale demasiado rapido muchas veces seguidas, el supervisor se rinde con rc=3 en vez de quemar CPU relanzando un binario roto).
fleet
claude-fleet
orchestration
fleetview
tui
supervisor
resilience
infra
error_go_core bash/functions/infra/supervise_fleetview_tui.sh true
golden: tras salir el binario, el supervisor lo relanza (respawn observable)
sentinel: tocar el fichero centinela para el bucle limpio (rc=0) y lo consume
crash-loop: salidas rapidas seguidas >= max_fast_exits hacen que se rinda (rc=3)
error: sin --bin rc=1; binario no ejecutable rc=1
bash/functions/infra/supervise_fleetview_tui_test.sh
name desc
--bin Ruta al binario fleetview a supervisar. Obligatorio. Si no es ejecutable, sale con rc=1 con instruccion de compilado.
name desc
--socket Socket del perfil FleetView. Solo fija el nombre del sentinel por defecto. Default: $FLEET_SOCKET, o 'fleet' si no esta seteada.
name desc
--sentinel Ruta del fichero centinela de parada voluntaria. Si existe tras una salida de la TUI, se borra y el bucle termina. Default: $HOME/.claude/fleet/tui_stop_<socket>.
name desc
--backoff Segundos de espera antes de relanzar la TUI tras una salida. Default: 1.
name desc
--min-uptime Umbral en segundos para considerar una salida 'rapida' (sospecha de crash-loop). Un arranque que dura >= este valor resetea el contador. Default: 2.
name desc
--max-fast-exits Numero de salidas rapidas seguidas tras las que el supervisor se rinde (crash-loop guard) en vez de seguir relanzando. Default: 5.
No retorna valor; corre indefinidamente relanzando la TUI. Sale 0 ante parada voluntaria (sentinel), 1 ante uso incorrecto / binario no ejecutable, 3 cuando el crash-loop guard se rinde. Imprime una linea por cada relanzamiento o parada.

supervise_fleetview_tui

Bucle supervisor de la TUI fleetview. Corre el binario y, cada vez que sale (crash, panic, kill de su proceso, cierre de su pane), lo relanza tras un pequeño backoff. Hace que el panel de control de la flota — el pane izquierdo de la sesión tmux FleetView — nunca se pierda por un fallo puntual. launch_fleetclaude lo usa como comando del pane izquierdo en vez de un exec fleetview de una sola vida.

Ejemplo

# Como lo invoca el launcher en el pane izquierdo (relanza la TUI si muere):
FLEET_SOCKET=fleet bash bash/functions/infra/supervise_fleetview_tui.sh \
    --bin apps/fleetview/fleetview --socket fleet

# Pararlo voluntariamente desde otra terminal: tocar el sentinel y dejar salir la TUI.
touch ~/.claude/fleet/tui_stop_fleet

Cuando usarla

Úsala como wrapper del binario fleetview siempre que quieras que la TUI sobreviva a un crash o a un kill accidental de su proceso/pane (p. ej. un kill_fleet_agent que cierre la window que la aloja). Es la mitad "auto-recuperación" del par de fixes que blindan FleetView; la otra mitad es el Guard 3 anti-TUI/console de kill_fleet_agent (la causa raíz). No la uses para supervisar Claudes (esos se relanzan con claude --resume, no en bucle ciego).

Gotchas

  • Impura y de larga duración: corre indefinidamente. Está pensada para vivir en un pane tmux con TTY, no como systemd service (la TUI necesita PTY; el watcher de fleetview sí es systemd Restart=always).
  • Crash-loop guard: si la TUI sale en menos de --min-uptime segundos, --max-fast-exits veces seguidas, el supervisor se rinde (rc=3) en vez de relanzar para siempre un binario roto. Ajusta los umbrales si tu arranque es legítimamente lento.
  • Sentinel = única parada voluntaria limpia: touch <sentinel> y deja que la TUI salga; al siguiente ciclo el supervisor ve el fichero, lo borra y termina. Sin sentinel, relanza siempre (es el objetivo: que no se pierda). Un sentinel huérfano de una sesión previa se limpia al arrancar para no parar de inmediato.
  • El sentinel por defecto depende del socket: ~/.claude/fleet/tui_stop_<socket>. Dos perfiles (fleet, fleet2) tienen sentinels distintos, así parar uno no para el otro.
  • No supervisa Claudes: su contrato es solo la TUI. Relanzar un Claude en bucle ciego perdería su sesión; los Claudes se recuperan con claude --resume.

Capability growth log

(v1.0.0 — sin cambios todavía.)