'use client'; import { useEffect, useState } from 'react'; import { listTestSessionsApiV1LooptalkTestSessionsGet } from '@/client/sdk.gen'; import type { TestSessionResponse } from '@/client/types.gen'; import { useAuth } from '@/lib/auth'; import logger from '@/lib/logger'; import { TestSessionCard } from './TestSessionCard'; import { TestSession } from './types'; interface LoopTalkTestSessionsListProps { status?: 'active' | 'completed' | 'failed'; } export function LoopTalkTestSessionsList({ status }: LoopTalkTestSessionsListProps) { const [sessions, setSessions] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { user, getAccessToken } = useAuth(); useEffect(() => { const fetchSessions = async () => { if (!user) return; try { const accessToken = await getAccessToken(); const response = await listTestSessionsApiV1LooptalkTestSessionsGet({ query: status ? { status } : undefined, headers: { 'Authorization': `Bearer ${accessToken}`, }, }); // Transform API response to match UI types const transformedSessions = (response.data || []).map((session: TestSessionResponse) => ({ id: session.id, name: session.name, description: '', // API doesn't return description test_type: session.test_index !== null ? 'load_test' : 'single', status: session.status, actor_workflow_name: `Workflow ${session.actor_workflow_id}`, adversary_workflow_name: `Workflow ${session.adversary_workflow_id}`, created_at: session.created_at, updated_at: session.created_at, // API doesn't have updated_at test_metadata: session.config })); setSessions(transformedSessions); } catch (err) { logger.error('Error fetching test sessions:', err); setError('Failed to load test sessions'); } finally { setLoading(false); } }; fetchSessions(); }, [status, user, getAccessToken]); if (loading) { return (
{Array.from({ length: 3 }, (_, i) => (
))}
); } if (error) { return (
{error}
); } if (sessions.length === 0) { return (
No {status ? `${status} ` : ''}test sessions found
{!status && (

Create a new test session to start testing agent conversations

)}
); } return (
{sessions.map((session) => ( ))}
); }