feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,9 @@ launch_fleetclaude() {
|
||||
local bin=""
|
||||
local session="fleet"
|
||||
local cols=52
|
||||
local T="tmux -L fleet" # socket tmux aislado: no toca el tmux normal del usuario
|
||||
local explicit_session=0 # 1 si el usuario pasó --session <name> a mano
|
||||
local reuse=0 # 1 si el usuario pidió --reuse (reattach al perfil principal)
|
||||
local T="" # socket tmux aislado; se fija al resolver el perfil
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Parseo de argumentos
|
||||
@@ -39,6 +41,10 @@ launch_fleetclaude() {
|
||||
--session)
|
||||
shift
|
||||
session="${1:-}"
|
||||
explicit_session=1
|
||||
;;
|
||||
--reuse)
|
||||
reuse=1
|
||||
;;
|
||||
--cols)
|
||||
shift
|
||||
@@ -51,19 +57,28 @@ Uso: launch_fleetclaude [opciones]
|
||||
Abre una ventana kitty con una sesion tmux de dos panes: la TUI fleetview a la
|
||||
izquierda y 'claude --dangerously-skip-permissions' a la derecha.
|
||||
|
||||
Cada PERFIL de FleetView es un socket+sesion tmux aislados (su propia flota de
|
||||
Claudes). Sin --session ni --reuse, cada invocacion abre un perfil NUEVO: usa
|
||||
el primer nombre libre de la secuencia fleet, fleet2, fleet3, ... Asi puedes
|
||||
tener varias FleetView abiertas a la vez, cada una con su flota independiente.
|
||||
|
||||
Opciones:
|
||||
--cwd <dir> Directorio de trabajo de los panes.
|
||||
Default: raiz del repo fn_registry (derivada dinamicamente).
|
||||
--bin <path> Ruta al binario de la TUI fleetview.
|
||||
Default: <repo>/apps/fleetview/fleetview
|
||||
--session <name> Nombre de la sesion tmux. Default: fleet.
|
||||
--session <name> Fija el perfil (socket+sesion) por nombre exacto; reutiliza
|
||||
el existente si ya esta vivo. Sin esta opcion, perfil auto.
|
||||
--reuse Reattach al perfil principal 'fleet' en vez de abrir uno
|
||||
nuevo (vuelve al comportamiento idempotente clasico).
|
||||
--cols <n> Ancho (columnas) del pane izquierdo. Default: 40.
|
||||
-h, --help Muestra esta ayuda.
|
||||
|
||||
Ejemplos:
|
||||
launch_fleetclaude
|
||||
launch_fleetclaude --cwd ~/fn_registry
|
||||
launch_fleetclaude --session fleet --cols 50
|
||||
launch_fleetclaude # perfil nuevo (fleet, luego fleet2, ...)
|
||||
launch_fleetclaude --reuse # reattach a la flota principal 'fleet'
|
||||
launch_fleetclaude --session trabajo # perfil con nombre fijo 'trabajo'
|
||||
launch_fleetclaude --cwd ~/fn_registry --cols 50
|
||||
USAGE
|
||||
return 0
|
||||
;;
|
||||
@@ -111,6 +126,34 @@ USAGE
|
||||
echo "launch_fleetclaude: tmux no esta instalado." >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Resolver el PERFIL (socket+sesion tmux comparten nombre).
|
||||
#
|
||||
# - --session <name> -> usa ese nombre exacto (reutiliza si ya vive).
|
||||
# - --reuse -> usa 'fleet' (el perfil principal), idempotente.
|
||||
# - sin nada -> perfil NUEVO: primer nombre libre de la secuencia
|
||||
# fleet, fleet2, fleet3, ... Asi abrir FleetView con
|
||||
# uno ya abierto arranca otra flota, no la reusa.
|
||||
#
|
||||
# "Libre" = no hay un server tmux con esa sesion (has-session falla). Un
|
||||
# perfil cerrado libera su nombre, asi que tras cerrar 'fleet' el siguiente
|
||||
# lanzamiento vuelve a 'fleet'.
|
||||
# -----------------------------------------------------------------------
|
||||
if [[ "$explicit_session" -eq 0 && "$reuse" -eq 0 ]]; then
|
||||
local base="$session" n=1 cand
|
||||
while :; do
|
||||
if [[ "$n" -eq 1 ]]; then cand="$base"; else cand="${base}${n}"; fi
|
||||
if ! tmux -L "$cand" has-session -t "$cand" 2>/dev/null; then
|
||||
session="$cand"
|
||||
break
|
||||
fi
|
||||
n=$((n + 1))
|
||||
done
|
||||
echo "launch_fleetclaude: perfil nuevo '$session'."
|
||||
fi
|
||||
# A partir de aqui el socket aislado es el del perfil resuelto.
|
||||
T="tmux -L $session"
|
||||
# Nota: kitty NO se exige aqui. La ruta interactiva (TTY) reutiliza la
|
||||
# terminal actual con `exec tmux attach` y no necesita kitty. Solo la
|
||||
# ruta sin-TTY (abrir ventana nueva con setsid kitty) lo requiere, y ahi
|
||||
@@ -121,9 +164,13 @@ USAGE
|
||||
# - Si el binario fleetview existe -> ejecutarlo (exec, sin shell colgado).
|
||||
# - Si NO existe -> mensaje claro + shell interactiva (no falla en silencio).
|
||||
# -----------------------------------------------------------------------
|
||||
# La TUI necesita saber a qué perfil pertenece: se lo pasamos por entorno
|
||||
# (FLEET_SOCKET/FLEET_SESSION), que main.go lee con fallback a "fleet".
|
||||
local envpfx
|
||||
envpfx="FLEET_SOCKET=$(printf '%q' "$session") FLEET_SESSION=$(printf '%q' "$session")"
|
||||
local left_cmd
|
||||
if [[ -x "$bin" ]]; then
|
||||
left_cmd="exec $(printf '%q' "$bin")"
|
||||
left_cmd="$envpfx exec $(printf '%q' "$bin")"
|
||||
else
|
||||
# Fallback claro: instruye como compilar la TUI y deja una shell viva.
|
||||
left_cmd="echo 'fleetview no compilado: cd apps/fleetview && go build -o fleetview .'; exec \"\$SHELL\""
|
||||
@@ -181,8 +228,14 @@ USAGE
|
||||
$T bind -n M-r send-keys -t "$left_pane" r
|
||||
$T bind -n M-u send-keys -t "$left_pane" u
|
||||
$T bind -n M-h send-keys -t "$left_pane" h
|
||||
$T bind -n M-R send-keys -t "$left_pane" R
|
||||
$T bind -n M-Left send-keys -t "$left_pane" Escape
|
||||
$T bind -n M-q send-keys -t "$left_pane" Q
|
||||
# Entorno del perfil en el server tmux: respawn-pane (alt+R, recompila la TUI)
|
||||
# y los Claude nuevos heredan FLEET_SOCKET/FLEET_SESSION para apuntar al
|
||||
# socket correcto aunque no sea el default "fleet".
|
||||
$T set-environment -g FLEET_SOCKET "$session"
|
||||
$T set-environment -g FLEET_SESSION "$session"
|
||||
# Raton: enruta clicks/rueda al pane bajo el cursor; la TUI los interpreta.
|
||||
$T set -g mouse on
|
||||
# Al salir un Claude (exit / Ctrl-D / kill), cerrar su window en vez de
|
||||
@@ -207,24 +260,25 @@ USAGE
|
||||
# (Mismo patron que reboot_all_claudes para relanzar terminales.)
|
||||
# -----------------------------------------------------------------------
|
||||
# Adjuntar la sesion:
|
||||
# - Si se invoca desde una terminal interactiva, convertir ESA terminal en
|
||||
# el panel FleetView (exec reemplaza el proceso; al hacer detach vuelve la
|
||||
# - Terminal interactiva y FUERA de tmux: convertir ESA terminal en el
|
||||
# panel FleetView (exec reemplaza el proceso; al hacer detach vuelve la
|
||||
# shell). Asi `fleetclaude` no abre otra ventana: usa la actual.
|
||||
# - Si NO hay TTY (atajo de escritorio, cron, script), abrir una ventana
|
||||
# kitty nueva desacoplada (setsid) como antes.
|
||||
if [ -t 0 ] && [ -t 1 ]; then
|
||||
exec tmux -L fleet attach -t "$session"
|
||||
# - DENTRO de tmux (o sin TTY: atajo de escritorio, cron, script): abrir
|
||||
# una ventana kitty nueva desacoplada (setsid). No hacemos `attach`
|
||||
# anidado dentro de otra sesion tmux (rompe / da el warning de nesting).
|
||||
if [ -t 0 ] && [ -t 1 ] && [ -z "${TMUX:-}" ]; then
|
||||
exec tmux -L "$session" attach -t "$session"
|
||||
fi
|
||||
# Ruta sin-TTY: necesitamos kitty para abrir la ventana nueva.
|
||||
# Ruta ventana-nueva: necesitamos kitty para abrirla.
|
||||
if ! command -v kitty >/dev/null 2>&1; then
|
||||
echo "launch_fleetclaude: kitty no esta instalado (necesario solo sin TTY)." >&2
|
||||
echo "launch_fleetclaude: lanzalo desde una terminal interactiva, o instala kitty." >&2
|
||||
echo "launch_fleetclaude: kitty no esta instalado (necesario para abrir ventana nueva)." >&2
|
||||
echo "launch_fleetclaude: lanzalo desde una terminal interactiva fuera de tmux, o instala kitty." >&2
|
||||
return 1
|
||||
fi
|
||||
setsid kitty --title "FleetView" -e tmux -L fleet attach -t "$session" </dev/null >/dev/null 2>&1 &
|
||||
setsid kitty --title "FleetView ($session)" -e tmux -L "$session" attach -t "$session" </dev/null >/dev/null 2>&1 &
|
||||
disown 2>/dev/null || true
|
||||
|
||||
echo "launch_fleetclaude: ventana kitty 'FleetView' adjunta a la sesion tmux '$session'."
|
||||
echo "launch_fleetclaude: ventana kitty 'FleetView ($session)' adjunta al perfil '$session'."
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user