'use client' import { useState, useEffect } from 'react' import Link from 'next/link' import { ArrowLeft, Activity, Clock, User, Bot, Brain, MessageSquare, AlertTriangle, Settings, CheckCircle, Pause, XCircle, RefreshCw, Filter, Search, ChevronRight, Zap, MoreVertical } from 'lucide-react' // Session types interface AgentSession { id: string agentType: string agentId: string userId: string userName: string state: 'active' | 'paused' | 'completed' | 'failed' createdAt: string lastActivity: string checkpointCount: number messagesProcessed: number currentTask: string | null avgResponseTime: number } // Mock data const mockSessions: AgentSession[] = [ { id: 'session-001', agentType: 'tutor-agent', agentId: 'tutor-1', userId: 'user-123', userName: 'Max Mustermann', state: 'active', createdAt: '2026-02-03T14:30:00Z', lastActivity: '2026-02-03T15:45:23Z', checkpointCount: 5, messagesProcessed: 23, currentTask: 'Erklaere Quadratische Funktionen', avgResponseTime: 245 }, { id: 'session-002', agentType: 'tutor-agent', agentId: 'tutor-2', userId: 'user-456', userName: 'Anna Schmidt', state: 'active', createdAt: '2026-02-03T15:00:00Z', lastActivity: '2026-02-03T15:44:12Z', checkpointCount: 3, messagesProcessed: 12, currentTask: 'Hilfe bei Gedichtanalyse', avgResponseTime: 312 }, { id: 'session-003', agentType: 'grader-agent', agentId: 'grader-1', userId: 'user-789', userName: 'Frau Mueller (Lehrerin)', state: 'active', createdAt: '2026-02-03T14:00:00Z', lastActivity: '2026-02-03T15:42:00Z', checkpointCount: 12, messagesProcessed: 45, currentTask: 'Korrektur Klausur 10b - Arbeit 7/24', avgResponseTime: 1205 }, { id: 'session-004', agentType: 'quality-judge', agentId: 'judge-1', userId: 'system', userName: 'System (BQAS)', state: 'active', createdAt: '2026-02-03T08:00:00Z', lastActivity: '2026-02-03T15:45:01Z', checkpointCount: 156, messagesProcessed: 892, currentTask: 'Quality Check Queue Processing', avgResponseTime: 89 }, { id: 'session-005', agentType: 'orchestrator', agentId: 'orchestrator-main', userId: 'system', userName: 'System', state: 'active', createdAt: '2026-02-03T00:00:00Z', lastActivity: '2026-02-03T15:45:30Z', checkpointCount: 2341, messagesProcessed: 8934, currentTask: 'Routing incoming requests', avgResponseTime: 12 }, { id: 'session-006', agentType: 'tutor-agent', agentId: 'tutor-3', userId: 'user-101', userName: 'Tim Berger', state: 'paused', createdAt: '2026-02-03T13:00:00Z', lastActivity: '2026-02-03T14:30:00Z', checkpointCount: 8, messagesProcessed: 34, currentTask: null, avgResponseTime: 278 }, { id: 'session-007', agentType: 'grader-agent', agentId: 'grader-2', userId: 'user-202', userName: 'Herr Weber (Lehrer)', state: 'completed', createdAt: '2026-02-03T10:00:00Z', lastActivity: '2026-02-03T12:00:00Z', checkpointCount: 24, messagesProcessed: 120, currentTask: null, avgResponseTime: 1102 }, { id: 'session-008', agentType: 'alert-agent', agentId: 'alert-1', userId: 'system', userName: 'System (Monitoring)', state: 'active', createdAt: '2026-02-03T00:00:00Z', lastActivity: '2026-02-03T15:45:28Z', checkpointCount: 48, messagesProcessed: 256, currentTask: 'Monitoring System Health', avgResponseTime: 45 } ] function getAgentIcon(agentType: string) { switch (agentType) { case 'tutor-agent': return case 'grader-agent': return case 'quality-judge': return case 'alert-agent': return case 'orchestrator': return default: return } } function getAgentColor(agentType: string) { switch (agentType) { case 'tutor-agent': return { bg: 'bg-blue-100', text: 'text-blue-600', border: 'border-blue-200' } case 'grader-agent': return { bg: 'bg-green-100', text: 'text-green-600', border: 'border-green-200' } case 'quality-judge': return { bg: 'bg-amber-100', text: 'text-amber-600', border: 'border-amber-200' } case 'alert-agent': return { bg: 'bg-red-100', text: 'text-red-600', border: 'border-red-200' } case 'orchestrator': return { bg: 'bg-purple-100', text: 'text-purple-600', border: 'border-purple-200' } default: return { bg: 'bg-gray-100', text: 'text-gray-600', border: 'border-gray-200' } } } function getStateConfig(state: string) { switch (state) { case 'active': return { icon: , color: 'bg-green-100 text-green-700 border-green-200', label: 'Aktiv' } case 'paused': return { icon: , color: 'bg-yellow-100 text-yellow-700 border-yellow-200', label: 'Pausiert' } case 'completed': return { icon: , color: 'bg-gray-100 text-gray-600 border-gray-200', label: 'Beendet' } case 'failed': return { icon: , color: 'bg-red-100 text-red-700 border-red-200', label: 'Fehlgeschlagen' } default: return { icon: null, color: 'bg-gray-100 text-gray-600 border-gray-200', label: state } } } function formatDuration(isoDate: string): string { const date = new Date(isoDate) const now = new Date() const diffMs = now.getTime() - date.getTime() const diffMins = Math.floor(diffMs / 60000) const diffHours = Math.floor(diffMins / 60) const diffDays = Math.floor(diffHours / 24) if (diffDays > 0) return `${diffDays}d ${diffHours % 24}h` if (diffHours > 0) return `${diffHours}h ${diffMins % 60}m` return `${diffMins}m` } function formatTime(isoDate: string): string { return new Date(isoDate).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' }) } export default function SessionsPage() { const [sessions, setSessions] = useState(mockSessions) const [loading, setLoading] = useState(false) const [filter, setFilter] = useState('all') const [searchTerm, setSearchTerm] = useState('') const [lastRefresh, setLastRefresh] = useState(new Date()) const refreshData = async () => { setLoading(true) // In production, fetch from API await new Promise(resolve => setTimeout(resolve, 500)) setLastRefresh(new Date()) setLoading(false) } useEffect(() => { const interval = setInterval(refreshData, 10000) // Refresh every 10s return () => clearInterval(interval) }, []) // Filter sessions const filteredSessions = sessions.filter(session => { if (filter !== 'all' && session.state !== filter) return false if (searchTerm) { const search = searchTerm.toLowerCase() return ( session.userName.toLowerCase().includes(search) || session.agentType.toLowerCase().includes(search) || session.currentTask?.toLowerCase().includes(search) || session.id.toLowerCase().includes(search) ) } return true }) // Stats const stats = { total: sessions.length, active: sessions.filter(s => s.state === 'active').length, paused: sessions.filter(s => s.state === 'paused').length, completed: sessions.filter(s => s.state === 'completed').length, failed: sessions.filter(s => s.state === 'failed').length, totalMessages: sessions.reduce((sum, s) => sum + s.messagesProcessed, 0), avgResponseTime: Math.round(sessions.reduce((sum, s) => sum + s.avgResponseTime, 0) / sessions.length) } return (
{/* Header */}
Zurueck zur Agent-Verwaltung

Aktive Sessions

Live-Uebersicht aller Agent-Sessions im System

Letzte Aktualisierung: {lastRefresh.toLocaleTimeString('de-DE')}
{/* Stats */}
Gesamt
{stats.total}
Aktiv
{stats.active}
Pausiert
{stats.paused}
Beendet
{stats.completed}
Messages (24h)
{stats.totalMessages.toLocaleString()}
Avg. Response
{stats.avgResponseTime}ms
{/* Filters */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{/* Sessions List */}
{filteredSessions.map(session => { const agentColor = getAgentColor(session.agentType) const stateConfig = getStateConfig(session.state) return ( ) })}
Agent Benutzer Status Aktueller Task Dauer Messages Letzte Aktivitaet
{getAgentIcon(session.agentType)}
{session.agentId}
{session.agentType}
{session.userName}
{stateConfig.icon} {stateConfig.label} {session.currentTask ? (
{session.currentTask}
) : ( - )}
{formatDuration(session.createdAt)}
{session.messagesProcessed} ({session.checkpointCount} CP)
{formatTime(session.lastActivity)}
{session.avgResponseTime}ms avg
Details
{filteredSessions.length === 0 && (

Keine Sessions gefunden

)}
{/* Live Activity Indicator */}
Live-Daten - Auto-Refresh alle 10 Sekunden
) }