diff --git a/nanobot/cli/onboard.py b/nanobot/cli/onboard.py index d1a0cf0f..53431471 100644 --- a/nanobot/cli/onboard.py +++ b/nanobot/cli/onboard.py @@ -1590,10 +1590,9 @@ def _get_quick_start_provider_info() -> dict[str, _QuickStartProviderInfo]: def _get_quick_start_provider_choices() -> dict[str, str]: """Return Quick Start provider display choices.""" - choices = { - info.display_name: provider_name - for provider_name, info in _get_quick_start_provider_info().items() - } + choices: dict[str, str] = {} + for provider_name, info in _get_quick_start_provider_info().items(): + choices.setdefault(info.display_name, provider_name) choices[_QUICK_START_CUSTOM_PROVIDER_CHOICE] = "custom" return choices diff --git a/tests/agent/test_onboard_logic.py b/tests/agent/test_onboard_logic.py index 10deb476..b91b7f4e 100644 --- a/tests/agent/test_onboard_logic.py +++ b/tests/agent/test_onboard_logic.py @@ -975,15 +975,20 @@ class TestMainMenuUpdate: choices = onboard_wizard._get_quick_start_provider_choices() selected_provider_names = set(choices.values()) - expected_provider_names = { - spec.name - for spec in PROVIDERS - if spec.name != "custom" and not spec.is_oauth and not spec.is_transcription_only - } + expected_provider_names = set() + seen_display_names: set[str] = set() + for spec in PROVIDERS: + if spec.name == "custom" or spec.is_oauth or spec.is_transcription_only: + continue + if spec.display_name in seen_display_names: + continue + seen_display_names.add(spec.display_name) + expected_provider_names.add(spec.name) expected_provider_names.add("custom") assert selected_provider_names == expected_provider_names assert "assemblyai" not in selected_provider_names + assert choices["OpenCode Zen"] == "opencode" assert choices[onboard_wizard._QUICK_START_CUSTOM_PROVIDER_CHOICE] == "custom" def test_quick_start_provider_choice_skips_advanced_prompts(self, monkeypatch):