Дата: 2025-12-29
Версия: 1.1.0
Назначение: Просмотр краткой информации о сессии
Как работает:
- Нажатие кнопки "Инфо" → открывается полноэкранный просмотр
- Вызывается API: GET /api/sessions/{id}
- Использует session_extract.py для получения выжимки сессии
- Показывает: проект, описание, основные темы
Реализация:
openInfo(session) {
this.viewMode = 'info';
fetch(`/api/sessions/${session.id}`)
.then(data => this.sessionInfo = data.content);
}
Backend:
@app.get("/api/sessions/{session_id}")
async def get_session_details(session_id: int):
# Вызов session_extract.py
# Возврат выжимки сессии
Назначение: Просмотр полной истории диалога сессии
Как работает:
- Нажатие кнопки "История" → открывается полноэкранный просмотр
- Вызывается API: GET /api/sessions/{id}/history
- Показывает: проект, описание, время, статус
- (В будущем: полная история сообщений)
Реализация:
openHistory(session) {
this.viewMode = 'history';
fetch(`/api/sessions/${session.id}/history`)
.then(data => this.sessionHistory = data.history);
}
Backend:
@app.get("/api/sessions/{session_id}/history")
async def get_session_history(session_id: int):
# Поиск файла сессии
# Возврат истории (сейчас: заглушка с базовой информацией)
TODO: Реализовать чтение полного файла сессии из /tmp/claude-code-*/
Назначение: Интерактивное подключение к сессии
Как работает:
- Нажатие кнопки "Терминал" → открывается терминал
- Устанавливается WebSocket соединение: wss://sessions.0kt.ru/ws/chat/{id}
- Пользователь может вводить команды
- Сообщения отображаются с цветовой подсветкой:
- 🔵 User (синий) - команды пользователя
- 🟣 Assistant (фиолетовый) - ответы Claude
- 🟡 System (жёлтый) - системные сообщения
Реализация:
openTerminal(session) {
this.viewMode = 'terminal';
const wsUrl = `wss://${window.location.host}/ws/chat/${session.id}`;
this.terminalWs = new WebSocket(wsUrl);
this.terminalWs.onmessage = (event) => {
const data = JSON.parse(event.data);
this.addTerminalMessage(data.type, data.sender, data.text);
};
}
sendTerminalCommand() {
this.terminalWs.send(this.terminalInput);
this.addTerminalMessage('user', 'You', this.terminalInput);
}
Backend:
@app.websocket("/ws/chat/{session_id}")
async def websocket_chat(websocket: WebSocket, session_id: int):
await websocket.accept()
# Сейчас: эхо-режим (заглушка)
# TODO: Интеграция с Claude API для отправки команд в сессию
TODO: Реализовать отправку команд в активную сессию Claude
closeView() → возврат к списку сессий{
// Режимы просмотра
viewMode: null, // 'info' | 'history' | 'terminal'
currentSession: null,
sessionInfo: '',
sessionHistory: '',
// Терминал
terminalMessages: [],
terminalInput: '',
terminalWs: null,
// Методы
openInfo(session),
openHistory(session),
openTerminal(session),
sendTerminalCommand(),
closeView()
}
GET /api/sessions → Список сессий
GET /api/sessions/{id} → Информация о сессии
GET /api/sessions/{id}/history → История сессии
WS /ws/chat/{id} → WebSocket для терминала
POST /api/sessions/{id}/resume → Возобновить сессию
/tmp/claude-code-*/URL: https://sessions.0kt.ru
API:
- GET /api/sessions - список сессий
- GET /api/sessions/1 - информация о сессии #1
- GET /api/sessions/1/history - история сессии #1
Порт: 8093 (внутренний)
Сервис: systemctl status sessionhub
Статус: ✅ MVP ГОТОВ (info + history + terminal UI)