3c4f5c5217
After sleep/wake, a long idle, or a remote backend restart, the gateway drops its in-memory runtime session while the desktop still holds the old id. prompt.submit already recovered, so plain text kept working and the failure looked selective: attaching an image or running /compress died with a bare "session not found" and a new chat was the only workaround. Attach runs BEFORE prompt.submit, so submit's recovery never got a chance — image.attach_bytes / image.attach / file.attach failed first. Route them (and session.compress) through the shared resolver, and thread the recovered id back to the caller so the follow-up submit targets the live session instead of the dead one. Attachment bytes are read once, outside the retry, so recovering a large upload doesn't re-read it. /compress deliberately does NOT opt into timeout recovery: it is legitimately LLM-slow and retrying a timeout would double a minutes-long call. Reported-by: bapemonkey (Discord) Co-authored-by: xxxigm <xxxigm@users.noreply.github.com> Co-authored-by: zzz163519 <zzz163519@users.noreply.github.com> Co-authored-by: luxles <luxles@users.noreply.github.com>