agent: Only consider zed provider authenticated if TOS is accepted (#33693)

Michael Sloan created

Also now auto-expands the zed provider section when TOS is not accepted

Release Notes:

- N/A

Change summary

crates/agent_ui/src/agent_configuration.rs   | 14 ++++++++++++--
crates/language_models/src/provider/cloud.rs |  3 ++-
2 files changed, 14 insertions(+), 3 deletions(-)

Detailed changes

crates/agent_ui/src/agent_configuration.rs 🔗

@@ -16,7 +16,9 @@ use gpui::{
     Focusable, ScrollHandle, Subscription, Task, Transformation, WeakEntity, percentage,
 };
 use language::LanguageRegistry;
-use language_model::{LanguageModelProvider, LanguageModelProviderId, LanguageModelRegistry};
+use language_model::{
+    LanguageModelProvider, LanguageModelProviderId, LanguageModelRegistry, ZED_CLOUD_PROVIDER_ID,
+};
 use notifications::status_toast::{StatusToast, ToastIcon};
 use project::{
     context_server_store::{ContextServerConfiguration, ContextServerStatus, ContextServerStore},
@@ -86,6 +88,14 @@ impl AgentConfiguration {
         let scroll_handle = ScrollHandle::new();
         let scrollbar_state = ScrollbarState::new(scroll_handle.clone());
 
+        let mut expanded_provider_configurations = HashMap::default();
+        if LanguageModelRegistry::read_global(cx)
+            .provider(&ZED_CLOUD_PROVIDER_ID)
+            .map_or(false, |cloud_provider| cloud_provider.must_accept_terms(cx))
+        {
+            expanded_provider_configurations.insert(ZED_CLOUD_PROVIDER_ID, true);
+        }
+
         let mut this = Self {
             fs,
             language_registry,
@@ -94,7 +104,7 @@ impl AgentConfiguration {
             configuration_views_by_provider: HashMap::default(),
             context_server_store,
             expanded_context_server_tools: HashMap::default(),
-            expanded_provider_configurations: HashMap::default(),
+            expanded_provider_configurations,
             tools,
             _registry_subscription: registry_subscription,
             scroll_handle,

crates/language_models/src/provider/cloud.rs 🔗

@@ -394,7 +394,8 @@ impl LanguageModelProvider for CloudLanguageModelProvider {
     }
 
     fn is_authenticated(&self, cx: &App) -> bool {
-        !self.state.read(cx).is_signed_out()
+        let state = self.state.read(cx);
+        !state.is_signed_out() && state.has_accepted_terms_of_service(cx)
     }
 
     fn authenticate(&self, _cx: &mut App) -> Task<Result<(), AuthenticateError>> {