From 7c877e03baa2d1917189036ef0755159dc1255ed Mon Sep 17 00:00:00 2001 From: Hermes Date: Mon, 18 May 2026 22:23:50 +0000 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20autom=C3=A1tica:=202026?= =?UTF-8?q?-05-18=2022:23:50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-interface/public/agents-panel.js | 102 ++++++++++++++++++++++----- 1 file changed, 84 insertions(+), 18 deletions(-) diff --git a/web-interface/public/agents-panel.js b/web-interface/public/agents-panel.js index 674ee07..f9a0967 100644 --- a/web-interface/public/agents-panel.js +++ b/web-interface/public/agents-panel.js @@ -178,39 +178,102 @@ function updateScoutStatus(status) { // DESIGNER AGENT - Redesign Ultra-Moderno // ============================================ +async function loadDesignerClonesSelect() { + const inputUrl = document.getElementById('designUrl'); + if (!inputUrl) return; + + try { + const response = await fetch('/api/clones'); + const result = await response.json(); + if (!result.success || !result.data?.clones) return; + + const clones = result.data.clones; + + // Criar o select + const select = document.createElement('select'); + select.id = 'designerCloneSelect'; + select.className = 'form-control mb-3'; + select.style.cssText = 'background: rgba(255, 255, 255, 0.05); border: 1px solid var(--ai-border-glass); color: #f3f4f6; border-radius: 12px; padding: 12px 16px; margin-bottom: 16px; font-family: "Inter", sans-serif; cursor: pointer; width: 100%;'; + + let optionsHtml = ''; + clones.forEach(c => { + const dateStr = c.cloneInfo?.clonedAt ? new Date(c.cloneInfo.clonedAt).toLocaleDateString('pt-BR') : ''; + optionsHtml += ``; + }); + select.innerHTML = optionsHtml; + + // Inserir antes do inputUrl + inputUrl.parentNode.insertBefore(select, inputUrl); + + // Adicionar evento para desabilitar/limpar o input de URL quando um clone é selecionado + select.addEventListener('change', () => { + if (select.value) { + inputUrl.value = ''; + inputUrl.placeholder = 'Site selecionado acima. (Ou limpe o select para usar URL nova)'; + inputUrl.disabled = true; + agentsState.designer.currentClone = { + directory: 'cloned-sites/' + select.value, + name: select.value.split('_')[0], + url: 'https://' + select.value.split('_')[0] + }; + } else { + inputUrl.disabled = false; + inputUrl.placeholder = 'https://exemplo.com (Para clonar novo site)'; + agentsState.designer.currentClone = null; + } + }); + } catch (e) { + console.error('Erro ao carregar lista de clones no Designer:', e); + } +} + async function startDesign() { - const clone = agentsState.designer.currentClone; - if (!clone) { - // Try to get from URL input - const url = document.getElementById('designUrl')?.value?.trim(); + const selectEl = document.getElementById('designerCloneSelect'); + const urlEl = document.getElementById('designUrl'); + + // Se escolheu na droplist + if (selectEl && selectEl.value) { + agentsState.designer.currentClone = { + directory: 'cloned-sites/' + selectEl.value, + name: selectEl.value.split('_')[0], + url: 'https://' + selectEl.value.split('_')[0] + }; + } else { + const url = urlEl?.value?.trim(); if (!url) { - showAgentError('Designer', 'Nenhum site selecionado. Use o Scout ou insira uma URL.'); + showAgentError('Designer', 'Selecione um site já clonado na lista ou insira uma URL válida.'); return; } agentsState.designer.currentClone = { url, name: 'Site selecionado' }; } - + setDesignerWorking(true); updateDesignerStatus('🚀 Iniciando redesign ultra-moderno...'); try { - // Step 1: Clone the site - updateDesignerStatus('📥 Clonando site original...'); - const cloneResult = await cloneSite(agentsState.designer.currentClone.url); - - if (!cloneResult.success) { - throw new Error(cloneResult.error || 'Falha ao clonar'); + let directory = agentsState.designer.currentClone.directory; + + // Se NÃO escolheu na droplist (ou seja, se passou URL nova), faz o clone do zero! + if (!directory) { + updateDesignerStatus('📥 Clonando site original...'); + const cloneResult = await cloneSite(agentsState.designer.currentClone.url); + + if (!cloneResult.success) { + throw new Error(cloneResult.error || 'Falha ao clonar'); + } + + directory = cloneResult.data?.directory || cloneResult.data?.path || cloneResult.directory; + agentsState.designer.currentClone.directory = directory; + updateDesignerStatus('✅ Site clonado com sucesso'); + } else { + updateDesignerStatus('📂 Usando site já clonado do storage...'); } - const directory = cloneResult.data?.directory || cloneResult.data?.path || cloneResult.directory; - agentsState.designer.currentClone.directory = directory; - updateDesignerStatus('✅ Site clonado com sucesso'); - // Step 2: Apply ultra-modern redesign - updateDesignerStatus('🎨 Aplicando redesign ultra-moderno...'); + updateDesignerStatus('🎨 Aplicando redesign ultra-moderno com IA...'); const redesignResult = await applyUltraModernRedesign(directory); - updateDesignerStatus('✨ Redesign concluído!'); + updateDesignerStatus('✨ Redesign concluído com sucesso!'); showDesignerPreview(redesignResult.previewUrl); } catch (err) { @@ -527,5 +590,8 @@ document.addEventListener('DOMContentLoaded', function() { btn.addEventListener('click', () => switchAgentTab(btn.dataset.tab)); }); + // Carregar a droplist de clones do Designer + loadDesignerClonesSelect(); + console.log('✅ BrainSteel Web Agents initialized'); });