87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
(() => {
|
|
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;
|
|
})();
|