@@ -248,17 +266,50 @@ export const TeamsbotModulesView: React.FC = () => {
{(moduleSessions[mod.id] || []).length === 0 ? (
{t('Keine Sitzungen')}
) : (
- (moduleSessions[mod.id] || []).map((sess) => (
-
navigate(`/mandates/${mandateId}/teamsbot/${instanceId}/sessions?sessionId=${sess.id}`)}
- >
- {sess.botName || 'Bot'}
- {sess.status}
- {_formatSessionDate(sess.startedAt)}
-
- ))
+
+
+
+ |
+ {t('Datum')} |
+ {t('Dauer')} |
+ {t('Status')} |
+
+
+
+ {_sortedSessions(moduleSessions[mod.id] || []).map((sess) => (
+ navigate(`/mandates/${mandateId}/teamsbot/${instanceId}/sessions?sessionId=${sess.id}`)}
+ >
+ |
+
+ |
+ {_formatSessionDateTime(sess.startedAt)} |
+ {_calcDurationMin(sess.startedAt, sess.endedAt)} |
+ {sess.status} |
+
+ ))}
+
+
)}
)}
diff --git a/src/pages/views/teamsbot/TeamsbotSessionView.tsx b/src/pages/views/teamsbot/TeamsbotSessionView.tsx
index 5de3056..e1b382f 100644
--- a/src/pages/views/teamsbot/TeamsbotSessionView.tsx
+++ b/src/pages/views/teamsbot/TeamsbotSessionView.tsx
@@ -23,6 +23,8 @@ import { useFileContext } from '../../../contexts/FileContext';
import styles from './Teamsbot.module.css';
import { useLanguage } from '../../../providers/language/LanguageContext';
+import ReactMarkdown from 'react-markdown';
+import remarkGfm from 'remark-gfm';
/**
* TeamsbotSessionView - Live session view with real-time transcript and bot responses.
@@ -61,6 +63,8 @@ export const TeamsbotSessionView: React.FC = () => {
const [agentStatus, setAgentStatus] = useState<{ toolName?: string; status?: string; reason?: string } | null>(null);
const agentStatusTimerRef = useRef
| null>(null);
+ const [agentProgressLog, setAgentProgressLog] = useState>([]);
+ const agentProgressIdRef = useRef(0);
const [sessionStats, setSessionStats] = useState(null);
const [reconnectTick, setReconnectTick] = useState(0);
const reconnectTimerRef = useRef | null>(null);
@@ -311,6 +315,22 @@ export const TeamsbotSessionView: React.FC = () => {
setAgentStatus({ toolName: data.toolName, status: data.status, reason: data.reason });
if (agentStatusTimerRef.current) clearTimeout(agentStatusTimerRef.current);
agentStatusTimerRef.current = setTimeout(() => setAgentStatus(null), 15000);
+ } else if (data.status === 'toolCall') {
+ const label = data.displayLabel || data.toolName || '';
+ setAgentStatus({ toolName: label, status: 'running' });
+ if (agentStatusTimerRef.current) clearTimeout(agentStatusTimerRef.current);
+ agentStatusTimerRef.current = setTimeout(() => setAgentStatus(null), 15000);
+ agentProgressIdRef.current += 1;
+ const entry = { id: agentProgressIdRef.current, text: `${label}`, ts: new Date().toLocaleTimeString() };
+ setAgentProgressLog((prev) => [...prev.slice(-19), entry]);
+ } else if (data.status === 'toolResult') {
+ const summary = data.summary ? `: ${data.summary.substring(0, 120)}` : '';
+ agentProgressIdRef.current += 1;
+ const entry = { id: agentProgressIdRef.current, text: `${data.toolName || ''}${summary}`, ts: new Date().toLocaleTimeString() };
+ setAgentProgressLog((prev) => [...prev.slice(-19), entry]);
+ } else if (data.status === 'completed') {
+ if (agentStatusTimerRef.current) clearTimeout(agentStatusTimerRef.current);
+ setAgentStatus(null);
} else {
if (agentStatusTimerRef.current) clearTimeout(agentStatusTimerRef.current);
agentStatusTimerRef.current = setTimeout(() => setAgentStatus(null), 2000);
@@ -807,14 +827,13 @@ export const TeamsbotSessionView: React.FC = () => {
)}
- {/* Agent Status Bubble (F-fix-2) */}
+ {/* Agent Status Bubble + Progress Log */}
{agentStatus && (
@@ -1093,7 +1112,8 @@ export const TeamsbotSessionView: React.FC = () => {
{p.text}
{p.responseText && (
- {t('Antwort')}: {p.responseText}
+ {t('Antwort')}:
+ {p.responseText}
)}
{p.statusMessage && p.status === 'failed' && (
@@ -1145,7 +1165,9 @@ export const TeamsbotSessionView: React.FC = () => {
{r.detectedIntent}
{_formatTime(r.timestamp || '')}
-
{t('Begründung: {text}', { text: r.reasoning })}
@@ -1171,17 +1193,40 @@ export const TeamsbotSessionView: React.FC = () => {
{session.summary && (
{t('Meeting-Zusammenfassung')}
-
{session.summary}
+
+ {session.summary || ''}
+
)}
- {/* TTS Delivery Debug */}
-
-
{t('TTS-Lieferstatus')}
+ {/* Agent Progress Log (collapsed by default) */}
+
+
+ {t('Agent-Fortschritt')} ({agentProgressLog.length})
+
+ {agentProgressLog.length === 0 ? (
+ {t('Noch keine Agent-Aktivitaet')}
+ ) : (
+
+ {agentProgressLog.map((entry) => (
+
+ {entry.ts}
+ {entry.text}
+
+ ))}
+
+ )}
+
+
+ {/* TTS Delivery Debug (collapsed by default) */}
+
+
+ {t('TTS-Lieferstatus')} ({ttsStatusEvents.length})
+
{ttsStatusEvents.length === 0 ? (
{t('Noch keine TTS-Events')}
) : (
-
+
{ttsStatusEvents.slice(-10).reverse().map((ev, idx) => (
{_formatTime(ev.timestamp)}
@@ -1192,7 +1237,7 @@ export const TeamsbotSessionView: React.FC = () => {
))}
)}
-
+
{/* Debug Log (SSE/Transcript/Chat) */}