architect/arh/history/claude-code-setup/STARTUP_SYSTEM.md

🚀 СИСТЕМА СТАРТОВОГО МЕНЮ И СЕССИЙ

Версия: 1.0
Дата: 2025-11-21
Статус: Интеграция с существующей системой


📋 ОБЗОР

Система стартового меню интегрирована с существующим механизмом восстановления сессий (.claude/SESSION_RECOVERY.md).

Ключевое решение: Минимальные изменения от стандарта Claude Code.


🗂️ СТРУКТУРА ФАЙЛОВ

$WORKSPACE/
├── CLAUDE.md                          # Точка входа (v8.0.1)
├── start-menu.md                      # Главное меню (v1.0.1)
│
├── platform/
│   └── start-menu.md                  # Меню работы с проектами (v1.0.0)
│
└── .claude/
    ├── SESSION_RECOVERY.md            # Система сессий (v1.1)
    │                                  # + секция "ПОДДЕРЖКА НЕСКОЛЬКИХ ТЕРМИНАЛОВ"
    └── sessions/
        ├── current.json               # Главный терминал (pts/0)
        ├── current_pts_1.json         # Дополнительный терминал 1
        ├── current_pts_2.json         # Дополнительный терминал 2
        └── interruptions.log          # Общий лог прерываний

🔄 ПОСЛЕДОВАТЕЛЬНОСТЬ ЗАПУСКА

Шаг 1: Автоматическое чтение CLAUDE.md

Выполняется: Claude Code автоматически (штатное поведение)

Файл: $WORKSPACE/CLAUDE.md


Шаг 2: Определение терминала

Команда:

TERMINAL=$(tty | sed 's#/dev/##' | sed 's#/#_#g')

Примеры:
- pts/0pts_0
- pts/1pts_1
- not a ttynot a tty


Шаг 3: Выбор файла сессии

Логика (обратная совместимость):

if [ "$TERMINAL" = "pts_0" ] || [ "$TERMINAL" = "not a tty" ]; then
  # Главный терминал → current.json
  SESSION_FILE="$WORKSPACE/.claude/sessions/current.json"
else
  # Дополнительные терминалы → отдельные файлы
  SESSION_FILE="$WORKSPACE/.claude/sessions/current_${TERMINAL}.json"
fi

Преимущества:
- ✅ Обратная совместимость - главный терминал использует current.json
- ✅ Параллельная работа - дополнительные терминалы не конфликтуют
- ✅ Простота - автоматическое определение


Шаг 4: Проверка существования сессии

Проверка:

if [ -f "$SESSION_FILE" ]; then
  echo "active"
else
  echo "new"
fi

Шаг 5: Действия в зависимости от статуса

Вариант А: "new" (новая сессия)

Действия:

  1. Создать новый session файл:
    bash cat > "$SESSION_FILE" <<EOF { "session_id": "$(date +%Y%m%d_%H%M%S)", "terminal": "$TERMINAL", "started_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)", "last_activity": "$(date -u +%Y-%m-%dT%H:%M:%SZ)", "current_task": "", "mode": "", "files_open": [], "todos": [], "context": { "project": null, "branch": null, "working_directory": "$WORKSPACE/" }, "interruption_count": 0 } EOF

  2. Прочитать start-menu.md:
    Read: $WORKSPACE/start-menu.md

  3. Показать заставку:
    ╔════════════════════════════════════════════════════════════════════════╗ ║ ██████╗ ██╗ █████╗ ████████╗███████╗ ██████╗ ██████╗ ███╗ ███╗ ║ [ASCII ART] ║ PLATFORM v1 | 2025 ║ ╚════════════════════════════════════════════════════════════════════════╝

  4. Показать главное меню:
    ```
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Platform v1 | Claude Code Workspace
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  5. 📦 Работа с проектами

  6. 🏗️ Консоль платформы
  7. 🆓 Чистый Claude

Ваш выбор [1-3]:
```


Вариант Б: "active" (активная сессия)

Действия:

  1. Прочитать session файл:
    bash SESSION_DATA=$(cat "$SESSION_FILE")

  2. Проверить время простоя:
    ```bash
    LAST_ACTIVITY=$(jq -r '.last_activity' "$SESSION_FILE")
    NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)

LAST_EPOCH=$(date -d "$LAST_ACTIVITY" +%s)
NOW_EPOCH=$(date -d "$NOW" +%s)
IDLE_MIN=$(( (NOW_EPOCH - LAST_EPOCH) / 60 ))
```

  1. Определить действие:

Если простой < 5 минут:
- Продолжить работу без меню
- Восстановить контекст из session файла
- Сказать: "Продолжаем работу..."

Если простой 5-30 минут:
- Показать КОРОТКОЕ меню восстановления
- Предложить: продолжить / начать заново

Если простой > 30 минут:
- Показать ПОЛНОЕ меню восстановления
- Увеличить interruption_count
- Залогировать в interruptions.log
- Показать резюме последней работы

  1. Обратиться к SESSION_RECOVERY.md:
    - Прочитать .claude/SESSION_RECOVERY.md
    - Следовать алгоритму восстановления

📊 ФОРМАТ SESSION ФАЙЛА

Используется существующий формат из SESSION_RECOVERY.md:

{
  "session_id": "20251121_001316",
  "terminal": "pts/0",                     ДОБАВЛЕНО в v1.1
  "started_at": "2025-11-21T00:13:16Z",
  "last_activity": "2025-11-21T00:45:00Z",
  "current_task": "Настройка Drupal Commerce",
  "mode": "project:pim-drupal:setup",
  "files_open": [
    "$WORKSPACE/projects/pim-drupal/docker-compose.yml"
  ],
  "todos": [
    {"task": "Установить Commerce Kickstart", "status": "in_progress"}
  ],
  "context": {
    "project": "pim-drupal",
    "branch": "main",
    "last_command": "docker-compose up -d",
    "working_directory": "$WORKSPACE/projects/pim-drupal"
  },
  "interruption_count": 0
}

Изменения от оригинала: Добавлено поле terminal (1 поле)


🖥️ МНОЖЕСТВЕННЫЕ ТЕРМИНАЛЫ

Сценарий: Параллельная работа

Терминал 1 (pts/0):

# Файл: .claude/sessions/current.json
{
  "terminal": "pts/0",
  "context": {
    "project": "marketplace",
    "working_directory": "$WORKSPACE/projects/marketplace/"
  }
}

Терминал 2 (pts/1):

# Файл: .claude/sessions/current_pts_1.json
{
  "terminal": "pts/1",
  "context": {
    "project": "pim-drupal",
    "working_directory": "$WORKSPACE/projects/pim-drupal/"
  }
}

Результат:
- ✅ Независимые контексты
- ✅ Нет конфликтов
- ✅ Каждый терминал восстанавливает свою сессию


🎯 ИНТЕГРАЦИЯ С МЕНЮ

1. Главное меню → Работа с проектами

Действие:

Прочитать: $WORKSPACE/platform/start-menu.md
Показать список проектов

2. Выбор проекта → Создание сессии

При входе в проект:

# Обновить session файл
jq '.context.project = "marketplace" |
    .mode = "project:marketplace:code" |
    .context.working_directory = "$WORKSPACE/projects/marketplace/" |
    .last_activity = "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"' \
  "$SESSION_FILE" > "$SESSION_FILE.tmp"
mv "$SESSION_FILE.tmp" "$SESSION_FILE"

3. Работа в проекте → Обновление сессии

Каждые 2-3 действия:

# Обновить last_activity
jq '.last_activity = "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"' \
  "$SESSION_FILE" > "$SESSION_FILE.tmp"
mv "$SESSION_FILE.tmp" "$SESSION_FILE"

📖 ССЫЛКИ НА ДОКУМЕНТАЦИЮ

Для пользователей:
- start-menu.md - Как работать с меню
- platform/start-menu.md - Как работать с проектами

Для разработчиков:
- .claude/SESSION_RECOVERY.md - Полная документация системы сессий
- .claude/STARTUP_SYSTEM.md - Этот файл (интеграция)

Для AI агента:
- CLAUDE.md - Точка входа и основные правила
- .claude/SESSION_RECOVERY.md → секция "ПОДДЕРЖКА НЕСКОЛЬКИХ ТЕРМИНАЛОВ"


✅ ПРЕИМУЩЕСТВА РЕШЕНИЯ

  1. Минимальные изменения - расширили существующую систему, не заменили
  2. Обратная совместимость - главный терминал работает как раньше
  3. Параллельная работа - поддержка нескольких терминалов
  4. Штатное поведение - используем автоматическое чтение CLAUDE.md
  5. Единый формат - один JSON формат для всех терминалов
  6. Чистая архитектура - разделение: меню / сессии / восстановление

🔧 ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ

Зависимости

Проверка работоспособности

# 1. Проверить существование директории
ls -la $WORKSPACE/.claude/sessions/

# 2. Проверить текущий терминал
tty | sed 's#/dev/##' | sed 's#/#_#g'

# 3. Найти все активные сессии
ls -1 $WORKSPACE/.claude/sessions/current*.json

# 4. Просмотреть сессию
cat $WORKSPACE/.claude/sessions/current.json | jq .

📝 ИСТОРИЯ ИЗМЕНЕНИЙ

2025-11-21 (v1.0)

Создано:
- STARTUP_SYSTEM.md - этот документ
- start-menu.md (v1.0.1) - главное меню
- platform/start-menu.md (v1.0.0) - меню работы с проектами

Обновлено:
- CLAUDE.md (v8.0.0 → v8.0.1)
- SESSION_RECOVERY.md (v1.0 → v1.1) + секция про множественные терминалы

Удалено:
- .claude/session-manager.md - дублировал SESSION_RECOVERY.md

Интеграция:
- Система меню работает с существующей системой сессий
- Минимальные изменения (добавлено 1 поле terminal)
- Обратная совместимость сохранена


Версия: 1.0
Дата: 2025-11-21
Статус: Готово к использованию