Delete /workflow (#19900)

Richard Feldman , Nathan Sobo , and Danilo Leal created

This a separate PR from https://github.com/zed-industries/zed/pull/19705
so we can revert it more easily if we want it back later.

Release Notes:

- Added "Suggest Edit" button to the assistant panel if
`"enable_experimental_live_diffs": true` is set in the `"assistant"`
section of `settings.json`. This button takes the place of the previous
`/workflow` command, but it is experimental and may change!

---------

Co-authored-by: Nathan Sobo <nathan@zed.dev>
Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>

Change summary

crates/assistant/src/assistant.rs                      | 18 --
crates/assistant/src/slash_command.rs                  |  1 
crates/assistant/src/slash_command/workflow_command.rs | 82 ------------
3 files changed, 101 deletions(-)

Detailed changes

crates/assistant/src/assistant.rs 🔗

@@ -41,12 +41,10 @@ use prompts::PromptLoadingParams;
 use semantic_index::{CloudEmbeddingProvider, SemanticDb};
 use serde::{Deserialize, Serialize};
 use settings::{update_settings_file, Settings, SettingsStore};
-use slash_command::workflow_command::WorkflowSlashCommand;
 use slash_command::{
     auto_command, cargo_workspace_command, context_server_command, default_command, delta_command,
     diagnostics_command, docs_command, fetch_command, file_command, now_command, project_command,
     prompt_command, search_command, symbols_command, tab_command, terminal_command,
-    workflow_command,
 };
 use std::path::PathBuf;
 use std::sync::Arc;
@@ -445,22 +443,6 @@ fn register_slash_commands(prompt_builder: Option<Arc<PromptBuilder>>, cx: &mut
     slash_command_registry.register_command(fetch_command::FetchSlashCommand, false);
 
     if let Some(prompt_builder) = prompt_builder {
-        cx.observe_global::<SettingsStore>({
-            let slash_command_registry = slash_command_registry.clone();
-            let prompt_builder = prompt_builder.clone();
-            move |cx| {
-                if AssistantSettings::get_global(cx).are_live_diffs_enabled(cx) {
-                    slash_command_registry.register_command(
-                        workflow_command::WorkflowSlashCommand::new(prompt_builder.clone()),
-                        true,
-                    );
-                } else {
-                    slash_command_registry.unregister_command_by_name(WorkflowSlashCommand::NAME);
-                }
-            }
-        })
-        .detach();
-
         cx.observe_flag::<project_command::ProjectSlashCommandFeatureFlag, _>({
             let slash_command_registry = slash_command_registry.clone();
             move |is_enabled, _cx| {

crates/assistant/src/slash_command.rs 🔗

@@ -34,7 +34,6 @@ pub mod search_command;
 pub mod symbols_command;
 pub mod tab_command;
 pub mod terminal_command;
-pub mod workflow_command;
 
 pub(crate) struct SlashCommandCompletionProvider {
     cancel_flag: Mutex<Arc<AtomicBool>>,

crates/assistant/src/slash_command/workflow_command.rs 🔗

@@ -1,82 +0,0 @@
-use std::sync::atomic::AtomicBool;
-use std::sync::Arc;
-
-use anyhow::Result;
-use assistant_slash_command::{
-    ArgumentCompletion, SlashCommand, SlashCommandOutput, SlashCommandOutputSection,
-    SlashCommandResult,
-};
-use gpui::{Task, WeakView};
-use language::{BufferSnapshot, LspAdapterDelegate};
-use ui::prelude::*;
-use workspace::Workspace;
-
-use crate::prompts::PromptBuilder;
-
-pub(crate) struct WorkflowSlashCommand {
-    prompt_builder: Arc<PromptBuilder>,
-}
-
-impl WorkflowSlashCommand {
-    pub const NAME: &'static str = "workflow";
-
-    pub fn new(prompt_builder: Arc<PromptBuilder>) -> Self {
-        Self { prompt_builder }
-    }
-}
-
-impl SlashCommand for WorkflowSlashCommand {
-    fn name(&self) -> String {
-        Self::NAME.into()
-    }
-
-    fn description(&self) -> String {
-        "Insert prompt to opt into the edit workflow".into()
-    }
-
-    fn menu_text(&self) -> String {
-        self.description()
-    }
-
-    fn requires_argument(&self) -> bool {
-        false
-    }
-
-    fn complete_argument(
-        self: Arc<Self>,
-        _arguments: &[String],
-        _cancel: Arc<AtomicBool>,
-        _workspace: Option<WeakView<Workspace>>,
-        _cx: &mut WindowContext,
-    ) -> Task<Result<Vec<ArgumentCompletion>>> {
-        Task::ready(Ok(Vec::new()))
-    }
-
-    fn run(
-        self: Arc<Self>,
-        _arguments: &[String],
-        _context_slash_command_output_sections: &[SlashCommandOutputSection<language::Anchor>],
-        _context_buffer: BufferSnapshot,
-        _workspace: WeakView<Workspace>,
-        _delegate: Option<Arc<dyn LspAdapterDelegate>>,
-        cx: &mut WindowContext,
-    ) -> Task<SlashCommandResult> {
-        let prompt_builder = self.prompt_builder.clone();
-        cx.spawn(|_cx| async move {
-            let text = prompt_builder.generate_workflow_prompt()?;
-            let range = 0..text.len();
-
-            Ok(SlashCommandOutput {
-                text,
-                sections: vec![SlashCommandOutputSection {
-                    range,
-                    icon: IconName::Route,
-                    label: "Workflow".into(),
-                    metadata: None,
-                }],
-                run_commands_in_text: false,
-            }
-            .to_event_stream())
-        })
-    }
-}