diff --git a/workspace/skills/tmux/scripts/find-sessions.sh b/workspace/skills/tmux/scripts/find-sessions.sh deleted file mode 100644 index 00552c684..000000000 --- a/workspace/skills/tmux/scripts/find-sessions.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -usage() { - cat <<'USAGE' -Usage: find-sessions.sh [-L socket-name|-S socket-path|-A] [-q pattern] - -List tmux sessions on a socket (default tmux socket if none provided). - -Options: - -L, --socket tmux socket name (passed to tmux -L) - -S, --socket-path tmux socket path (passed to tmux -S) - -A, --all scan all sockets under NANOBOT_TMUX_SOCKET_DIR - -q, --query case-insensitive substring to filter session names - -h, --help show this help -USAGE -} - -socket_name="" -socket_path="" -query="" -scan_all=false -socket_dir="${NANOBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/nanobot-tmux-sockets}" - -while [[ $# -gt 0 ]]; do - case "$1" in - -L|--socket) socket_name="${2-}"; shift 2 ;; - -S|--socket-path) socket_path="${2-}"; shift 2 ;; - -A|--all) scan_all=true; shift ;; - -q|--query) query="${2-}"; shift 2 ;; - -h|--help) usage; exit 0 ;; - *) echo "Unknown option: $1" >&2; usage; exit 1 ;; - esac -done - -if [[ "$scan_all" == true && ( -n "$socket_name" || -n "$socket_path" ) ]]; then - echo "Cannot combine --all with -L or -S" >&2 - exit 1 -fi - -if [[ -n "$socket_name" && -n "$socket_path" ]]; then - echo "Use either -L or -S, not both" >&2 - exit 1 -fi - -if ! command -v tmux >/dev/null 2>&1; then - echo "tmux not found in PATH" >&2 - exit 1 -fi - -list_sessions() { - local label="$1"; shift - local tmux_cmd=(tmux "$@") - - if ! sessions="$("${tmux_cmd[@]}" list-sessions -F '#{session_name}\t#{session_attached}\t#{session_created_string}' 2>/dev/null)"; then - echo "No tmux server found on $label" >&2 - return 1 - fi - - if [[ -n "$query" ]]; then - sessions="$(printf '%s\n' "$sessions" | grep -i -- "$query" || true)" - fi - - if [[ -z "$sessions" ]]; then - echo "No sessions found on $label" - return 0 - fi - - echo "Sessions on $label:" - printf '%s\n' "$sessions" | while IFS=$'\t' read -r name attached created; do - attached_label=$([[ "$attached" == "1" ]] && echo "attached" || echo "detached") - printf ' - %s (%s, started %s)\n' "$name" "$attached_label" "$created" - done -} - -if [[ "$scan_all" == true ]]; then - if [[ ! -d "$socket_dir" ]]; then - echo "Socket directory not found: $socket_dir" >&2 - exit 1 - fi - - shopt -s nullglob - sockets=("$socket_dir"/*) - shopt -u nullglob - - if [[ "${#sockets[@]}" -eq 0 ]]; then - echo "No sockets found under $socket_dir" >&2 - exit 1 - fi - - exit_code=0 - for sock in "${sockets[@]}"; do - if [[ ! -S "$sock" ]]; then - continue - fi - list_sessions "socket path '$sock'" -S "$sock" || exit_code=$? - done - exit "$exit_code" -fi - -tmux_cmd=(tmux) -socket_label="default socket" - -if [[ -n "$socket_name" ]]; then - tmux_cmd+=(-L "$socket_name") - socket_label="socket name '$socket_name'" -elif [[ -n "$socket_path" ]]; then - tmux_cmd+=(-S "$socket_path") - socket_label="socket path '$socket_path'" -fi - -list_sessions "$socket_label" "${tmux_cmd[@]:1}" diff --git a/workspace/skills/tmux/scripts/wait-for-text.sh b/workspace/skills/tmux/scripts/wait-for-text.sh deleted file mode 100644 index 56354be83..000000000 --- a/workspace/skills/tmux/scripts/wait-for-text.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -usage() { - cat <<'USAGE' -Usage: wait-for-text.sh -t target -p pattern [options] - -Poll a tmux pane for text and exit when found. - -Options: - -t, --target tmux target (session:window.pane), required - -p, --pattern regex pattern to look for, required - -F, --fixed treat pattern as a fixed string (grep -F) - -T, --timeout seconds to wait (integer, default: 15) - -i, --interval poll interval in seconds (default: 0.5) - -l, --lines number of history lines to inspect (integer, default: 1000) - -h, --help show this help -USAGE -} - -target="" -pattern="" -grep_flag="-E" -timeout=15 -interval=0.5 -lines=1000 - -while [[ $# -gt 0 ]]; do - case "$1" in - -t|--target) target="${2-}"; shift 2 ;; - -p|--pattern) pattern="${2-}"; shift 2 ;; - -F|--fixed) grep_flag="-F"; shift ;; - -T|--timeout) timeout="${2-}"; shift 2 ;; - -i|--interval) interval="${2-}"; shift 2 ;; - -l|--lines) lines="${2-}"; shift 2 ;; - -h|--help) usage; exit 0 ;; - *) echo "Unknown option: $1" >&2; usage; exit 1 ;; - esac -done - -if [[ -z "$target" || -z "$pattern" ]]; then - echo "target and pattern are required" >&2 - usage - exit 1 -fi - -if ! [[ "$timeout" =~ ^[0-9]+$ ]]; then - echo "timeout must be an integer number of seconds" >&2 - exit 1 -fi - -if ! [[ "$lines" =~ ^[0-9]+$ ]]; then - echo "lines must be an integer" >&2 - exit 1 -fi - -if ! command -v tmux >/dev/null 2>&1; then - echo "tmux not found in PATH" >&2 - exit 1 -fi - -# End time in epoch seconds (integer, good enough for polling) -start_epoch=$(date +%s) -deadline=$((start_epoch + timeout)) - -while true; do - # -J joins wrapped lines, -S uses negative index to read last N lines - pane_text="$(tmux capture-pane -p -J -t "$target" -S "-${lines}" 2>/dev/null || true)" - - if printf '%s\n' "$pane_text" | grep $grep_flag -- "$pattern" >/dev/null 2>&1; then - exit 0 - fi - - now=$(date +%s) - if (( now >= deadline )); then - echo "Timed out after ${timeout}s waiting for pattern: $pattern" >&2 - echo "Last ${lines} lines from $target:" >&2 - printf '%s\n' "$pane_text" >&2 - exit 1 - fi - - sleep "$interval" -done diff --git a/xmpp-channel.patch b/xmpp-channel.patch deleted file mode 100644 index cd513dfca..000000000 Binary files a/xmpp-channel.patch and /dev/null differ