feat(infra): auto-commit con 2 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 11:11:35 +02:00
parent e7a8edfed8
commit 7d100e7f3e
2 changed files with 59 additions and 29 deletions
+45 -27
View File
@@ -111,10 +111,10 @@ USAGE
echo "launch_fleetclaude: tmux no esta instalado." >&2
return 1
fi
if ! command -v kitty >/dev/null 2>&1; then
echo "launch_fleetclaude: kitty no esta instalado." >&2
return 1
fi
# 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
# se comprueba justo antes de usarlo.
# -----------------------------------------------------------------------
# Comando para el pane izquierdo:
@@ -131,27 +131,39 @@ USAGE
# -----------------------------------------------------------------------
# Montar la sesion tmux SOLO si no existe (idempotencia). Socket aislado $T.
#
# Targeting por PANE ID (%0/%1), no por indice (console.0). El socket
# -L fleet sigue leyendo ~/.tmux.conf; si el usuario tiene
# `base-index 1` / `pane-base-index 1` (muy comun), el primer pane es el
# indice 1 y cualquier referencia a console.0 falla con
# "can't find pane: 0". Los pane ID son estables e inmunes al base-index.
# -----------------------------------------------------------------------
local left_pane right_pane
if $T has-session -t "$session" 2>/dev/null; then
echo "launch_fleetclaude: la sesion tmux '$session' ya existe; reutilizandola."
else
echo "launch_fleetclaude: creando sesion tmux '$session' en '$cwd'."
# Sesion detached con ventana 'console', pane 0 en el cwd objetivo.
$T new-session -d -s "$session" -n console -c "$cwd"
# Sesion detached con ventana 'console'. Capturamos el pane ID del pane
# izquierdo (la TUI fleetview, o el fallback claro).
left_pane=$($T new-session -d -s "$session" -n console -c "$cwd" -P -F '#{pane_id}')
$T send-keys -t "$left_pane" "$left_cmd" C-m
# pane 0 (izquierda) = la TUI fleetview (o el fallback claro).
$T send-keys -t "$session":console.0 "$left_cmd" C-m
# pane 1 (derecha) = claude, dividiendo horizontalmente (split lado a lado).
$T split-window -h -t "$session":console -c "$cwd"
$T send-keys -t "$session":console.1 "exec claude --dangerously-skip-permissions" C-m
# pane derecho = claude, dividiendo horizontalmente (split lado a lado).
right_pane=$($T split-window -h -t "$left_pane" -c "$cwd" -P -F '#{pane_id}')
$T send-keys -t "$right_pane" "exec claude --dangerously-skip-permissions" C-m
# Fijar el ancho del pane izquierdo en columnas.
$T resize-pane -t "$session":console.0 -x "$cols"
$T resize-pane -t "$left_pane" -x "$cols"
# Foco inicial en el pane de claude (derecha).
$T select-pane -t "$session":console.1
$T select-pane -t "$right_pane"
fi
# Si reutilizamos sesion (o por seguridad), derivar el pane ID de la TUI:
# el primer pane de la ventana 'console' (orden por indice) es el izquierdo.
if [[ -z "$left_pane" ]]; then
left_pane=$($T list-panes -t "$session":console -F '#{pane_id}' 2>/dev/null | head -n1)
fi
# -----------------------------------------------------------------------
@@ -160,17 +172,17 @@ USAGE
# del pane de Claude. La TUI (fleetview) es quien interpreta Up/Down/Enter/n.
# `bind -n` = tabla root (sin prefijo). Idempotente: re-set en cada lanzamiento.
# -----------------------------------------------------------------------
$T bind -n M-Up send-keys -t "$session":console.0 Up
$T bind -n M-Down send-keys -t "$session":console.0 Down
$T bind -n M-Enter send-keys -t "$session":console.0 Enter
$T bind -n M-n send-keys -t "$session":console.0 n
$T bind -n M-0 send-keys -t "$session":console.0 n
$T bind -n M-k send-keys -t "$session":console.0 k
$T bind -n M-r send-keys -t "$session":console.0 r
$T bind -n M-u send-keys -t "$session":console.0 u
$T bind -n M-h send-keys -t "$session":console.0 h
$T bind -n M-Left send-keys -t "$session":console.0 Escape
$T bind -n M-q send-keys -t "$session":console.0 Q
$T bind -n M-Up send-keys -t "$left_pane" Up
$T bind -n M-Down send-keys -t "$left_pane" Down
$T bind -n M-Enter send-keys -t "$left_pane" Enter
$T bind -n M-n send-keys -t "$left_pane" n
$T bind -n M-0 send-keys -t "$left_pane" n
$T bind -n M-k send-keys -t "$left_pane" k
$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-Left send-keys -t "$left_pane" Escape
$T bind -n M-q send-keys -t "$left_pane" Q
# 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
@@ -186,8 +198,8 @@ USAGE
# Mantener el ancho del sidebar (pane 0) cuando kitty redimensiona la ventana
# tras el attach, o cuando se conmuta de Claude (window-linked / layout change).
$T set-hook -g client-resized "resize-pane -t $session:console.0 -x $cols"
$T set-hook -g window-layout-changed "resize-pane -t $session:console.0 -x $cols"
$T set-hook -g client-resized "resize-pane -t $left_pane -x $cols"
$T set-hook -g window-layout-changed "resize-pane -t $left_pane -x $cols"
# -----------------------------------------------------------------------
# Lanzar kitty adjuntando la sesion, DESACOPLADA del shell padre con
@@ -203,6 +215,12 @@ USAGE
if [ -t 0 ] && [ -t 1 ]; then
exec tmux -L fleet attach -t "$session"
fi
# Ruta sin-TTY: necesitamos kitty para abrir la ventana nueva.
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
return 1
fi
setsid kitty --title "FleetView" -e tmux -L fleet attach -t "$session" </dev/null >/dev/null 2>&1 &
disown 2>/dev/null || true