Atualização automática: 2026-05-24 01:35:40

This commit is contained in:
Hermes
2026-05-24 01:35:40 +00:00
parent fc90b0df00
commit 858e2d9dd4
3 changed files with 12 additions and 40 deletions
+5 -19
View File
@@ -230,34 +230,21 @@ async function loadDesignerClonesSelect() {
async function startDesign() { async function startDesign() {
const selectEl = document.getElementById('designerCloneSelect'); const selectEl = document.getElementById('designerCloneSelect');
const urlEl = document.getElementById('designUrl'); const urlEl = document.getElementById('designUrl');
const customPathEl = document.getElementById('designerCustomPath');
const customPath = customPathEl?.value?.trim();
// Se informou caminho específico (nova funcionalidade)
if (customPath) {
agentsState.designer.currentClone = {
directory: customPath,
name: customPath.split('/').pop() || 'Site Customizado',
url: customPath,
isCustomPath: true
};
}
// Se escolheu na droplist // Se escolheu na droplist
else if (selectEl && selectEl.value) { if (selectEl && selectEl.value) {
agentsState.designer.currentClone = { agentsState.designer.currentClone = {
directory: 'cloned-sites/' + selectEl.value, directory: 'cloned-sites/' + selectEl.value,
name: selectEl.value.split('_')[0], name: selectEl.value.split('_')[0],
url: 'https://' + selectEl.value.split('_')[0], url: 'https://' + selectEl.value.split('_')[0]
isCustomPath: false
}; };
} else { } else {
const url = urlEl?.value?.trim(); const url = urlEl?.value?.trim();
if (!url) { if (!url) {
showAgentError('Designer', 'Selecione um site, insira uma URL ou informe um Caminho Específico de pasta.'); showAgentError('Designer', 'Selecione um site já clonado na lista ou insira uma URL válida.');
return; return;
} }
agentsState.designer.currentClone = { url, name: 'Site selecionado', isCustomPath: false }; agentsState.designer.currentClone = { url, name: 'Site selecionado' };
} }
setDesignerWorking(true); setDesignerWorking(true);
@@ -336,8 +323,7 @@ async function applyUltraModernRedesign(cloneDir) {
appliedStyles, appliedStyles,
elementsRedesigned, elementsRedesigned,
outputDir: settings.outputDir, outputDir: settings.outputDir,
agentName: 'designer', agentName: 'designer'
isCustomPath: agentsState.designer?.currentClone?.isCustomPath || false
}) })
}); });
const data = await response.json(); const data = await response.json();
+1 -6
View File
@@ -422,12 +422,7 @@
<div class="agent-inputs"> <div class="agent-inputs">
<input type="text" id="designUrl" class="form-control" placeholder="URL do site para redesign..."> <input type="text" id="designUrl" class="form-control" placeholder="URL do site para redesign...">
<div class="mt-3"> <button id="startDesignBtn" class="btn btn-primary mt-3">
<label><i class="fas fa-folder-open"></i> OU Informar Caminho Específico da Pasta (Host/Diretório)</label>
<input type="text" id="designerCustomPath" class="form-control" placeholder="ex: /root/Desktop/CLONE_SITE/meu_site">
<small class="text-muted">Se preenchido, o agente usará esta pasta exata ignorando a seleção acima.</small>
</div>
<button id="startDesignBtn" class="btn btn-primary">
<i class="fas fa-rocket"></i> Iniciar Redesign <i class="fas fa-rocket"></i> Iniciar Redesign
</button> </button>
</div> </div>
+6 -15
View File
@@ -670,27 +670,18 @@ app.post('/api/ai/agent', async (req, res) => {
// AI Inject Redesign Route (Pilar 1 - Agente Designer Real) // AI Inject Redesign Route (Pilar 1 - Agente Designer Real)
app.post('/api/ai/inject-redesign', (req, res) => { app.post('/api/ai/inject-redesign', (req, res) => {
const { cloneDir, appliedStyles, elementsRedesigned, outputDir, agentName, isCustomPath } = req.body; const { cloneDir, appliedStyles, elementsRedesigned, outputDir, agentName } = req.body;
if (!cloneDir) return res.status(400).json({ error: 'cloneDir is required' }); if (!cloneDir) return res.status(400).json({ error: 'cloneDir is required' });
let originalFolderName = ''; let originalFolderName = '';
let folderPath = ''; let folderPath = '';
let newFolderPath = ''; let newFolderPath = '';
if (isCustomPath) { // Sempre usar o diretório interno (cloned-sites)
// Se for um caminho customizado absoluto fornecido pelo usuário const cleanDir = cloneDir.endsWith('/') ? cloneDir.slice(0, -1) : cloneDir;
folderPath = cloneDir; originalFolderName = cleanDir.split('/').pop();
const cleanPath = cloneDir.endsWith('/') ? cloneDir.slice(0, -1) : cloneDir; folderPath = path.join(__dirname, '..', 'cloned-sites', originalFolderName);
originalFolderName = path.basename(cleanPath); newFolderPath = path.join(__dirname, '..', 'cloned-sites', `${originalFolderName}_${agentName || 'designer'}`);
// Sempre salvar a versão do designer em cloned-sites para o preview funcionar
newFolderPath = path.join(__dirname, '..', 'cloned-sites', `${originalFolderName}_${agentName || 'designer'}`);
} else {
// Comportamento padrão (lendo da storage interna cloned-sites)
const cleanDir = cloneDir.endsWith('/') ? cloneDir.slice(0, -1) : cloneDir;
originalFolderName = cleanDir.split('/').pop();
folderPath = path.join(__dirname, '..', 'cloned-sites', originalFolderName);
newFolderPath = path.join(__dirname, '..', 'cloned-sites', `${originalFolderName}_${agentName || 'designer'}`);
}
if (!fs.existsSync(folderPath)) { if (!fs.existsSync(folderPath)) {
return res.status(404).json({ error: 'Cloned site folder not found' }); return res.status(404).json({ error: 'Cloned site folder not found' });