Prefer source images for MSR analysis

This commit is contained in:
OpenClaw Agent
2026-07-10 11:36:38 +00:00
parent b059974544
commit 2da1de2f6d

View File

@@ -27,12 +27,9 @@ function coercePreviewUrl(value) {
return "";
}
function resolvePreviewUrlFromOrigin(originNode) {
function resolveFileWidgetUrlFromOrigin(originNode) {
if (!originNode) return "";
const preview = Array.isArray(originNode.imgs) ? coercePreviewUrl(originNode.imgs[0]) : "";
if (preview) return preview;
const widgets = originNode.widgets || [];
const fileWidget = widgets.find((widget) => ["image", "filename", "file"].includes(widget.name));
const subfolderWidget = widgets.find((widget) => widget.name === "subfolder");
@@ -45,22 +42,47 @@ function resolvePreviewUrlFromOrigin(originNode) {
);
}
function resolvePreviewUrlFromOrigin(originNode) {
if (!originNode) return "";
const preview = Array.isArray(originNode.imgs) ? coercePreviewUrl(originNode.imgs[0]) : "";
return preview || "";
}
function resolveCandidateImageUrls(originNode) {
const urls = [];
const fileUrl = resolveFileWidgetUrlFromOrigin(originNode);
const previewUrl = resolvePreviewUrlFromOrigin(originNode);
if (fileUrl) urls.push(fileUrl);
if (previewUrl && previewUrl !== fileUrl) urls.push(previewUrl);
return urls;
}
async function imageInputToDataUrl(node, inputName) {
const originNode = getOriginNodeForInput(node, inputName);
const previewUrl = resolvePreviewUrlFromOrigin(originNode);
if (!previewUrl) return null;
const candidateUrls = resolveCandidateImageUrls(originNode);
if (!candidateUrls.length) return null;
for (const imageUrl of candidateUrls) {
try {
const response = await fetch(previewUrl);
const response = await fetch(imageUrl);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const blob = await response.blob();
if (!blob.type.startsWith("image/")) {
throw new Error(`Unexpected blob type: ${blob.type || "unknown"}`);
}
return await new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.readAsDataURL(blob);
});
} catch (error) {
console.error("[MSRCharacter] Failed to load preview image", error);
return null;
console.warn("[MSRCharacter] Failed candidate image source", imageUrl, error);
}
}
return null;
}
function setWidgetValue(node, widget, value) {
@@ -120,7 +142,11 @@ function refreshCharacterPreview(node) {
const inputNames = ["image_1", "image_2"];
const previewUrls = inputNames
.map((inputName) => resolvePreviewUrlFromOrigin(getOriginNodeForInput(node, inputName)))
.map((inputName) => {
const originNode = getOriginNodeForInput(node, inputName);
const candidates = resolveCandidateImageUrls(originNode);
return candidates[0] || "";
})
.filter(Boolean);
const previewRow = node._msrPreviewRow;