system/web/sessionhub/TERMINAL_FEATURES.md

SessionHub - Функции терминала

Версия: 1.2.0
Дата: 2025-12-30


Основные возможности

1. 📜 Полный буфер истории

При открытии терминала автоматически загружается:
- Вся история диалога USER ↔ ASSISTANT из текущей сессии
- Обычно: 50-200 сообщений (зависит от длины сессии)
- Объем: от 10 KB до 100 KB текста
- Лимит: последние 100 сообщений (настраивается в backend)

Структура буфера:

📥 Загрузка истории сессии #1...
👤 USER: режим архитектор
🤖 ASSISTANT: Режим Архитектор активирован...
👤 USER: доделай все
🤖 ASSISTANT: Доделываю все функции...
...
✓ Загружено 78 сообщений из буфера
🔗 WebSocket подключен. Введите команду: help, info, list, resume

Сколько строк в буфере терминала:
- Типичная сессия: 500-2000 строк
- Длинная сессия: 5000-10000 строк
- Максимум: до 20000 строк (ограничение браузера)

Сколько символов:
- Типичная сессия: 50,000-100,000 символов (~50-100 KB)
- Длинная сессия: 200,000-500,000 символов (~200-500 KB)
- Максимум: зависит от памяти браузера (обычно до 5 MB)


2. 🔍 Увеличение/уменьшение шрифта

Кнопки в заголовке терминала:
- A- — уменьшить шрифт (минимум 10px)
- A+ — увеличить шрифт (максимум 24px)

Размеры:
- По умолчанию: 13px
- Минимум: 10px (для вмещения больше текста)
- Максимум: 24px (для лучшей читаемости)

Как использовать:
1. Открыть терминал (кнопка 💻)
2. Нажать A- для уменьшения
3. Нажать A+ для увеличения
4. Шрифт изменяется мгновенно

Жесты на телефоне:
- Двумя пальцами раздвигать/сжимать (pinch-to-zoom)
- Работает для прокрутки и выделения текста
- user-select: text включен для копирования


3. 📋 Копирование текста

Выделение и копирование:
- Долгое нажатие на текст → выделение
- Стандартное меню копирования iOS/Android
- Можно копировать код, команды, ответы

Что можно копировать:
- Полные сообщения USER/ASSISTANT
- Фрагменты кода
- Команды для выполнения
- Ошибки и диагностику


4. 💬 Интерактивные команды

Доступные команды после загрузки истории:
- help — справка по командам
- info — информация о текущей сессии
- list — список всех сессий (топ-10)
- resume — возобновить сессию (пометить как активную)

Как использовать:
1. Дождаться загрузки истории
2. Дождаться сообщения "WebSocket подключен"
3. Ввести команду в поле внизу
4. Нажать Enter или кнопку отправки

Пример работы:

📥 Загрузка истории сессии #1...
✓ Загружено 78 сообщений из буфера
🔗 WebSocket подключен. Введите команду: help, info, list, resume

> help                           ← вводишь команду

🤖 ASSISTANT: Доступные команды:
• info - информация о сессии
• resume - возобновить сессию
• list - список всех сессий
• help - эта справка

5. 🎨 Цветовая подсветка

Сообщения окрашены по ролям:
- 🔵 USER (синий) - ваши сообщения
- 🟣 ASSISTANT (фиолетовый) - ответы Claude
- 🟡 SYSTEM (жёлтый) - системные сообщения

Тёмная тема:
- Фон: #1e1e1e (почти чёрный)
- Текст: #d4d4d4 (светло-серый)
- Заголовок: #2d2d2d (тёмно-серый)
- Как в настоящем терминале


Технические детали

Загрузка истории

Процесс:
1. Открытие терминала → openTerminal(session)
2. Запрос к API: GET /api/sessions/{id}/history
3. Парсинг истории (разделение по USER/ASSISTANT)
4. Добавление в terminalMessages[]
5. Автоскролл вниз к последнему сообщению

Формат данных:

terminalMessages = [
  {
    id: 123456789,
    type: 'user',
    sender: 'USER',
    text: 'доделай все'
  },
  {
    id: 123456790,
    type: 'assistant',
    sender: 'ASSISTANT',
    text: 'Доделываю все функции...'
  }
]

Управление шрифтом

CSS переменная:

.terminal-output {
    font-size: var(--terminal-font-size, 13px);
}

Alpine.js привязка:

<div :style="`--terminal-font-size: ${terminalFontSize}px`">

Изменение:

terminalFontSize = Math.max(10, terminalFontSize - 1)  // уменьшить
terminalFontSize = Math.min(24, terminalFontSize + 1)  // увеличить

Ограничения

Размер буфера

Backend (session_history.py):
- Лимит: 500 строк текста (параметр max_lines)
- Ограничение по СТРОКАМ, а не по сообщениям
- 500 строк ≈ 10-30 сообщений в зависимости от длины

Frontend (браузер):
- Современные браузеры: до 5-10 MB текста
- Старые телефоны: до 1-2 MB
- При переполнении - браузер может зависнуть

Рекомендация:
- Оптимально: 100-200 сообщений
- Максимум: 500 сообщений

Производительность

Загрузка истории:
- 50 сообщений: ~100 ms
- 100 сообщений: ~200 ms
- 500 сообщений: ~1 секунда

Прокрутка:
- До 1000 строк: плавно
- 1000-5000 строк: может быть медленно
- >5000 строк: может лагать на старых телефонах


FAQ

Q: Как увеличить шрифт?

A: Нажми кнопку A+ в правом верхнем углу терминала.

Q: Можно ли прокрутить в начало истории?

A: Да, просто прокручивай вверх пальцем.

Q: Сколько истории загружается?

A: Последние 100 сообщений. Обычно это полная сессия.

Q: Можно ли загрузить больше?

A: Да, но нужно изменить параметр в backend (см. ниже).

Q: Почему терминал медленный?

A: Слишком много сообщений (>500). Уменьшите лимит или очистите историю.

Q: Можно ли копировать текст?

A: Да, долгое нажатие → выделить → копировать (стандартное меню).


Настройка

Изменить лимит строк

Файл: app.py:210

# Текущее значение (500 строк)
history_content = format_history(messages, max_lines=500)

# Можно увеличить (например, 1000 строк)
history_content = format_history(messages, max_lines=1000)

# Или использовать лимит по сообщениям
history_content = format_history(messages, max_messages=100)

После изменения:

systemctl restart sessionhub

Изменить шрифт по умолчанию

Файл: static/index.html:528

// Было
terminalFontSize: 13,

// Стало (например, 15)
terminalFontSize: 15,

Сравнение с обычными терминалами

Параметр SessionHub Linux Terminal iTerm2 Windows Terminal
Буфер строк 500-2000 1000-10000 1000-∞ 1000-9999
Буфер символов 50-500 KB 1-10 MB 1-100 MB 1-10 MB
История Вся сессия Последние N команд Вся история Последние N команд
Прокрутка Пальцем Scroll/PgUp Scroll Scroll
Zoom A+/A- кнопки Ctrl +/- Cmd +/- Ctrl +/-
Копирование Долгое нажатие Выделение мышью Выделение Выделение

Примеры использования

1. Чтение длинного ответа

1. Открой терминал
2. Прокрути вверх к началу истории
3. Нажми A+ для увеличения шрифта
4. Читай комфортно

2. Копирование команды

1. Найди команду в истории
2. Долгое нажатие на команду
3. Выбери "Копировать"
4. Вставь в другое приложение

3. Проверка истории сессии

1. Открой терминал
2. Прокрути вверх до начала
3. Посмотри первое сообщение USER
4. Это начало сессии

Статус: ✅ РЕАЛИЗОВАНО В v1.2.0