diff --git a/src/agents/pi-embedded-runner/run/images.ts b/src/agents/pi-embedded-runner/run/images.ts index fbfe9ee21..accaa8d73 100644 --- a/src/agents/pi-embedded-runner/run/images.ts +++ b/src/agents/pi-embedded-runner/run/images.ts @@ -128,8 +128,12 @@ export function detectImageReferences(prompt: string): DetectedImageRef[] { if (seen.has(raw.toLowerCase())) continue; seen.add(raw.toLowerCase()); // Use fileURLToPath for proper handling (e.g., file://localhost/path) - const resolved = fileURLToPath(raw); - refs.push({ raw, type: "path", resolved }); + try { + const resolved = fileURLToPath(raw); + refs.push({ raw, type: "path", resolved }); + } catch { + // Skip malformed file:// URLs + } } // Pattern for file paths (absolute, relative, or home) diff --git a/src/web/media.ts b/src/web/media.ts index 4768772d1..48b375bef 100644 --- a/src/web/media.ts +++ b/src/web/media.ts @@ -27,7 +27,11 @@ async function loadWebMediaInternal( const { maxBytes, optimizeImages = true } = options; // Use fileURLToPath for proper handling of file:// URLs (handles file://localhost/path, etc.) if (mediaUrl.startsWith("file://")) { - mediaUrl = fileURLToPath(mediaUrl); + try { + mediaUrl = fileURLToPath(mediaUrl); + } catch { + throw new Error(`Invalid file:// URL: ${mediaUrl}`); + } } const optimizeAndClampImage = async (buffer: Buffer, cap: number) => {