Narrow to the end_turn variant, validating its payload.
Narrow to the max_tokens variant, validating its payload.
Narrow to the max_turn_requests variant, validating its payload.
Narrow to the refusal variant, validating its payload.
Narrow to the cancelled variant, validating its payload.
Narrow to the error variant, validating its payload.
Narrow to the none variant, validating its payload.
Narrow to a custom or future variant: the stopReason tag matches no known variant.
TypeScript keeps the known variants in the narrowed union (they are
structural subtypes of the catch-all), so read vendor payload keys
via a widening cast: (value as Record<string, unknown>).someKey.
Validated type guards for
IdleStateUpdate's known variants.Each guard validates the variant's payload, not just its discriminant tag: a malformed known variant (right tag, wrong payload) matches no guard — mirroring wire validation, which rejects such values instead of classifying them as custom.
Guards check the value as given: fields that wire deserialization salvages to a default (e.g. a malformed
_meta) are only normalized by parsing, and for ambiguous raw shapes (a known tag combined with another variant's payload) guards are conservative where wire parsing may still accept the value — narrow wire-parsed values when exact parity matters.