system/scripts/session
#!/bin/bash
# Команда для работы с сессиями Claude Code
# Использование:
#   session               - показать последние сессии
#   session поиск СЛОВО   - найти сессию по слову
#   session подключить N  - подключиться к сессии #N из списка

SCRIPT="/opt/claude-workspace/system/scripts/session_smart_resume.py"

# Снять блокировку вложенных сессий
unset CLAUDECODE

case "$1" in
    --auto)
        # TTY-идентификатор этого окна терминала
        TTY_RAW=$(tty 2>/dev/null)
        if [[ "$TTY_RAW" == *"not a tty"* ]] || [[ -z "$TTY_RAW" ]]; then
            TTY_ID="unknown"
        else
            TTY_ID=$(echo "$TTY_RAW" | tr '/' '_' | tr -d ' ')
        fi
        TTY_FILE="/tmp/.claude_tty_${TTY_ID}"

        session_id=""

        # Приоритет 1: сессия этого TTY-окна (запоминаем между запусками)
        if [[ -f "$TTY_FILE" ]]; then
            tty_session=$(tr -d '[:space:]' < "$TTY_FILE")
            if [[ -n "$tty_session" ]]; then
                exists=$(python3 -c "
import sys
sys.path.insert(0, '/opt/claude-workspace/system/scripts')
from session_smart_resume import parse_history
sessions = parse_history()
print('yes' if any(s['session_id'] == '${tty_session}' for s in sessions) else '')
" 2>/dev/null)
                [[ "$exists" == "yes" ]] && session_id="$tty_session"
            fi
        fi

        # Приоритет 2: сессия [0] из списка (то что видит пользователь)
        if [[ -z "$session_id" ]]; then
            session_id=$(python3 "$SCRIPT" --get-id 0 --mark-resumed 2>/dev/null)
        fi

        if [[ -n "$session_id" ]]; then
            echo "Восстанавливаю сессию..."
            echo "$session_id" > "$TTY_FILE"
            claude --resume "$session_id"
        else
            echo "Нет сессий для восстановления. Запускаю новую..."
            claude
        fi

        # После выхода из claude — сохранить последнюю сессию для этого TTY
        latest=$(python3 -c "
import sys
sys.path.insert(0, '/opt/claude-workspace/system/scripts')
from session_smart_resume import parse_history
s = parse_history()
print(s[0]['session_id'] if s else '')
" 2>/dev/null)
        [[ -n "$latest" ]] && echo "$latest" > "$TTY_FILE"
        ;;

    --choose)
        TTY_RAW=$(tty 2>/dev/null)
        if [[ "$TTY_RAW" == *"not a tty"* ]] || [[ -z "$TTY_RAW" ]]; then
            TTY_ID="unknown"
        else
            TTY_ID=$(echo "$TTY_RAW" | tr '/' '_' | tr -d ' ')
        fi
        TTY_FILE="/tmp/.claude_tty_${TTY_ID}"

        # Показать список и дать выбрать
        python3 "$SCRIPT"

        echo ""
        read -p "Введи номер сессии (0-6) или Enter для отмены: " choice

        # Пустой ввод - отмена
        if [[ -z "$choice" ]]; then
            echo "Отменено. Запускаю новую сессию..."
            sleep 1
            claude
        else
            # Получить session_id с пометкой resumed
            session_id=$(python3 "$SCRIPT" --get-id "$choice" --mark-resumed 2>/dev/null)

            if [[ -z "$session_id" ]]; then
                echo "Сессия не найдена"
                exit 1
            fi

            echo ""
            echo "Подключаюсь к сессии #$choice..."
            echo "$session_id" > "$TTY_FILE"
            claude --resume "$session_id"
        fi

        # После выхода из claude — сохранить последнюю сессию для этого TTY
        latest=$(python3 -c "
import sys
sys.path.insert(0, '/opt/claude-workspace/system/scripts')
from session_smart_resume import parse_history
s = parse_history()
print(s[0]['session_id'] if s else '')
" 2>/dev/null)
        [[ -n "$latest" ]] && echo "$latest" > "$TTY_FILE"
        ;;

    поиск|search|найти)
        if [[ -z "$2" ]]; then
            echo "Использование: session поиск СЛОВО"
            exit 1
        fi

        echo "Ищу сессии со словом: $2"
        echo ""

        # Поиск
        python3 "$SCRIPT" --search "$2"

        echo ""
        echo "Для подключения к сессии используй ID:"
        echo "  claude --resume <session_id>"
        ;;

    подключить|resume|connect)
        if [[ -z "$2" ]]; then
            echo "Использование: session подключить НОМЕР"
            exit 1
        fi

        # Получить session_id
        session_id=$(python3 "$SCRIPT" --get-id "$2" 2>/dev/null)

        if [[ -z "$session_id" ]]; then
            echo "Сессия #$2 не найдена"
            exit 1
        fi

        echo "Подключаюсь к сессии #$2..."
        exec claude --resume "$session_id"
        ;;

    помощь|help|-h|--help)
        cat << 'EOF'
Команда для работы с сессиями Claude Code

ИСПОЛЬЗОВАНИЕ:
  session                    - показать последние сессии
  session поиск СЛОВО        - найти сессию по слову
  session подключить N       - подключиться к сессии #N

ПРИМЕРЫ:
  session                    # показать список
  session поиск озон         # найти сессии про OZON
  session поиск меню         # найти сессии про меню
  session подключить 3       # подключиться к сессии #3

ПРЯМОЕ ПОДКЛЮЧЕНИЕ:
  claude --resume <session_id>

EOF
        ;;

    *)
        # Показать интерактивный список
        python3 "$SCRIPT"

        echo ""
        read -p "Введи номер сессии (0-7) или Enter для пункта [0]: " choice

        # По умолчанию - пункт 0
        if [[ -z "$choice" ]]; then
            choice="0"
        fi

        # Получить session_id с пометкой resumed
        session_id=$(python3 "$SCRIPT" --get-id "$choice" --mark-resumed 2>/dev/null)

        if [[ -z "$session_id" ]]; then
            echo "Сессия не найдена"
            exit 1
        fi

        echo ""
        if [[ "$choice" == "0" ]]; then
            echo "Восстанавливаю следующую оборванную сессию..."
        else
            echo "Подключаюсь к сессии #$choice..."
        fi
        exec claude --resume "$session_id"
        ;;
esac