Fix offline workspace deserialization with assistant2 (#21159)

Piotr Osiewicz created

Closes #21156 
/cc @maxdeviant 

Release Notes:

- N/A

Change summary

crates/zed/src/zed.rs | 53 ++++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 26 deletions(-)

Detailed changes

crates/zed/src/zed.rs 🔗

@@ -241,25 +241,6 @@ pub fn initialize_workspace(
 
         let prompt_builder = prompt_builder.clone();
         cx.spawn(|workspace_handle, mut cx| async move {
-            let is_assistant2_enabled = if cfg!(test) {
-                false
-            } else {
-                let is_assistant2_feature_flag_enabled = assistant2_feature_flag.await;
-                release_channel == ReleaseChannel::Dev && is_assistant2_feature_flag_enabled
-            };
-
-            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))
-            } else {
-                let assistant_panel =
-                    assistant::AssistantPanel::load(workspace_handle.clone(), prompt_builder, cx.clone()).await?;
-
-                (Some(assistant_panel), None)
-            };
-
             let project_panel = ProjectPanel::load(workspace_handle.clone(), cx.clone());
             let outline_panel = OutlinePanel::load(workspace_handle.clone(), cx.clone());
             let terminal_panel = TerminalPanel::load(workspace_handle.clone(), cx.clone());
@@ -288,6 +269,33 @@ pub fn initialize_workspace(
                 notification_panel,
             )?;
 
+            workspace_handle.update(&mut cx, |workspace, cx| {
+                workspace.add_panel(project_panel, cx);
+                workspace.add_panel(outline_panel, cx);
+                workspace.add_panel(terminal_panel, cx);
+                workspace.add_panel(channels_panel, cx);
+                workspace.add_panel(chat_panel, cx);
+                workspace.add_panel(notification_panel, cx);
+            })?;
+            let is_assistant2_enabled =
+                if cfg!(test) || release_channel != ReleaseChannel::Dev {
+                    false
+                } 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))
+            } else {
+                let assistant_panel =
+                    assistant::AssistantPanel::load(workspace_handle.clone(), prompt_builder, cx.clone()).await?;
+
+                (Some(assistant_panel), None)
+            };
             workspace_handle.update(&mut cx, |workspace, cx| {
                 if let Some(assistant_panel) = assistant_panel {
                     workspace.add_panel(assistant_panel, cx);
@@ -296,13 +304,6 @@ pub fn initialize_workspace(
                 if let Some(assistant2_panel) = assistant2_panel {
                     workspace.add_panel(assistant2_panel, cx);
                 }
-
-                workspace.add_panel(project_panel, cx);
-                workspace.add_panel(outline_panel, cx);
-                workspace.add_panel(terminal_panel, cx);
-                workspace.add_panel(channels_panel, cx);
-                workspace.add_panel(chat_panel, cx);
-                workspace.add_panel(notification_panel, cx);
             })
         })
         .detach();