Add setting for enabling/disabling feedback (#30448)

Tristan Hume created

This is useful for enterprises, especially in combination with #30444,
to ensure code never gets sent to Zed.

Release Notes:

- N/A

Change summary

assets/settings/default.json                        |  2 ++
crates/agent/src/active_thread.rs                   |  6 +++++-
crates/assistant_settings/src/assistant_settings.rs | 10 ++++++++++
3 files changed, 17 insertions(+), 1 deletion(-)

Detailed changes

assets/settings/default.json 🔗

@@ -756,6 +756,8 @@
     "stream_edits": false,
     // When enabled, agent edits will be displayed in single-file editors for review
     "single_file_review": true,
+    // When enabled, show voting thumbs for feedback on agent edits.
+    "enable_feedback": true,
     "default_profile": "write",
     "profiles": {
       "write": {

crates/agent/src/active_thread.rs 🔗

@@ -1850,7 +1850,8 @@ impl ActiveThread {
                         .child(open_as_markdown),
                 )
                 .into_any_element(),
-            None => feedback_container
+            None if AssistantSettings::get_global(cx).enable_feedback =>
+                feedback_container
                 .child(
                     div().visible_on_hover("feedback_container").child(
                         Label::new(
@@ -1893,6 +1894,9 @@ impl ActiveThread {
                         .child(open_as_markdown),
                 )
                 .into_any_element(),
+            None => feedback_container
+                .child(h_flex().child(open_as_markdown))
+                .into_any_element(),
         };
 
         let message_is_empty = message.should_display_content();

crates/assistant_settings/src/assistant_settings.rs 🔗

@@ -94,6 +94,7 @@ pub struct AssistantSettings {
     pub single_file_review: bool,
     pub model_parameters: Vec<LanguageModelParameters>,
     pub preferred_completion_mode: CompletionMode,
+    pub enable_feedback: bool,
 }
 
 impl AssistantSettings {
@@ -261,6 +262,7 @@ impl AssistantSettingsContent {
                     single_file_review: None,
                     model_parameters: Vec::new(),
                     preferred_completion_mode: None,
+                    enable_feedback: None,
                 },
                 VersionedAssistantSettingsContent::V2(ref settings) => settings.clone(),
             },
@@ -291,6 +293,7 @@ impl AssistantSettingsContent {
                 single_file_review: None,
                 model_parameters: Vec::new(),
                 preferred_completion_mode: None,
+                enable_feedback: None,
             },
             None => AssistantSettingsContentV2::default(),
         }
@@ -573,6 +576,7 @@ impl Default for VersionedAssistantSettingsContent {
             single_file_review: None,
             model_parameters: Vec::new(),
             preferred_completion_mode: None,
+            enable_feedback: None,
         })
     }
 }
@@ -647,6 +651,10 @@ pub struct AssistantSettingsContentV2 {
     ///
     /// Default: normal
     preferred_completion_mode: Option<CompletionMode>,
+    /// Whether to show thumb buttons for feedback in the agent panel.
+    ///
+    /// Default: true
+    enable_feedback: Option<bool>,
 }
 
 #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
@@ -853,6 +861,7 @@ impl Settings for AssistantSettings {
                 &mut settings.preferred_completion_mode,
                 value.preferred_completion_mode,
             );
+            merge(&mut settings.enable_feedback, value.enable_feedback);
 
             settings
                 .model_parameters
@@ -989,6 +998,7 @@ mod tests {
                                 notify_when_agent_waiting: None,
                                 stream_edits: None,
                                 single_file_review: None,
+                                enable_feedback: None,
                                 model_parameters: Vec::new(),
                                 preferred_completion_mode: None,
                             },