1c80023b12
A preset registers its tools into the agent's OWN layer, so `session.history` served while no agent exists found no presenter at all and every card degraded to the generic renderer — silently, because a viewless entry is also what a tool with no presenter produces. The web client opens a session by reading its transcript, so this was the ordinary path, not an edge: the write row lost its diff card, and with it the `locations` the produced-files row derives from. The read now resolves the agent through the same deduplicated resume every other session method takes, but only when a roster is composed: a deployment without presets keeps its tools on the host layer, which needs no agent to address, and keeps the storage-only read unchanged. A resolution failure stays a successful read.