f0381ee4ae
Dev servers, hot-reload builds, and chat-GUI artifact previews live on localhost/private addresses and change on every save — a 20-minute cached copy would show a stale build exactly when freshness is the point of fetching. The extract cache now declines loopback, private, link-local, *.local, *.localhost, and single-label LAN hostnames on both put and get. Hostname heuristics only (no DNS) — this is a freshness carveout, not a security boundary; SSRF enforcement is unchanged in tools/url_safety.py. Public URLs keep the full TTL.