diff --git a/src/ucode/agents/claude.py b/src/ucode/agents/claude.py index 01b3a1f9..9f1ebb29 100644 --- a/src/ucode/agents/claude.py +++ b/src/ucode/agents/claude.py @@ -1412,7 +1412,6 @@ def launch(state: dict, tool_args: list[str]) -> None: if ( workspace and os.environ.get(GATEWAY_MODEL_DISCOVERY_ENV_VAR) == "1" - and not _has_provider_launch(state) ): # Discovery is launch-scoped. Pass it in the process environment rather # than persisting it in Claude's private or OS-managed settings. diff --git a/tests/test_agent_claude.py b/tests/test_agent_claude.py index 61f07438..66526914 100644 --- a/tests/test_agent_claude.py +++ b/tests/test_agent_claude.py @@ -214,9 +214,7 @@ def test_smart_routing_does_not_persist_gateway_model_discovery(self, monkeypatc assert "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY" not in overlay["env"] def test_gateway_model_discovery_skipped_under_provider(self, monkeypatch): - # A Model Provider Service routes every request to the external provider, - # so a discovered gateway endpoint id would reach a provider that can't - # resolve it — discovery must be off in that mode. + # Discovery is launch-scoped and should not be persisted in settings. monkeypatch.setenv("ENABLE_CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY", "1") overlay, _ = claude.render_overlay(WS, "s4", provider="main.x.claude-svc") assert "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY" not in overlay["env"] @@ -1221,6 +1219,26 @@ def test_gateway_discovery_uses_direct_gateway(self, monkeypatch): assert os.environ["CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"] == "1" assert calls == [["claude", "--settings", str(claude.CLAUDE_SETTINGS_PATH), "--debug"]] + @pytest.mark.parametrize( + "provider_state", + [ + {"provider_services": {"claude": "main.default.anthropic"}}, + {"_claude_launch_provider": "main.default.anthropic"}, + ], + ) + def test_gateway_discovery_enabled_for_provider_launch(self, monkeypatch, provider_state): + calls: list[list[str]] = [] + monkeypatch.delenv(v2.ENV_VAR, raising=False) + monkeypatch.setenv(claude.GATEWAY_MODEL_DISCOVERY_ENV_VAR, "1") + monkeypatch.delenv("CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY", raising=False) + monkeypatch.setattr(claude, "get_databricks_token", lambda *_args: "token") + monkeypatch.setattr(claude, "exec_or_spawn", lambda argv: calls.append(argv)) + + claude.launch({"workspace": WS, **provider_state}, ["--debug"]) + + assert os.environ["CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"] == "1" + assert calls == [["claude", "--settings", str(claude.CLAUDE_SETTINGS_PATH), "--debug"]] + class TestWriteToolConfigPrunesStaleModelEnv: """Stale ucode-managed model env keys (ANTHROPIC_MODEL, etc.) from earlier