With every cached image in use, a newly loaded entry (refs 0) was the only
evictable one and got revoked before its waiting hook acquired it, leaving
the image stuck on the loading placeholder; two loads finishing together
could also evict each other. Count pending waiters per image and skip
images that still have one when evicting.
Rebuild the session page around structured transcripts.
- Session list: project groups start collapsed and remember the ones
expanded by hand; unchanged session files reuse their parsed metadata.
- Backend: all nine agents' transcripts parse into structured blocks
(text, thinking, tool call / result, image, event, step); the Codex
rollout parser is rewritten. New commands stream transcripts over a
Channel, serve full block content, image bytes and Finder reveal behind
validated content refs, and export a session as a Markdown file; a
transcript cache (8 entries / 96 MB) keyed by source fingerprints.
open_external now only allows http, https and mailto.
- Reader: turns laid out as prompt -> execution steps -> final reply, with
steps folded into a one-line summary, failures always shown, each
agent's native symbols and verbs, all / conversation / changes filters,
a conversation outline, in-session find, Markdown rendering (ported
from #6332), image lightbox and copy / export as Markdown.
- Review follow-ups: clippy, Codex 0.119-0.128 duplicate steps and late
failure status, Grok Build in-progress refresh, full arguments for long
shell commands, and shared block helpers across the parsers.
Co-authored-by: bigben446 <bigben446@users.noreply.github.com>
Co-authored-by: Jason <farion1231@gmail.com>