Extract App Shell from static prefetches (#94095)
Adds support for extracting an App Shell from a more concrete prerender
response. The server sends down a byte offset that represents the subset
of the stream that corresponds to the reusable App Shell.
This does _not_ yet implement shell extraction for per-segment prefetch
responses. Implementing this adds an additional layer of complexity,
because those responses are generated during a separate phase of the
build process. We do intend to implement this, but it's a non-essential
optimization that can come later.
This also does not yet implement shell extraction from a navigation
response (the Cached Navigations feature), though both features are
based on essentially the same mechanism. I'm deferring this to a
subsequent PR because some of the existing implementation needs to be
rethought in light of the new App Shells based model; for example, the
"static stage" boundary might not make sense to track separately from
the App Shell.
The main practical upshot of the PR is that if you have a fully
statically prerendered page with no dynamic holes, that page's App Shell
can now be fetched by the client without incurring any runtime server
execution cost: the server will return the full static page, and the
client will extract the App Shell from that concrete response.
<!-- NEXT_JS_LLM_PR -->