desktop: quote-only and attachment-only messages require inline text #4804
Description
What happened
In Maka Desktop, model-visible structured content cannot consistently be sent unless the inline editor also contains text.
- A reference-sized paste is staged as a "Pasted text" quote, but a quote-only submit is rejected or fails before the provider request.
- An image or other attachment cannot be submitted by itself.
- When a quote-only message is projected into the transcript, an empty user bubble is rendered beside the quote chip.
Expected: inline text, a quote, or an attachment should each be sufficient message content. Structured-only turns should reach the model and should not render an empty text bubble.
How to reproduce
- Run Maka Desktop from source.
- Paste enough text for the composer to stage it as a "Pasted text" quote, or attach an image.
- Leave the inline message editor empty.
- Press Send.
For quote-only turns that get past the composer, the Runtime Host fails the turn before the model call. A later plain-text message succeeds with the same connection.
Environment
- Maka commit: e562a87
- OS: Windows 10.0.26200.0 (x64)
- Surface: Desktop
- Node.js: v22.23.2
- Locale: zh-CN
Logs, screenshots, or additional context
The failed quote-only run records:
durable current-run projection is not replayable
Its replay diagnostics include:
empty_text_skipped
The durable user RuntimeEvent has an empty text field and a non-empty quotes array. The replay visibility predicate checks only text length, so it drops model-visible structured context and rejects the resulting projection. The same text-only admission assumption also exists at the Desktop IPC, Runtime Host protocol, and root-turn persistence boundaries.
Activity
[-]Allow quote-only and attachment-only messages in the desktop composer[/-][+]desktop: quote-only and attachment-only messages require inline text[/+]ggbdpq commentedon Sep 4, 2026
take
chore(runtime-host): declare the structured-only admission widening w…
fix(runtime-host): bump compatibility epoch for message admission (ap…
fix(runtime-host): admit structured-only Messages and keep them model…
chore(runtime-host): declare the structured-only admission widening w…
fix(runtime-host): bump compatibility epoch for message admission (ap…
test(storage): pin quote-only and attachment-only durable admission
test(runtime): pin the quoted excerpt in the recap of a structured-on…
fix(desktop): pass the renderer architecture check on the merged head
2BAB commentedon Sep 9, 2026
Adding a screenshot of the same issue on macOS (source build at
fcff80f589): pasting a multiline prompt turns it into a “Pasted text” quote, and Send stays disabled unless I add inline text—even when the pasted prompt already contains instructions.fix(ui): keep message metadata on quote-only user messages
Merge branch 'main' into fix/structured-only-message-admission
fix(core,ui,desktop): land the review follow-ups on the structured-on…
fix(desktop): accept the wire's inline base64 attachment carrier in t…