|
import { useState, useEffect } from 'react'; |
|
import { toast } from 'react-toastify'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const AgentOrchestrator = ({ userPrompt, html, availableAgents, onTaskCreated, onPlanCreated, onTaskUpdated }) => { |
|
const [isPlanning, setIsPlanning] = useState(false); |
|
const [currentPlan, setCurrentPlan] = useState(null); |
|
|
|
const createPlan = async (prompt) => { |
|
setIsPlanning(true); |
|
try { |
|
|
|
|
|
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); |
|
|
|
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); |
|
} |
|
}; |
|
|
|
useEffect(() => { |
|
if (userPrompt && !isPlanning && !currentPlan) { |
|
createPlan(userPrompt); |
|
} |
|
}, [userPrompt]); |
|
return null; |
|
}; |
|
export default AgentOrchestrator; |
|
|