File size: 3,856 Bytes
20ec4ad
8a0e39e
 
20ec4ad
 
 
 
 
 
 
 
8a0e39e
20ec4ad
8a0e39e
20ec4ad
 
 
8a0e39e
20ec4ad
 
 
8a0e39e
20ec4ad
 
8a0e39e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20ec4ad
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
import { FiUser, FiCpu, FiAlertTriangle, FiTerminal, FiInfo } from 'react-icons/fi';
import ReactMarkdown from 'react-markdown';
// Componente para exibir uma única mensagem do chat
const ChatMessageComponent = ({ message }) => {
    // Renderiza logs de forma diferente
    if (message.type === 'log') {
        // Extrai informações do log no formato [Agent:agentId] message
        const logMatch = message.content.match(/\[Agent:([^\]]+)\] (.*)/);
        if (logMatch) {
            const [_, agentId, logContent] = logMatch;
            return (_jsxs("div", { className: "text-xs text-gray-500 py-1 pl-8 border-l border-gray-700 my-1", children: [_jsxs("span", { className: "font-semibold text-gray-400", children: [agentId, ":"] }), " ", logContent] }));
        }
        return (_jsxs("div", { className: "flex items-start space-x-2 text-xs text-gray-500 py-1", children: [_jsx(FiTerminal, { className: "text-gray-500 mt-0.5 flex-shrink-0", size: 12 }), _jsx("div", { children: message.content })] }));
    }
    // Renderiza erros de forma destacada
    if (message.type === 'error') {
        return (_jsxs("div", { className: "flex items-start space-x-2 my-2 p-2 bg-red-900/20 border-l-2 border-red-500 text-red-400 rounded", children: [_jsx(FiAlertTriangle, { className: "text-red-500 mt-1 flex-shrink-0" }), _jsxs("div", { children: [_jsx("p", { className: "font-semibold text-red-400", children: "Erro:" }), _jsx("p", { className: "text-gray-300", children: message.content })] })] }));
    }
    // Renderiza mensagem do usuário
    if (message.type === 'user') {
        return (_jsxs("div", { className: "flex items-start space-x-2 my-3", children: [_jsx("div", { className: "bg-indigo-600 text-white p-2 rounded-full flex-shrink-0", children: _jsx(FiUser, {}) }), _jsx("div", { className: "bg-gray-800 p-3 rounded-lg rounded-tl-none max-w-[calc(100%-50px)] text-gray-200", children: message.content })] }));
    }
    // Renderiza resposta do agente
    const agentColor = getAgentColor(message.agentId || 'default');
    return (_jsxs("div", { className: "flex items-start space-x-2 my-3", children: [_jsx("div", { className: `${agentColor} text-white p-2 rounded-full flex-shrink-0`, children: _jsx(FiCpu, {}) }), _jsx("div", { className: "bg-gray-900 p-3 rounded-lg rounded-tl-none max-w-[calc(100%-50px)] text-gray-200 border border-gray-800", children: _jsx(MessageContent, { content: message.content }) })] }));
};
// Função auxiliar para definir cores diferentes para cada agente
const getAgentColor = (agentId) => {
    switch (agentId) {
        case 'orchestrator':
            return 'bg-purple-600';
        case 'mike':
            return 'bg-blue-600';
        case 'alex':
            return 'bg-green-600';
        case 'david':
            return 'bg-amber-600';
        default:
            return 'bg-indigo-600';
    }
};
// Componente para exibir o conteúdo da mensagem com formatação markdown
const MessageContent = ({ content }) => {
    // Verifica se o conteúdo é HTML
    if (content.includes('<html') || content.includes('<!DOCTYPE')) {
        return (_jsxs("div", { children: [_jsxs("div", { className: "bg-gray-800 p-2 rounded mb-2 text-xs text-green-400", children: [_jsx(FiInfo, { className: "inline mr-1" }), " HTML gerado"] }), _jsx("div", { className: "text-gray-300 max-h-80 overflow-y-auto", children: content })] }));
    }
    // Tenta renderizar o conteúdo como markdown
    try {
        return (_jsx("div", { className: "prose prose-invert prose-sm max-w-none", children: _jsx(ReactMarkdown, { children: content }) }));
    }
    catch {
        // Se falhar, renderiza como texto normal
        return _jsx("div", { className: "whitespace-pre-wrap", children: content });
    }
};
export default ChatMessageComponent;