Allow the use of both Assistants when in the assistant2 feature flag (#22150)

This PR makes it so both Assistant panels are visible when in the
`assistant2` feature flag.

This way folks can continue using Assistant1 if Assistant2 isn't meeting
their needs.

Right now they are shown as two different panels shown in the status bar
(although using the same icon), but this is just a temporary state until
we can surface the Assistant1 functionality in Assistant2 somehow.

Note that the inline assist will always use the Assistant2 panel.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-12-17 14:23:57 -05:00 committed by GitHub
parent c86cf2c3e1
commit 1c4868979d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 30 deletions

View file

@ -15,7 +15,6 @@ mod thread_history;
mod thread_store;
mod ui;
use std::any::TypeId;
use std::sync::Arc;
use client::Client;
@ -79,10 +78,6 @@ pub fn init(fs: Arc<dyn Fs>, client: Arc<Client>, stdout_is_a_pty: bool, cx: &mu
}
fn feature_gate_assistant2_actions(cx: &mut AppContext) {
const ASSISTANT1_NAMESPACE: &str = "assistant";
let inline_assist_actions = [TypeId::of::<zed_actions::InlineAssist>()];
CommandPaletteFilter::update_global(cx, |filter, _cx| {
filter.hide_namespace(NAMESPACE);
});
@ -91,17 +86,10 @@ fn feature_gate_assistant2_actions(cx: &mut AppContext) {
if is_enabled {
CommandPaletteFilter::update_global(cx, |filter, _cx| {
filter.show_namespace(NAMESPACE);
filter.hide_namespace(ASSISTANT1_NAMESPACE);
// We're hiding all of the `assistant: ` actions, but we want to
// keep the inline assist action around so we can use the same
// one in Assistant2.
filter.show_action_types(inline_assist_actions.iter());
});
} else {
CommandPaletteFilter::update_global(cx, |filter, _cx| {
filter.hide_namespace(NAMESPACE);
filter.show_namespace(ASSISTANT1_NAMESPACE);
});
}
})

View file

@ -240,7 +240,6 @@ pub fn initialize_workspace(
let git_ui_feature_flag = cx.wait_for_flag::<feature_flags::GitUiFeatureFlag>();
let prompt_builder = prompt_builder.clone();
let is_staff = cx.is_staff();
cx.spawn(|workspace_handle, mut cx| async move {
let project_panel = ProjectPanel::load(workspace_handle.clone(), cx.clone());
@ -254,6 +253,8 @@ pub fn initialize_workspace(
workspace_handle.clone(),
cx.clone(),
);
let assistant_panel =
assistant::AssistantPanel::load(workspace_handle.clone(), prompt_builder, cx.clone());
let (
project_panel,
@ -262,6 +263,7 @@ pub fn initialize_workspace(
channels_panel,
chat_panel,
notification_panel,
assistant_panel,
) = futures::try_join!(
project_panel,
outline_panel,
@ -269,6 +271,7 @@ pub fn initialize_workspace(
channels_panel,
chat_panel,
notification_panel,
assistant_panel,
)?;
workspace_handle.update(&mut cx, |workspace, cx| {
@ -278,15 +281,15 @@ pub fn initialize_workspace(
workspace.add_panel(channels_panel, cx);
workspace.add_panel(chat_panel, cx);
workspace.add_panel(notification_panel, cx);
workspace.add_panel(assistant_panel, cx);
})?;
let git_ui_enabled = git_ui_feature_flag.await || is_staff;
let git_ui_enabled = git_ui_feature_flag.await;
let git_panel = if git_ui_enabled {
Some(git_ui::git_panel::GitPanel::load(workspace_handle.clone(), cx.clone()).await?)
} else {
None
};
workspace_handle.update(&mut cx, |workspace, cx| {
if let Some(git_panel) = git_panel {
workspace.add_panel(git_panel, cx);
@ -299,27 +302,20 @@ pub fn initialize_workspace(
} else {
assistant2_feature_flag.await
};
let (assistant_panel, assistant2_panel) = if is_assistant2_enabled {
let assistant2_panel =
assistant2::AssistantPanel::load(workspace_handle.clone(), cx.clone()).await?;
(None, Some(assistant2_panel))
let assistant2_panel = if is_assistant2_enabled {
Some(assistant2::AssistantPanel::load(workspace_handle.clone(), cx.clone()).await?)
} else {
let assistant_panel =
assistant::AssistantPanel::load(workspace_handle.clone(), prompt_builder, cx.clone()).await?;
(Some(assistant_panel), None)
None
};
workspace_handle.update(&mut cx, |workspace, cx| {
if let Some(assistant_panel) = assistant_panel {
workspace.add_panel(assistant_panel, cx);
workspace.register_action(assistant::AssistantPanel::inline_assist);
}
if let Some(assistant2_panel) = assistant2_panel {
workspace.add_panel(assistant2_panel, cx);
}
if is_assistant2_enabled {
workspace.register_action(assistant2::InlineAssistant::inline_assist);
} else {
workspace.register_action(assistant::AssistantPanel::inline_assist);
}
})
})