Skip to content

Commit 5113760

Browse files
committed
arch: add baudbot attach and sessions commands
baudbot sessions — lists all tmux sessions and pi agent sessions under the baudbot_agent user, with running/stopped status. baudbot attach [name] — attaches to a tmux session. Defaults to the first available session if no name given. Useful for inspecting the slack-bridge or agent output.
1 parent 990e2a7 commit 5113760

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

bin/baudbot

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ usage() {
4848
echo " restart Restart the agent"
4949
echo " status Show agent status"
5050
echo " logs Tail agent logs"
51+
echo " attach Attach to a tmux session (default: control-agent)"
52+
echo " sessions List agent tmux and pi sessions"
5153
echo ""
5254
echo -e "${BOLD}Setup:${RESET}"
5355
echo " setup One-time system setup (user, deps, firewall, systemd)"
@@ -144,6 +146,78 @@ case "${1:-}" in
144146
fi
145147
;;
146148

149+
sessions)
150+
shift
151+
AGENT_USER="baudbot_agent"
152+
echo -e "${BOLD}tmux sessions:${RESET}"
153+
if sudo -u "$AGENT_USER" tmux ls 2>/dev/null; then
154+
:
155+
else
156+
echo " (none)"
157+
fi
158+
echo ""
159+
echo -e "${BOLD}pi sessions:${RESET}"
160+
PI_SESSIONS_DIR="/home/$AGENT_USER/.pi/agent/sessions"
161+
if [ -d "$PI_SESSIONS_DIR" ]; then
162+
found=0
163+
for sess_dir in "$PI_SESSIONS_DIR"/*/; do
164+
[ -d "$sess_dir" ] || continue
165+
sess_id=$(basename "$sess_dir")
166+
name=""
167+
status="unknown"
168+
# Check if control socket exists (session is live)
169+
if [ -e "$sess_dir/control.sock" ]; then
170+
status="running"
171+
elif [ -f "$sess_dir/pid" ]; then
172+
pid=$(cat "$sess_dir/pid" 2>/dev/null || echo "")
173+
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
174+
status="running"
175+
else
176+
status="stopped"
177+
fi
178+
else
179+
status="stopped"
180+
fi
181+
# Try to read session name
182+
if [ -f "$sess_dir/name" ]; then
183+
name=$(cat "$sess_dir/name" 2>/dev/null || echo "")
184+
fi
185+
if [ -n "$name" ]; then
186+
echo " $name ($sess_id) [$status]"
187+
else
188+
echo " $sess_id [$status]"
189+
fi
190+
found=$((found + 1))
191+
done
192+
if [ "$found" -eq 0 ]; then
193+
echo " (none)"
194+
fi
195+
else
196+
echo " (no sessions directory)"
197+
fi
198+
;;
199+
200+
attach)
201+
shift
202+
AGENT_USER="baudbot_agent"
203+
TARGET="${1:-}"
204+
if [ -z "$TARGET" ]; then
205+
# Default: attach to first available tmux session
206+
FIRST_SESSION=$(sudo -u "$AGENT_USER" tmux ls -F '#{session_name}' 2>/dev/null | head -1)
207+
if [ -n "$FIRST_SESSION" ]; then
208+
TARGET="$FIRST_SESSION"
209+
else
210+
echo "No tmux sessions running. Start the agent first:"
211+
echo " sudo baudbot start"
212+
exit 1
213+
fi
214+
fi
215+
echo "Attaching to tmux session: $TARGET"
216+
echo "Detach with: Ctrl+b, d"
217+
echo ""
218+
exec sudo -u "$AGENT_USER" tmux attach-session -t "$TARGET"
219+
;;
220+
147221
setup)
148222
shift
149223
require_root "setup"

0 commit comments

Comments
 (0)