Funcion nueva detect_fleet_context_bash_infra (tag orchestration). Deriva
socket/session de $TMUX (senal fiable que todo proceso dentro de tmux tiene
siempre), con fallback a $FLEET_SOCKET/$FLEET_SESSION. Devuelve JSON
{in_fleet,in_tmux,socket,session,source}. Causa raiz del bug: $FLEET_SOCKET
(exportada con tmux set-environment -g por launch_fleetclaude) a veces viene
vacia en un claude resumido/relanzado pese a vivir en la flota, y el modo
orquestador caia al fallback kitty. .md self-doc (Ejemplo + Cuando usarla +
Gotchas).
4.5 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | file_path | params | output | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| detect_fleet_context | function | bash | infra | 1.0.0 | impure | detect_fleet_context() -> JSON {in_fleet,in_tmux,socket,session,source} | Detecta de forma robusta si el proceso corre dentro de una flota tmux FleetView, derivando socket y sesion de $TMUX (senal fiable) en vez de $FLEET_SOCKET (fragil, a veces vacia en un claude resumido/relanzado). Salida JSON con in_fleet/in_tmux/socket/session/source. |
|
false | error_go_core | false | bash/functions/infra/detect_fleet_context.sh |
|
JSON en stdout: {"in_fleet":bool, "in_tmux":bool, "socket":str, "session":str, "source":"tmux|fleet_socket|none"}. in_tmux=true basta para lanzar una window; in_fleet es la senal semantica de 'estoy en una flota'. |
detect_fleet_context
Detecta el contexto de flota del proceso actual sin depender de $FLEET_SOCKET.
Por que existe
La deteccion de "estoy en una flota FleetView" dependia de la variable de
entorno $FLEET_SOCKET, que launch_fleetclaude exporta con
tmux set-environment -g. Esa variable solo llega a los procesos que tmux
arranca despues de setearla: un claude relanzado o resumido a mano puede
no heredarla y $FLEET_SOCKET queda vacia, aunque ese claude SI viva en una
window de la flota. Cuando eso pasa, el modo orquestador cae al fallback kitty
(launch_claude_agent_kitty) y lanza ejecutores en terminales sueltas en vez de
como windows de la flota.
La senal fiable es $TMUX: todo proceso dentro de tmux la tiene SIEMPRE, con
el formato /tmp/tmux-<uid>/<socket>,<server_pid>,<client_id>. De ahi se extrae
el socket (basename del path antes de la primera coma) y, con
tmux -L <socket> display-message -p '#{session_name}', la sesion actual.
Salida
{"in_fleet":true,"in_tmux":true,"socket":"fleet3","session":"fleet3","source":"tmux"}
| Campo | Significado |
|---|---|
in_fleet |
Heuristica de "estoy en una flota". true si en tmux Y (socket/sesion casan fleet, O hay window fleetview, O la sesion tiene >= 2 windows). |
in_tmux |
true si el proceso esta dentro de tmux. Basta para lanzar una window (mejor que caer a kitty). |
socket |
Socket tmux derivado de $TMUX (o de $FLEET_SOCKET en fallback). |
session |
Sesion tmux actual resuelta con display-message (fallback a $FLEET_SESSION o al socket). |
source |
tmux (derivado de $TMUX), fleet_socket (fallback), o none. |
Ejemplo
# Dentro de una window de la flota fleet3:
bash bash/functions/infra/detect_fleet_context.sh
# {"in_fleet":true,"in_tmux":true,"socket":"fleet3","session":"fleet3","source":"tmux"}
# Fuera de tmux, sin FLEET_SOCKET:
env -u TMUX -u FLEET_SOCKET bash bash/functions/infra/detect_fleet_context.sh
# {"in_fleet":false,"in_tmux":false,"socket":"","session":"","source":"none"}
# Parsear el socket con jq para pasarlo a spawn_fleet_agent:
ctx=$(bash bash/functions/infra/detect_fleet_context.sh)
sock=$(printf '%s' "$ctx" | jq -r .socket)
Cuando usarla
Antes de lanzar un ejecutor de la flota: llama a esta funcion para saber si
estas dentro de una flota tmux. Si in_tmux=true, lanza con spawn_fleet_agent
(que ya la usa para auto-detectar el socket); NUNCA caigas a kitty. Tambien la
usa el hook hook_fleet_state_inject.sh para recordarle al orquestador el socket
de su flota cada turno.
Gotchas
- Es impura: consulta el servidor tmux (
display-message,list-windows). No modifica estado. in_fleetes heuristico a proposito. Para LANZAR bastain_tmux=true(lanzar una window en cualquier tmux supera a una kitty suelta).in_fleetes solo la senal semantica que consume el hook y la doctrina.- Fallback
source=fleet_socket: si$TMUXno esta pero$FLEET_SOCKETsi, devuelvesocket/sessionde esas vars conin_tmux=false. Untmux -L <socket> new-windowpuede seguir funcionando si el servidor existe, aunque el caller no este attached. - No requiere
jqni python: emite el JSON conprintf, para poder ser el detector base que invocan hooks y otras funciones bash. - Si
tmuxno esta instalado y$TMUXesta seteada (raro),socketse deriva igual de$TMUXperosessioncae al fallback yin_fleetno se puede afinar por windows.