acpmux: retain ordered prompt metadata for transcript reloads
Persist ordered agent prompt content metadata so reopened and queued chats retain image, text, file, document, recording and pasted-chip order. The ACP prompt itself continues to carry only validated blocks; the daemon stores bounded display descriptors separately and strips pane metadata before forwarding to the agent.
Leo: "say you paste an image and then you type something, there's the implicit captioning of that sort of thing"
Changelog
- Add ordered
user_message.inlinePartsand queued/queue-updated metadata plumbing through immediate, queued, steer, restart and handoff paths. - Validate bounded
inlinePartsdescriptors by block kind/index and UTF-16 text ranges; reject unsafe fields and never persist raw bytes, paths or text in descriptors. - Preserve failed-image identities with
persisted:false; require file descriptors to carry a name and a nonempty resource URI; keep #23047 send-by-reference attachment handling separate and compatible. Fix the image descriptor move so the Rust path compiles. - Rehydrate text-file and pasted chips by descriptor plus the canonical ACP block text.
Base 9d483d2fd90d7250909eefb992bcd023a8d88303; head 1b1414ca299ce957619778a500dde58ad3021f45; 321 changed lines.
Validation
cargo fmt --manifest-path cmux-tui/Cargo.toml --all -- --check, schema JSON parsing, git diff --check, and prepush-gate.py pass. Focused Rust tests cover descriptor validation, ordered image/text/file metadata, failed image persistence and queue metadata. Cargo build/test and app suites run through PR CI/fleet, not this host.
pr-overlap found #23921 and #23047 sharing prompt_images.rs/keep; this PR has a distinct ordered-metadata cause and preserves their by-reference URI contract. No Chief files were changed.
Agent session: big-red