The tool serializers for openai-responses, openai-codex-responses, and
openai-completions previously spread strict only when the effective
value was true, so an author's tool.strict === false collapsed into an
omitted flag on the wire. Some OpenAI-compat backends distinguish the
two states — omitted lets the model over-fill optional arguments with
placeholders while explicit false suppresses them — so the drop lost
author intent.
Wire emission now preserves author-set false. For openai-completions the
preservation is gated on toolStrictMode === 'mixed' with
compat.supportsStrictMode !== false, because the all_strict → none
collapse and providers that reject the strict key rely on uniformly
absent values.
Fixes#4336