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');
});