2962ba2b7b
'auto' is a sentinel meaning "inherit from main runtime / auto-detect", not a literal model id -- already handled for cfg_model (config-derived) in _resolve_task_provider_model, but not for the explicit `model` kwarg. MoA reference/aggregator slots (agent/moa_loop.py's _slot_runtime) forward a preset's `model:` field as this explicit argument rather than through auxiliary.<task> config, so a MoA preset configured with `model: auto` (a natural thing to try given the existing auxiliary.*.model: auto convention) reached this function as the explicit `model` arg and took the `model or cfg_model` branch, bypassing the cfg_model-only sentinel check entirely -- sending the literal string "auto" to the wire as a model id. Normalize both the explicit `model` and `cfg_model` the same way, fixing this at the single chokepoint every caller (MoA included) already goes through, rather than patching moa_loop.py separately.