klawdyoss's picture
upload limpo
20ec4ad
import { useState, useEffect } from 'react';
import { toast } from 'react-toastify';
/**
* Componente orquestrador - responsável por:
* 1. Analisar a solicitação do usuário
* 2. Criar um plano de execução
* 3. Distribuir tarefas para agentes específicos
* 4. Monitorar progresso
*/
const AgentOrchestrator = ({ userPrompt, html, availableAgents, onTaskCreated, onPlanCreated, onTaskUpdated }) => {
const [isPlanning, setIsPlanning] = useState(false);
const [currentPlan, setCurrentPlan] = useState(null);
// Função para criar um novo plano baseado na solicitação do usuário
const createPlan = async (prompt) => {
setIsPlanning(true);
try {
// Usar o modelo de IA para criar um plano de execução
// (Na implementação real, isso seria uma chamada para um LLM específico)
const plan = {
id: `plan-${Date.now()}`,
name: `Plano para: ${prompt.substring(0, 30)}...`,
description: `Plano de execução para atender à solicitação: "${prompt}"`,
steps: [
{
id: `step-1-${Date.now()}`,
description: 'Analisar requisitos e criar estrutura básica',
agentId: availableAgents[0] || 'default',
status: 'pending'
},
{
id: `step-2-${Date.now()}`,
description: 'Implementar funcionalidades principais',
agentId: availableAgents[1] || availableAgents[0] || 'default',
dependsOn: [`step-1-${Date.now()}`],
status: 'pending'
},
{
id: `step-3-${Date.now()}`,
description: 'Finalizar e otimizar',
agentId: availableAgents[2] || availableAgents[0] || 'default',
dependsOn: [`step-2-${Date.now()}`],
status: 'pending'
}
],
createdAt: new Date(),
status: 'pending'
};
setCurrentPlan(plan);
onPlanCreated(plan);
// Criar primeira tarefa baseada no plano
const firstStep = plan.steps[0];
const task = {
id: `task-${Date.now()}`,
agentId: firstStep.agentId,
description: `${firstStep.description} para: "${prompt}"`,
status: 'pending',
createdAt: new Date()
};
onTaskCreated(task);
}
catch (error) {
toast.error('Erro ao criar plano de execução');
console.error('Erro ao criar plano:', error);
}
finally {
setIsPlanning(false);
}
};
// Monitorar mudanças na solicitação do usuário
useEffect(() => {
if (userPrompt && !isPlanning && !currentPlan) {
createPlan(userPrompt);
}
}, [userPrompt]);
return null; // Este é um componente lógico, não renderiza UI
};
export default AgentOrchestrator;