diff --git a/src/api/teamsbotApi.ts b/src/api/teamsbotApi.ts index 35a3770..dac7219 100644 --- a/src/api/teamsbotApi.ts +++ b/src/api/teamsbotApi.ts @@ -378,3 +378,25 @@ export function createSessionStream(instanceId: string, sessionId: string): Even const url = `${baseUrl}/api/teamsbot/${instanceId}/sessions/${sessionId}/stream`; return new EventSource(url, { withCredentials: true }); } + +// ========================================================================= +// Debug Screenshots (SysAdmin only) +// ========================================================================= + +export interface ScreenshotInfo { + name: string; + step: string; + timestamp: number; + sizeBytes: number; + url: string; +} + +export async function listScreenshots(instanceId: string, sessionId: string): Promise<{ screenshots: ScreenshotInfo[] }> { + const response = await api.get(`/api/teamsbot/${instanceId}/sessions/${sessionId}/screenshots`); + return response.data; +} + +export function getScreenshotUrl(instanceId: string, filename: string): string { + const baseUrl = api.defaults.baseURL || ''; + return `${baseUrl}/api/teamsbot/${instanceId}/screenshots/${filename}`; +} diff --git a/src/pages/views/teamsbot/TeamsbotSessionView.tsx b/src/pages/views/teamsbot/TeamsbotSessionView.tsx index 1e3f562..71a0bb3 100644 --- a/src/pages/views/teamsbot/TeamsbotSessionView.tsx +++ b/src/pages/views/teamsbot/TeamsbotSessionView.tsx @@ -2,7 +2,8 @@ import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react' import { useSearchParams } from 'react-router-dom'; import { useCurrentInstance } from '../../../hooks/useCurrentInstance'; import * as teamsbotApi from '../../../api/teamsbotApi'; -import type { TeamsbotSession, TeamsbotTranscript, TeamsbotBotResponse, TeamsbotSSEEvent } from '../../../api/teamsbotApi'; +import type { TeamsbotSession, TeamsbotTranscript, TeamsbotBotResponse, TeamsbotSSEEvent, ScreenshotInfo } from '../../../api/teamsbotApi'; +import { getUserDataCache } from '../../../utils/userCache'; import styles from './Teamsbot.module.css'; /** @@ -14,6 +15,9 @@ export const TeamsbotSessionView: React.FC = () => { const [searchParams, setSearchParams] = useSearchParams(); const sessionId = searchParams.get('sessionId') || ''; + const cachedUser = getUserDataCache(); + const _isSysAdmin = cachedUser?.isSysAdmin === true; + const [session, setSession] = useState(null); const [allSessions, setAllSessions] = useState([]); const [transcripts, setTranscripts] = useState([]); @@ -23,6 +27,10 @@ export const TeamsbotSessionView: React.FC = () => { const [error, setError] = useState(null); const [isLive, setIsLive] = useState(false); + const [screenshots, setScreenshots] = useState([]); + const [screenshotsLoading, setScreenshotsLoading] = useState(false); + const [screenshotsLoaded, setScreenshotsLoaded] = useState(false); + const transcriptEndRef = useRef(null); const eventSourceRef = useRef(null); @@ -294,6 +302,66 @@ export const TeamsbotSessionView: React.FC = () => {
{session.summary}
)} + + {/* Debug Screenshots (SysAdmin only) */} + {_isSysAdmin && ( +
+
+

Debug Screenshots

+ +
+ {screenshotsLoaded && screenshots.length === 0 && ( +
Keine Screenshots fuer diese Session.
+ )} + {screenshots.length > 0 && ( +
+ {screenshots.map((s) => { + const imgUrl = teamsbotApi.getScreenshotUrl(instanceId, s.name); + return ( + + {s.step} +
+
{s.step}
+
+ {new Date(s.timestamp).toLocaleTimeString('de-CH')} — {(s.sizeBytes / 1024).toFixed(0)} KB +
+
+
+ ); + })} +
+ )} +
+ )} ); };