From 7ed4f26b5079691eb5ab80c8f752e96b579c05bb Mon Sep 17 00:00:00 2001 From: Marcos Reifonas Date: Sun, 17 May 2026 17:19:41 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Feat:=20Integra=C3=A7=C3=A3o=20d?= =?UTF-8?q?o=20WebClone=20AI=20com=20Playwright=20e=20suporte=20a=20Mocks?= =?UTF-8?q?=20de=20Rede?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/sidebar/menuConfig.ts | 9 +- src/main.tsx | 10 +- src/pages/WebClone.tsx | 201 +++++++++++++++++++++++++++ src/pages/index.ts | 1 + 4 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 src/pages/WebClone.tsx diff --git a/src/components/sidebar/menuConfig.ts b/src/components/sidebar/menuConfig.ts index 1c0c926..1a9bc26 100644 --- a/src/components/sidebar/menuConfig.ts +++ b/src/components/sidebar/menuConfig.ts @@ -17,7 +17,8 @@ import { Settings, Shield, UserCog, - Cog + Cog, + Globe } from "lucide-react"; import { MenuItem, MenuGroup } from './types'; @@ -70,6 +71,12 @@ export const menuGroups: MenuGroup[] = [ key: "inconsistencias", title: "Ver Inconsistências", url: "/ferramentas/inconsistencias", + }, + { + key: "webclone", + title: "WebClone AI", + url: "/ferramentas/webclone", + icon: Globe, } ] }, diff --git a/src/main.tsx b/src/main.tsx index ae0d80d..85b34a8 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -53,7 +53,8 @@ import { MapaInterativo, Atribuicoes, VerInconsistencias, - SolicitacaoCompras + SolicitacaoCompras, + WebClone } from './pages' import './index.css' @@ -142,6 +143,13 @@ ReactDOM.createRoot(document.getElementById('root')!).render( } /> + + + + + + } /> {/* Estoque */} (null); + const [activeTab, setActiveTab] = useState('clone'); + + const handleClone = async (e: React.FormEvent) => { + e.preventDefault(); + if (!url) { + toast.error('Por favor, insira uma URL válida'); + return; + } + + setLoading(true); + toast.info(`Iniciando clonagem inteligente de ${url}...`); + + try { + // Comunicando com a API do Crawler na porta 3001 (ou rota de gateway) + const res = await fetch('http://localhost:3001/api/crawl', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ startUrl: url, maxPages: 5 }) + }); + + if (!res.ok) { + throw new Error('Falha ao comunicar com o serviço de clonagem'); + } + + const data = await res.json(); + setResult(data); + toast.success('Clonagem e recriação concluídas com sucesso!'); + setActiveTab('resultados'); + } catch (error: any) { + console.error(error); + toast.error(error.message || 'Erro ao realizar o clone da página'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+

+ WebClone AI +

+

+ Clonagem inteligente avançada, mocking de SPAs e recriação generativa de componentes. +

+
+ + Playwright + IA + Service Workers + +
+ + + + Nova Clonagem + Resultados + + + + + + Iniciar Processo de Clonagem + + Insira a URL do site. O sistema irá extrair o HTML, processar o Shadow DOM, criar mocks de API XHR/Fetch e emular formulários via IA. + + + +
+
+
+ + setUrl(e.target.value)} + className="pl-10 h-12 text-base" + required + /> +
+ +
+
+
+
+ +
+ + + + Mocks de Rede (SPA) + + + + Injeta um Service Worker local para responder chamadas XHR e Fetch gravadas durante a sessão original, permitindo que sites React/Vue funcionem offline. + + + + + + + Recriação com IA + + + + Detecta formulários quebrados ou áreas dinâmicas vazias e usa LLMs multimodais para reescrever o componente em Vanilla JS/CSS funcional. + + + + + + + Declarative Shadow DOM + + + + Vasculha e abre as árvores de Shadow DOM ocultas, convertendo-as para templates declarativos para perfeita fidelidade visual. + + +
+
+ + + {result && ( + + + + Relatório do Clone + + Detalhes da extração e emulação do site {result.rootUrl} + + +
+
+
Páginas Clonadas
+
{result.totalPages || result.pages?.length || 1}
+
+
+
Tempo de Crawl
+
{result.crawlTime ? `${(result.crawlTime / 1000).toFixed(1)}s` : 'N/A'}
+
+
+
Profundidade Máx
+
{result.crawlDepth || 1}
+
+
+
Status
+ Concluído +
+
+ +
+ + +
+
+
+ )} +
+
+
+ ); +} diff --git a/src/pages/index.ts b/src/pages/index.ts index 0dfb800..614535d 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -38,3 +38,4 @@ export { default as PrioridadesFabricacao } from './PrioridadesFabricacao'; export { default as MapaInterativo } from './MapaInterativo'; export { default as Atribuicoes } from './Atribuicoes'; export { default as VerInconsistencias } from './VerInconsistencias'; +export { default as WebClone } from './WebClone';