#!/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