diff --git a/src/ucode/managed_wizard.py b/src/ucode/managed_wizard.py index dab1882..d0826f3 100644 --- a/src/ucode/managed_wizard.py +++ b/src/ucode/managed_wizard.py @@ -263,6 +263,9 @@ def _select_provider_service(tool: str, workspace: str, token: str) -> dict | No return None usable = [service for service in services if service_usable_for_tool(tool, service)] + if tool == "claude": + # Claude subscription relays are not reliable enough for managed configurations yet. + usable = [service for service in usable if not service.get("relayed")] if not usable: if services: # Services exist but none match this agent's dialect — say so, since "no picker appeared" diff --git a/tests/test_managed_wizard.py b/tests/test_managed_wizard.py index 550a67d..1634de5 100644 --- a/tests/test_managed_wizard.py +++ b/tests/test_managed_wizard.py @@ -1309,6 +1309,41 @@ def test_only_matching_services_are_offered(self): offered = [value for value, _ in select.call_args_list[1][0][1]] assert offered == ["main.default.lilly-anthropic"] + def test_relayed_services_are_not_offered_for_claude(self): + relayed = { + **ANTHROPIC_SERVICE, + "name": "main.default.claude-enterprise", + "targets": [], + "relayed": True, + } + with ( + patch.object( + wizard, + "list_model_provider_services", + return_value=([relayed, ANTHROPIC_SERVICE], None), + ), + patch.object( + wizard, + "prompt_for_selection", + side_effect=["mps", "main.default.lilly-anthropic"], + ) as select, + patch.object(wizard, "all_users_can_use_schema", return_value=True), + ): + service = wizard._select_provider_service("claude", WORKSPACE, "token") + assert service == ANTHROPIC_SERVICE + offered = [value for value, _ in select.call_args_list[1][0][1]] + assert offered == ["main.default.lilly-anthropic"] + + def test_only_relayed_services_falls_back_to_databricks_for_claude(self): + relayed = {**ANTHROPIC_SERVICE, "targets": [], "relayed": True} + with ( + patch.object(wizard, "list_model_provider_services", return_value=([relayed], None)), + patch.object(wizard, "prompt_for_selection") as select, + patch.object(wizard, "print_note"), + ): + assert wizard._select_provider_service("claude", WORKSPACE, "token") is None + assert not select.called + def test_warns_when_all_users_lack_schema_access(self): # The picked MPS's schema isn't granted to all workspace users, so developers who pull the # config may hit "does not have USE_SCHEMA"; warn but still return the service (never block).