Description
When an image file is pasted into the TUI composer (pasted path text, or a Finder file copy), the attachment is always submitted as an inline data: URL. The original path only survives in the part's source.path metadata, which the model never sees. After materialization the model effectively has an image and a temp path, so it cannot reference the source file it was given.
The server already does the right thing for file: URL attachments: in packages/opencode/src/session/prompt.ts it emits a synthetic text part with {"filePath": ...} alongside the image. The TUI paste flow just never produces file: URLs, so that path is unreachable.
Secondary symptom on macOS: pasting with the internal paste command (prompt.paste) with a Finder file copy on the clipboard attaches the file's generic icon bitmap, because clipboard.read() requests the clipboard as "PNGf" and the icon flavors win over the file URL/text flavors.
Steps to reproduce
- Copy an image file in Finder
- Paste it into the TUI composer (it is auto-attached as
[Image 1])
- Submit and ask the model for the path of the attached image
- The model has no path: the part is a
data: URL, materialized to a temp file
OpenCode version
v0.0.0-beta-19381 (also present on dev)
Operating System
macOS
Description
When an image file is pasted into the TUI composer (pasted path text, or a Finder file copy), the attachment is always submitted as an inline
data:URL. The original path only survives in the part'ssource.pathmetadata, which the model never sees. After materialization the model effectively has an image and a temp path, so it cannot reference the source file it was given.The server already does the right thing for
file:URL attachments: inpackages/opencode/src/session/prompt.tsit emits a synthetic text part with{"filePath": ...}alongside the image. The TUI paste flow just never producesfile:URLs, so that path is unreachable.Secondary symptom on macOS: pasting with the internal paste command (
prompt.paste) with a Finder file copy on the clipboard attaches the file's generic icon bitmap, becauseclipboard.read()requeststhe clipboard as "PNGf"and the icon flavors win over the file URL/text flavors.Steps to reproduce
[Image 1])data:URL, materialized to a temp fileOpenCode version
v0.0.0-beta-19381 (also present on dev)
Operating System
macOS