'use client';
import React, { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { MessageDetails } from '../types/monitoring';
interface MessageDetailsCardProps {
details: MessageDetails;
}
export function MessageDetailsCard({ details }: MessageDetailsCardProps) {
const { t } = useTranslation();
// Parse query variables JSON string
const queryVariables = useMemo(() => {
if (!details.message?.variables) return null;
try {
return JSON.parse(details.message.variables);
} catch {
return null;
}
}, [details.message?.variables]);
return (
{/* Context Info Section */}
{details.message && (
{t('monitoring.messageList.viewDetails')}
{/* Metadata Grid */}
{details.message.platform && (
{t('monitoring.messageList.platform')}
{details.message.platform}
)}
{details.message.userId && (
{t('monitoring.messageList.user')}
{details.message.userId}
)}
{details.message.runnerName && (
{t('monitoring.messageList.runner')}
{details.message.runnerName}
)}
{t('monitoring.messageList.level')}
{details.message.level.toUpperCase()}
)}
{/* LLM Calls Section */}
{details.llmCalls && details.llmCalls.length > 0 && (
{t('monitoring.llmCalls.title')} ({details.llmCalls.length})
{/* LLM Stats Summary */}
{t('monitoring.llmCalls.totalTokens')}
{details.llmStats.totalTokens.toLocaleString()}
{t('monitoring.llmCalls.avgDuration')}
{details.llmStats.averageDurationMs}ms
{t('monitoring.llmCalls.calls')}
{details.llmStats.totalCalls}
{/* Individual LLM Calls */}
{details.llmCalls.map((call, index) => (
#{index + 1} {call.modelName}
{call.status}
{call.duration}ms
In:{' '}
{call.tokens.input.toLocaleString()}
Out:{' '}
{call.tokens.output.toLocaleString()}
Total:{' '}
{call.tokens.total.toLocaleString()}
{call.errorMessage && (
{call.errorMessage}
)}
))}
)}
{/* Errors Section */}
{details.errors && details.errors.length > 0 && (
{t('monitoring.errors.title')} ({details.errors.length})
{details.errors.map((error) => (
{error.errorType}
{error.errorMessage}
{error.stackTrace && (
{t('monitoring.errors.stackTrace')}
{error.stackTrace}
)}
))}
)}
{/* Query Variables Section - Only show for non-local-agent runners */}
{queryVariables &&
Object.keys(queryVariables).length > 0 &&
details.message?.runnerName !== 'local-agent' && (
{t('monitoring.queryVariables.title')}
{Object.entries(queryVariables).map(([key, value]) => (
{key}
{value === null || value === undefined ? (
null
) : typeof value === 'string' ? (
value || (
empty
)
) : (
JSON.stringify(value)
)}
))}
)}
{/* No data message */}
{(!details.llmCalls || details.llmCalls.length === 0) &&
(!details.errors || details.errors.length === 0) &&
(details.message?.runnerName === 'local-agent' ||
!queryVariables ||
Object.keys(queryVariables).length === 0) && (
{t('monitoring.messageDetails.noData')}
)}
);
}