OptionaloptionLevel: VoiceConfigRunOptions.voice — the per-invocation override (seeds the carrier).
OptionalscenarioLevel: VoiceConfigScenarioConfig.voice — the carrier that reaches call().
Optionaldefaults: Partial<ResolvedVoiceConfig>Optional default overrides (test hook).
Resolve the per-run voice config.
Two-tier merge with the
run()-boundary override in front of the scenario-level config:optionLevel(fromRunOptions.voice) wins field-by-field overscenarioLevel(fromScenarioConfig.voice), then pure defaults fill the rest. The resolvedsttis a concrete provider — the default OpenAI provider is constructed here per-run when unset.