feat(scripts): add kill command for tmux sessions

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-20 17:22:53 -07:00
parent 7eabb4fcff
commit 6eda3851a9

View file

@ -843,6 +843,63 @@ EOF
[ "$_sent" -gt 0 ] [ "$_sent" -gt 0 ]
} }
cmd_kill() {
# Kill live tmux sessions (ends the claude process inside). Mirrors
# cmd_send's selector + local/remote dispatch. Used by supervisors
# (clare web) to recycle stale orchestrator sessions.
_sel=""; _pat=""; _yes=0
while [ $# -gt 0 ]; do
case $1 in
--all) _sel=all; shift ;;
--host) shift; _sel=host; _pat=${1:-}; shift ;;
--host=*) _sel=host; _pat=${1#--host=}; shift ;;
--match) shift; _sel=match; _pat=${1:-}; shift ;;
--match=*) _sel=match; _pat=${1#--match=}; shift ;;
--yes) _yes=1; shift ;;
*) break ;;
esac
done
if [ -z "$_sel" ]; then
cat >&2 <<'EOF'
usage: rclaude kill (--all | --host <h> | --match <pat>) [--yes]
Kills live claude-* tmux sessions (ends the claude process inside).
--yes is required to actually kill (dry-run preview otherwise).
EOF
exit 2
fi
_rows=$(scan_hosts | while IFS= read -r _h; do list_tmux_on "$_h"; done \
| filter_targets "$_sel" "$_pat")
if [ -z "$_rows" ]; then
echo "rclaude kill: no matching sessions" >&2
exit 2
fi
echo "Targets:"
printf '%s\n' "$_rows" | awk -F '\t' '{ printf " %-12s %s\n", $1, $3 }'
if [ "$_yes" != 1 ]; then
echo "(dry-run — pass --yes to kill)"
exit 0
fi
_total=0; _failed=0
_rowfile=$(mktemp /tmp/rclaude-kill.XXXXXX 2>/dev/null || echo /tmp/rclaude-kill.$$)
printf '%s\n' "$_rows" > "$_rowfile"
while IFS=$(printf '\t') read -r _host _kind _sess _detail; do
[ -z "$_sess" ] && continue
_total=$((_total + 1))
if is_local "$_host"; then
tmux kill-session -t "$_sess" 2>/dev/null || _failed=$((_failed + 1))
else
_q_sess=$(sh_quote "$_sess")
ssh -o BatchMode=yes -o ConnectTimeout=3 "$_host" \
"tmux kill-session -t $_q_sess" </dev/null >/dev/null 2>&1 \
|| _failed=$((_failed + 1))
fi
done < "$_rowfile"
rm -f "$_rowfile"
_killed=$((_total - _failed))
echo "Killed $_killed of $_total session(s)."
[ "$_killed" -gt 0 ]
}
# Resume strategy: # Resume strategy:
# - 1 match → attach directly # - 1 match → attach directly
# - 2+ matches → single-key picker (1-9 then a-z, max 35) # - 2+ matches → single-key picker (1-9 then a-z, max 35)
@ -1410,6 +1467,7 @@ case ${1:-} in
resume) shift; cmd_resume "$@"; exit ;; resume) shift; cmd_resume "$@"; exit ;;
triage) shift; cmd_triage "$@"; exit ;; triage) shift; cmd_triage "$@"; exit ;;
send) shift; cmd_send "$@"; exit ;; send) shift; cmd_send "$@"; exit ;;
kill) shift; cmd_kill "$@"; exit ;;
setup|install) shift; cmd_setup "$@"; exit ;; setup|install) shift; cmd_setup "$@"; exit ;;
voice) shift; cmd_voice "$@"; exit ;; voice) shift; cmd_voice "$@"; exit ;;
-v|--version) cmd_version; exit ;; -v|--version) cmd_version; exit ;;