feat(fleet): make bazina default for af; add unique identifier and architecture sign to bin-env, fleet-id, and fleet-beacon
This commit is contained in:
@@ -1,48 +1,51 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ~/bin/af - Antigravity Fleet Unified Session Connector
|
# ~/bin/af - Antigravity Fleet Unified Session Connector
|
||||||
# Attaches to the central persistent Antigravity CLI session on bazina.
|
# Attaches to the central persistent Antigravity CLI session (default: bazina).
|
||||||
|
|
||||||
SESSION_NAME="agy"
|
SESSION_NAME="agy"
|
||||||
CENTRAL_HOST="bazina"
|
DEFAULT_HOST="bazina"
|
||||||
CENTRAL_IP="192.168.1.104"
|
DEFAULT_IP="192.168.1.104"
|
||||||
CENTRAL_LEGACY_IP="10.0.0.15"
|
FALLBACK_HOST="boxC"
|
||||||
|
FALLBACK_IP="192.168.1.101"
|
||||||
REMOTE_PORT="2222"
|
REMOTE_PORT="2222"
|
||||||
EXTERNAL_HOST="home"
|
EXTERNAL_HOST="home"
|
||||||
|
DEFAULT_CONV="9860fe31-3526-48d1-9063-3e58e630faf9"
|
||||||
|
|
||||||
# Ensure -c (continue previous session) is always included unless already specified
|
# Determine current node
|
||||||
HAS_CONTINUE=false
|
CURRENT_HOST="$(hostname -s 2>/dev/null || uname -n)"
|
||||||
for arg in "$@"; do
|
if [ -n "$TERMUX_VERSION" ] || [ -d "/data/data/com.termux" ]; then
|
||||||
if [[ "$arg" == "-c" || "$arg" == "--continue" || "$arg" == --conversation* ]]; then
|
CURRENT_HOST="phone"
|
||||||
HAS_CONTINUE=true
|
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "$HAS_CONTINUE" == false ]]; then
|
# Build agy conversation parameter if not already supplied
|
||||||
AGY_ARGS=("-c" "$@")
|
AGY_INVOCATION="agy"
|
||||||
|
if [[ "$*" != *"--conversation"* ]] && [[ -n "$DEFAULT_CONV" ]]; then
|
||||||
|
AGY_INVOCATION="agy --conversation=$DEFAULT_CONV"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$CURRENT_HOST" == "bazina" ]]; then
|
||||||
|
# Already on default node (bazina): attach or create local tmux session
|
||||||
|
exec tmux new-session -A -s "$SESSION_NAME" $AGY_INVOCATION "$@"
|
||||||
|
elif [[ "$CURRENT_HOST" == "boxC" || "$CURRENT_HOST" == "B" ]]; then
|
||||||
|
# On boxC: connect to bazina if reachable, otherwise fall back to local boxC session
|
||||||
|
if ping -c 1 -W 1 "$DEFAULT_IP" &>/dev/null || ssh -o BatchMode=yes -o ConnectTimeout=2 "$DEFAULT_HOST" "true" &>/dev/null; then
|
||||||
|
exec ssh -t "$DEFAULT_HOST" "tmux new-session -A -s '$SESSION_NAME' $AGY_INVOCATION $*"
|
||||||
else
|
else
|
||||||
AGY_ARGS=("$@")
|
echo "[af] bazina is unreachable from boxC; falling back to local boxC session..."
|
||||||
|
exec tmux new-session -A -s "$SESSION_NAME" $AGY_INVOCATION "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine current hostname
|
|
||||||
CURRENT_HOST="$(hostname)"
|
|
||||||
|
|
||||||
# Prevent tmux nesting error if already inside another tmux session
|
|
||||||
unset TMUX
|
|
||||||
|
|
||||||
if [[ "$CURRENT_HOST" == "$CENTRAL_HOST" ]]; then
|
|
||||||
# Already on central node (bazina): attach or create local tmux session
|
|
||||||
exec tmux new-session -A -s "$SESSION_NAME" agy "${AGY_ARGS[@]}"
|
|
||||||
else
|
else
|
||||||
# Remote node (t520, boxC, penguin, or phone)
|
# Remote node (t520, penguin, android/phone, etc.)
|
||||||
CMD_ARGS=$(printf "%q " "${AGY_ARGS[@]}")
|
# 1. Try default node (bazina) on LAN
|
||||||
|
if ping -c 1 -W 1 "$DEFAULT_IP" &>/dev/null || ssh -o BatchMode=yes -o ConnectTimeout=2 "$DEFAULT_HOST" "true" &>/dev/null; then
|
||||||
# 1. Try local LAN first (by hostname or IP)
|
exec ssh -t "$DEFAULT_HOST" "tmux new-session -A -s '$SESSION_NAME' $AGY_INVOCATION $*"
|
||||||
if ping -c 1 -W 1 "$CENTRAL_HOST" &>/dev/null || ping -c 1 -W 1 "$CENTRAL_IP" &>/dev/null || ping -c 1 -W 1 "$CENTRAL_LEGACY_IP" &>/dev/null; then
|
# 2. Fallback to boxC on LAN
|
||||||
exec ssh -t "$CENTRAL_HOST" "tmux new-session -A -s '$SESSION_NAME' agy $CMD_ARGS"
|
elif ping -c 1 -W 1 "$FALLBACK_IP" &>/dev/null || ssh -o BatchMode=yes -o ConnectTimeout=2 "$FALLBACK_HOST" "true" &>/dev/null; then
|
||||||
|
echo "[af] bazina unreachable; falling back to boxC on LAN..."
|
||||||
|
exec ssh -t "$FALLBACK_HOST" "tmux new-session -A -s '$SESSION_NAME' $AGY_INVOCATION $*"
|
||||||
|
# 3. Fallback to external SSH via home gateway
|
||||||
else
|
else
|
||||||
# 2. Fallback to external SSH via home gateway (boxC) jumping to bazina
|
echo "[af] LAN unreachable; attempting external gateway fallback..."
|
||||||
echo "LAN connection to $CENTRAL_HOST unreachable, attempting external fallback via $EXTERNAL_HOST..."
|
exec ssh -p "$REMOTE_PORT" -t "$EXTERNAL_HOST" "tmux new-session -A -s '$SESSION_NAME' $AGY_INVOCATION $*"
|
||||||
exec ssh -p "$REMOTE_PORT" -t "$EXTERNAL_HOST" "ssh -t '$CENTRAL_HOST' \"tmux new-session -A -s '$SESSION_NAME' agy $CMD_ARGS\""
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,14 +1,41 @@
|
|||||||
# ~/bin/bin-env — Architecture-Aware Fleet Path Setup
|
# ~/bin/bin-env — Architecture-Aware Fleet Path & Identity Setup
|
||||||
# Sourced in ~/.bashrc and ~/.zshrc across t520, bazina, boxC, penguin, phone
|
# Sourced in ~/.bashrc and ~/.zshrc across t520, bazina, boxC, penguin, android
|
||||||
|
|
||||||
_ARCH="$(uname -m)"
|
_ARCH="$(uname -m)"
|
||||||
if [ -d "$HOME/bin/arch/$_ARCH" ]; then
|
export FLEET_ARCH="$_ARCH"
|
||||||
|
|
||||||
|
# Determine unique fleet node ID
|
||||||
|
if [ -n "$TERMUX_VERSION" ] || [ -d "/data/data/com.termux" ]; then
|
||||||
|
export FLEET_NODE="android"
|
||||||
|
elif [ -f "/etc/fleet_id" ]; then
|
||||||
|
# Load explicit machine identifier if present
|
||||||
|
. /etc/fleet_id 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$FLEET_NODE" ]; then
|
||||||
|
_HOST="$(hostname -s 2>/dev/null || uname -n)"
|
||||||
|
case "$_HOST" in
|
||||||
|
t520*|workstation*) export FLEET_NODE="t520" ;;
|
||||||
|
bazina*) export FLEET_NODE="bazina" ;;
|
||||||
|
boxC*|B) export FLEET_NODE="boxC" ;;
|
||||||
|
penguin*|crostini*) export FLEET_NODE="penguin" ;;
|
||||||
|
localhost|android*) export FLEET_NODE="android" ;;
|
||||||
|
*) export FLEET_NODE="$_HOST" ;;
|
||||||
|
esac
|
||||||
|
unset _HOST
|
||||||
|
fi
|
||||||
|
|
||||||
|
export FLEET_SIGN="[${FLEET_NODE}:${FLEET_ARCH}]"
|
||||||
|
|
||||||
|
# Architecture-specific binary path
|
||||||
|
if [ -d "$HOME/bin/arch/$FLEET_ARCH" ]; then
|
||||||
case ":$PATH:" in
|
case ":$PATH:" in
|
||||||
*":$HOME/bin/arch/$_ARCH:"*) ;;
|
*":$HOME/bin/arch/$FLEET_ARCH:"*) ;;
|
||||||
*) export PATH="$HOME/bin/arch/$_ARCH:$PATH" ;;
|
*) export PATH="$HOME/bin/arch/$FLEET_ARCH:$PATH" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# General ~/bin path
|
||||||
case ":$PATH:" in
|
case ":$PATH:" in
|
||||||
*":$HOME/bin:"*) ;;
|
*":$HOME/bin:"*) ;;
|
||||||
*) export PATH="$HOME/bin:$PATH" ;;
|
*) export PATH="$HOME/bin:$PATH" ;;
|
||||||
|
|||||||
@@ -138,6 +138,9 @@ def main():
|
|||||||
payload = {
|
payload = {
|
||||||
"name": hostname,
|
"name": hostname,
|
||||||
"hostname": hostname,
|
"hostname": hostname,
|
||||||
|
"node": hostname,
|
||||||
|
"arch": os.uname().machine,
|
||||||
|
"sign": f"[{hostname}:{os.uname().machine}]",
|
||||||
"timestamp": time.time(),
|
"timestamp": time.time(),
|
||||||
"cpu_percent": cpu_pct,
|
"cpu_percent": cpu_pct,
|
||||||
"mem_used_gb": mem_used,
|
"mem_used_gb": mem_used,
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# fleet-id: Print unique identifier, architecture, and badge for current fleet node
|
||||||
|
|
||||||
|
if [ -z "$FLEET_NODE" ] || [ -z "$FLEET_ARCH" ]; then
|
||||||
|
[ -f "$HOME/bin/bin-env" ] && source "$HOME/bin/bin-env" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
FLEET_NODE="${FLEET_NODE:-$(hostname -s 2>/dev/null || uname -n)}"
|
||||||
|
FLEET_ARCH="${FLEET_ARCH:-$(uname -m)}"
|
||||||
|
FLEET_SIGN="${FLEET_SIGN:-[${FLEET_NODE}:${FLEET_ARCH}]}"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--node|-n)
|
||||||
|
echo "$FLEET_NODE"
|
||||||
|
;;
|
||||||
|
--arch|-a)
|
||||||
|
echo "$FLEET_ARCH"
|
||||||
|
;;
|
||||||
|
--sign|-s)
|
||||||
|
echo "$FLEET_SIGN"
|
||||||
|
;;
|
||||||
|
--json|-j)
|
||||||
|
printf '{"node":"%s","arch":"%s","sign":"%s","hostname":"%s"}\n' \
|
||||||
|
"$FLEET_NODE" "$FLEET_ARCH" "$FLEET_SIGN" "$(hostname 2>/dev/null || uname -n)"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "FLEET_NODE=$FLEET_NODE"
|
||||||
|
echo "FLEET_ARCH=$FLEET_ARCH"
|
||||||
|
echo "FLEET_SIGN=$FLEET_SIGN"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user