Follow-up from #929 / PR #1073.
What lands in #1073
The main process now produces a structured loss report for every attachment on a rewound prompt — restored, unavailable (external-reference / unreadable), or unsupported — and it crosses IPC as RewindSessionResult.promptAttachments, with the base64 stripped (the restored images already cross in promptImages).
The picker uses it: an attachment-only prompt is labelled [Image prompt], [Attachment not supported: spec.pdf] or [Attachment unavailable: shot.png] instead of vanishing from the list.
What does not
Nothing surfaces it after the rewind happens. src/renderer/src/workspace/hook/actions/provider.ts reads promptImages and ignores promptAttachments entirely, so:
- Rewinding to a Codex/OpenCode/Grok image prompt prefills the composer with nothing at all — those providers declare
supportsImageAttachments: false, so even a perfectly restored image is dropped on the way in. The picker row said [Image prompt]; the composer is empty and says nothing about why.
- Rewinding to a Claude prompt whose attachment was a reference or an unsupported document loses it silently the same way.
Review of #1073 found this and it is correct: the row is a truthful description of the turn, but the user acts on it and then gets no explanation.
What to do
Read result.promptAttachments in the rewind action and tell the user what did not come back — a toast, or an inline note on the prefilled composer. The report is designed for exactly this and carries status, reason, mediaType and name.
Worth deciding at the same time: whether a provider that cannot carry images should offer an image-only prompt as a rewind target at all, or offer it with the loss stated up front.
Follow-up from #929 / PR #1073.
What lands in #1073
The main process now produces a structured loss report for every attachment on a rewound prompt —
restored,unavailable(external-reference/unreadable), orunsupported— and it crosses IPC asRewindSessionResult.promptAttachments, with the base64 stripped (the restored images already cross inpromptImages).The picker uses it: an attachment-only prompt is labelled
[Image prompt],[Attachment not supported: spec.pdf]or[Attachment unavailable: shot.png]instead of vanishing from the list.What does not
Nothing surfaces it after the rewind happens.
src/renderer/src/workspace/hook/actions/provider.tsreadspromptImagesand ignorespromptAttachmentsentirely, so:supportsImageAttachments: false, so even a perfectly restored image is dropped on the way in. The picker row said[Image prompt]; the composer is empty and says nothing about why.Review of #1073 found this and it is correct: the row is a truthful description of the turn, but the user acts on it and then gets no explanation.
What to do
Read
result.promptAttachmentsin the rewind action and tell the user what did not come back — a toast, or an inline note on the prefilled composer. The report is designed for exactly this and carriesstatus,reason,mediaTypeandname.Worth deciding at the same time: whether a provider that cannot carry images should offer an image-only prompt as a rewind target at all, or offer it with the loss stated up front.