Pin the route and log the request, without sending it.
Separated from LlmRuntime.stream because the agent loop (P3.2) needs the split: it prepares a step's request, then decides — under cancellation, under an approval — whether to dispatch it. The header row exists either way, which is correct: AMC decided to ask the model that, and a request prepared and abandoned is a fact worth having.
Which providers this runtime can reach right now.
Prepare and dispatch in one call — the direct ctx.llm.stream() path.
Local protocol/capability discovery, never a claim of a live model probe.