diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index ad7b6f1a91d7..717a4fd1cc4e 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -971,7 +971,15 @@ export namespace SessionPrompt { }, ] } - break + // For non-text data URLs (images, PDFs from clipboard paste), pass through as-is + return [ + { + ...part, + id: part.id ?? Identifier.ascending("part"), + messageID: info.id, + sessionID: input.sessionID, + }, + ] case "file:": log.info("file", { mime: part.mime }) // have to normalize, symbol search returns absolute paths @@ -1157,6 +1165,20 @@ export namespace SessionPrompt { source: part.source, }, ] + default: + // Unknown protocol - log and return part unchanged to prevent crashes + log.warn("unsupported URL protocol for file part", { + protocol: url.protocol, + url: part.url.slice(0, 100), + }) + return [ + { + ...part, + id: part.id ?? Identifier.ascending("part"), + messageID: info.id, + sessionID: input.sessionID, + }, + ] } }