This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/admin-v2/app/api/admin/agents/sessions/route.ts
BreakPilot Dev 660295e218 fix(admin-v2): Restore complete admin-v2 application
The admin-v2 application was incomplete in the repository. This commit
restores all missing components:

- Admin pages (76 pages): dashboard, ai, compliance, dsgvo, education,
  infrastructure, communication, development, onboarding, rbac
- SDK pages (45 pages): tom, dsfa, vvt, loeschfristen, einwilligungen,
  vendor-compliance, tom-generator, dsr, and more
- Developer portal (25 pages): API docs, SDK guides, frameworks
- All components, lib files, hooks, and types
- Updated package.json with all dependencies

The issue was caused by incomplete initial repository state - the full
admin-v2 codebase existed in backend/admin-v2 and docs-src/admin-v2
but was never fully synced to the main admin-v2 directory.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 23:40:15 -08:00

241 lines
7.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
/**
* Agent Sessions API
*
* GET - List all active agent sessions
* POST - Create/start a new session (for testing)
*/
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 sessions data (in production, query from PostgreSQL/Redis)
function getMockSessions(): AgentSession[] {
const now = new Date()
return [
{
id: `session-${Date.now()}-001`,
agentType: 'tutor-agent',
agentId: 'tutor-1',
userId: 'user-123',
userName: 'Max Mustermann',
state: 'active',
createdAt: new Date(now.getTime() - 75 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 37000).toISOString(),
checkpointCount: 5,
messagesProcessed: 23,
currentTask: 'Erklaere Quadratische Funktionen',
avgResponseTime: 245
},
{
id: `session-${Date.now()}-002`,
agentType: 'tutor-agent',
agentId: 'tutor-2',
userId: 'user-456',
userName: 'Anna Schmidt',
state: 'active',
createdAt: new Date(now.getTime() - 45 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 108000).toISOString(),
checkpointCount: 3,
messagesProcessed: 12,
currentTask: 'Hilfe bei Gedichtanalyse',
avgResponseTime: 312
},
{
id: `session-${Date.now()}-003`,
agentType: 'grader-agent',
agentId: 'grader-1',
userId: 'user-789',
userName: 'Frau Mueller (Lehrerin)',
state: 'active',
createdAt: new Date(now.getTime() - 105 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 180000).toISOString(),
checkpointCount: 12,
messagesProcessed: 45,
currentTask: 'Korrektur Klausur 10b - Arbeit 7/24',
avgResponseTime: 1205
},
{
id: `session-${Date.now()}-004`,
agentType: 'quality-judge',
agentId: 'judge-1',
userId: 'system',
userName: 'System (BQAS)',
state: 'active',
createdAt: new Date(now.getTime() - 465 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 1000).toISOString(),
checkpointCount: 156,
messagesProcessed: 892,
currentTask: 'Quality Check Queue Processing',
avgResponseTime: 89
},
{
id: `session-${Date.now()}-005`,
agentType: 'orchestrator',
agentId: 'orchestrator-main',
userId: 'system',
userName: 'System',
state: 'active',
createdAt: new Date(now.getTime() - 945 * 60000).toISOString(),
lastActivity: now.toISOString(),
checkpointCount: 2341,
messagesProcessed: 8934,
currentTask: 'Routing incoming requests',
avgResponseTime: 12
},
{
id: `session-${Date.now()}-006`,
agentType: 'tutor-agent',
agentId: 'tutor-3',
userId: 'user-101',
userName: 'Tim Berger',
state: 'paused',
createdAt: new Date(now.getTime() - 150 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 90 * 60000).toISOString(),
checkpointCount: 8,
messagesProcessed: 34,
currentTask: null,
avgResponseTime: 278
},
{
id: `session-${Date.now()}-007`,
agentType: 'grader-agent',
agentId: 'grader-2',
userId: 'user-202',
userName: 'Herr Weber (Lehrer)',
state: 'completed',
createdAt: new Date(now.getTime() - 345 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 225 * 60000).toISOString(),
checkpointCount: 24,
messagesProcessed: 120,
currentTask: null,
avgResponseTime: 1102
},
{
id: `session-${Date.now()}-008`,
agentType: 'alert-agent',
agentId: 'alert-1',
userId: 'system',
userName: 'System (Monitoring)',
state: 'active',
createdAt: new Date(now.getTime() - 945 * 60000).toISOString(),
lastActivity: new Date(now.getTime() - 2000).toISOString(),
checkpointCount: 48,
messagesProcessed: 256,
currentTask: 'Monitoring System Health',
avgResponseTime: 45
}
]
}
// GET - List all sessions
export async function GET(request: NextRequest) {
try {
const url = new URL(request.url)
const state = url.searchParams.get('state')
const agentType = url.searchParams.get('agentType')
const limit = parseInt(url.searchParams.get('limit') || '100')
const offset = parseInt(url.searchParams.get('offset') || '0')
let sessions = getMockSessions()
// Apply filters
if (state) {
sessions = sessions.filter(s => s.state === state)
}
if (agentType) {
sessions = sessions.filter(s => s.agentType === agentType)
}
// Calculate 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
)
}
// Apply pagination
const paginatedSessions = sessions.slice(offset, offset + limit)
return NextResponse.json({
sessions: paginatedSessions,
stats,
pagination: {
total: sessions.length,
limit,
offset,
hasMore: offset + limit < sessions.length
},
timestamp: new Date().toISOString()
})
} catch (error) {
console.error('Error fetching sessions:', error)
return NextResponse.json(
{ error: error instanceof Error ? error.message : 'Failed to fetch sessions' },
{ status: 500 }
)
}
}
// POST - Create new session (for testing)
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { agentType, userId, userName, context } = body
if (!agentType || !userId) {
return NextResponse.json(
{ error: 'agentType and userId are required' },
{ status: 400 }
)
}
// In production, create session via agent-core SessionManager
const newSession: AgentSession = {
id: `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
agentType,
agentId: `${agentType.replace('-agent', '')}-${Math.floor(Math.random() * 100)}`,
userId,
userName: userName || userId,
state: 'active',
createdAt: new Date().toISOString(),
lastActivity: new Date().toISOString(),
checkpointCount: 0,
messagesProcessed: 0,
currentTask: context?.task || null,
avgResponseTime: 0
}
return NextResponse.json({
success: true,
session: newSession,
message: 'Session created successfully'
}, { status: 201 })
} catch (error) {
console.error('Error creating session:', error)
return NextResponse.json(
{ error: error instanceof Error ? error.message : 'Failed to create session' },
{ status: 500 }
)
}
}