File size: 3,834 Bytes
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import React, { useState, useEffect } from 'react';
import { toast } from 'react-toastify';

// Definição de tarefas para os agentes
export interface AgentTask {
  id: string;
  agentId: string;
  description: string;
  status: 'pending' | 'in-progress' | 'completed' | 'failed';
  result?: string;
  error?: string;
  createdAt: Date;
  completedAt?: Date;
}

// Definição de plano de execução
export interface ExecutionPlan {
  id: string;
  name: string;
  description: string;
  steps: {
    id: string;
    description: string;
    agentId: string;
    dependsOn?: string[];
    status: 'pending' | 'in-progress' | 'completed' | 'failed';
  }[];
  createdAt: Date;
  status: 'pending' | 'in-progress' | 'completed' | 'failed';
}

interface AgentOrchestratorProps {
  userPrompt: string;
  html: string;
  availableAgents: string[];
  onTaskCreated: (task: AgentTask) => void;
  onPlanCreated: (plan: ExecutionPlan) => void;
  onTaskUpdated: (taskId: string, status: AgentTask['status'], result?: string) => void;
}

/**
 * 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: React.FC<AgentOrchestratorProps> = ({
  userPrompt,
  html,
  availableAgents,
  onTaskCreated,
  onPlanCreated,
  onTaskUpdated
}) => {
  const [isPlanning, setIsPlanning] = useState(false);
  const [currentPlan, setCurrentPlan] = useState<ExecutionPlan | null>(null);

  // Função para criar um novo plano baseado na solicitação do usuário
  const createPlan = async (prompt: string) => {
    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: ExecutionPlan = {
        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: AgentTask = {
        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;