(() => { const messages = []; const selectors = [ ".assistant-msg-container, .user-msg-container", '[class*="msg-container"]', ".message-container", "article", '[data-testid="message"]', ".chat-message", ]; let containers = []; for (const sel of selectors) { const found = document.querySelectorAll(sel); if (found.length > 0) { containers = Array.from(found); break; } } if (containers.length === 0) { console.log("No message containers found"); return []; } containers.forEach((container) => { const isUser = container.classList.contains("user-msg-container") || container.classList.contains("user") || container.getAttribute("data-role") === "user"; let content = ""; const images = []; const textSelectors = [ ".whitespace-pre-line", ".progressive-markdown-content", '[class*="content"]', "p", "div", '[class*="text"]', ]; for (const tSel of textSelectors) { const textEl = container.querySelector(tSel); if (textEl && textEl.textContent.trim().length > 10) { content = textEl.textContent.trim(); break; } } const imgEls = container.querySelectorAll( '.inline-image-card img, img[alt="Generated image"]', ); imgEls.forEach((img) => { try { const canvas = document.createElement("canvas"); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; if (canvas.width > 0 && canvas.height > 0) { canvas.getContext("2d").drawImage(img, 0, 0); images.push({ src: canvas.toDataURL("image/png"), alt: img.alt || "Generated image", }); } } catch (_e) {} }); if (content || images.length > 0) { messages.push({ role: isUser ? "user" : "assistant", content: content, images: images, }); } }); window.scannedMessages = messages; console.log( `Extracted ${messages.length} messages. Stored in window.scannedMessages`, ); const blob = new Blob([JSON.stringify(messages, null, 2)], { type: "application/json", }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `lumo-messages-${new Date().toISOString().slice(0, 19).replace(/[:T]/g, "-")}.json`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); return messages; })();