Cut daemon peak memory to about 80 MB with three large sessions
Measured with a new opt-in inspector: ALBEDO_INSPECT=1 joins Erlang distribution (cookie in $ALBEDO_HOME/inspect.cookie) so albedo_inspect:report/0, peak/1 and sharing/0 can break memory down by process, allocator carrier and session state field. ALBEDO_INSPECT_EVERY=N logs a report every N seconds. A transcript now lives in memory only while a turn uses it: attach renders it from a paged load and drops it, and a turn hands it to the worker and drops it. Sessions collect after dropping state, since an idle process never does. Worker closures no longer capture the whole session state. Remembering entries on an unloaded transcript no longer creates a truncated one. Requests coalesce small JSON fragments per input and pass large binaries by reference, so the send to the HTTP connection copies no content. The context snapshot renders history only when /context asks for it. Image validation on load scans the base64 instead of decoding and re-encoding it. The models.dev catalog is stored trimmed to the fields lookups read (every provider kept: codex resolves through another provider's entry), parsed once across concurrent sessions in a throwaway process, and its reduced index is cached beside it. The CLI starts the daemon with process/port limits and allocator settings sized for a local daemon; ERL_FLAGS set by the operator still win.