Controller only authorizes and returns ChunkReceipt. Multipart vs local assemble lives in ChunkedAssetReceiver; JSON shape comes from MediaResource. Co-authored-by: Cursor <cursoragent@cursor.com>