ClientCapabilities.forVersion

Project these capabilities to the wire shape for protocol version v, stripping any field newer than v and migrating tasks to the draft extensions map. roots/rootsListChanged, a bare sampling, and experimental exist in every supported version and pass through unchanged. elicitation applies from 2025-06-18, so it is gated to >= 2025-06-18 (a client that set only an elicitation submode still projects a bare elicitation there). The sampling/elicitation sub-objects (sampling.tools/sampling.context, elicitation.form/elicitation.url) apply from 2025-11-25 and are stripped below that. tasks is a first-class client capability in the stable 2025-11-25 era (and any future stable revision >= 2025-11-25); the draft schema has no top-level client tasks, so for draft it is folded into extensions[tasksExtensionKey]. The extensions negotiation map itself is draft-only.

struct ClientCapabilities
const @safe
forVersion