From 789f1d2d67d1c254ba5845bbf914e2d589459722 Mon Sep 17 00:00:00 2001 From: Worm Date: Wed, 18 Feb 2026 11:55:46 +0800 Subject: [PATCH] Remove local tmux scripts and xmpp patch from PR --- .../skills/tmux/scripts/find-sessions.sh | 112 ------------------ .../skills/tmux/scripts/wait-for-text.sh | 83 ------------- xmpp-channel.patch | Bin 57162 -> 0 bytes 3 files changed, 195 deletions(-) delete mode 100644 workspace/skills/tmux/scripts/find-sessions.sh delete mode 100644 workspace/skills/tmux/scripts/wait-for-text.sh delete mode 100644 xmpp-channel.patch 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 cd513dfcae3865059beebc98cdc08b20db63a03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57162 zcmd^|`EndblBermuGzi=1hba0MG@dlN;@+q3Itme4^aRpO0AW#N$|cK07X(7J;lD! zJj^`C?*6{;@^X*J%(_7K_U;-CKxS4P9)7!rN7n!PpZ7;kMi2F~GCHoGN4h)E_1)3B zu3wGTMlbaDzMkA`p8VI*e^J|)`s~5zojyM^I;Bz0tKEHFt?B2~=w$iyuKwOri<6@h z`Z=eTXGZj9zT-V}@!7HR(?9E1qp#HKxW>CM`dq&&YHQbD=-NKr6I6d6y%B_5t&EPA z8COO}#w&cR&+ZAvU9IkgR<^HI)AB%19_wmdR}aclu=8Fc{Hi(D^lN{CadxG(<55X1NDBcwZGBzn*OuGcl!H$vd+7@^SMu!{$~WIL2{x{4r-m!*nE0Q zSmrM+b_Kx&{l7cVPYO_ z7bADIU3}*JbV~elUR;EZJ0>}ZJ8OZqUWCezMe8r6+un_S5DnHxe;NHYx~SjH(QRqY zYol+3iC>Gpx}rHxj;@Zj_5ZPcZm9hWwfaso-d3vS)yhDQ0RD;KH@Y(VtDZg? z-4et%)OJ%+usOOufv}(Zrg5`DbxR{M&Vw@NIgNT>S9gWYcbaiS5Iof16XK7jy1pW4 z-i$5@hmVUcI3X$gT2Oy28GNhjcf#LW{W#thg{mKOm$lv>rMJJ)UpV86VER@x+|}1=BdDGTmluVvTY~(Z;D4ks?o01{uO3&%Fdo5En&+>&x-NJg3BGl;x~9AHg88MOcq~c#QMmf8 z;PA09Y*l%0{gf6{CllnLwCQ4`>zXI7XP@x!Z9>%{_-0$I!`S5&!GoM%6b`==oWJS!tuVbWPT?Pr7_Bv~y z!Mq#C{d;lD_u_`HHPd(ED|}|WsxLIxc|m(uSiUB>PKb-H2p0V4`{n6NwYjVouLUi< z_)vd$^yGWBTMnjvtliMMcQopI&Ap|+$Aq!7g6h7wU`z8~)pM}&qd5AcFbwDK2$l=F z`cbePXdPdOhpr386T;XV-TyR(@Yn*H0-x6S^`^!@SM=6-!LqB_ztG)X{a)1dx0>a& z@USZ$e5&zzhR(k#=-%n-uGaIT=y^_Ujurd1C;B=a7lUXBV^=l9B}qS;^qJ)0SkdNS z;F>V`RO>%2C?4wn8)5K_VA~cCTo!!K1noWH?u9}$L0ng_|Yv;Hj z?9GO*ACvD3T{i^jDb09HIC&w8eJ8lCiRQ0`;j6lTCa%0Dd?U{rYVkyCJJ9o=1l@W4 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

{W!#zz(&Lw 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