diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index 085e0d893d95fb441e919d4fb1f3683901c3c422..fe10a8a2373abcd05c650f0dc8d5378e68d1c50d 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -2256,6 +2256,16 @@ impl AgentPanel { } }; self.start_thread_in = new_target; + let target = match &self.start_thread_in { + StartThreadIn::LocalProject => "current_worktree", + StartThreadIn::NewWorktree { .. } => "new_worktree", + StartThreadIn::LinkedWorktree { .. } => "linked_worktree", + }; + telemetry::event!( + "Start Thread In Changed", + target = target, + side = agent_panel_side_str(cx) + ); if let Some(thread) = self.active_thread_view(cx) { thread.update(cx, |thread, cx| thread.focus_handle(cx).focus(window, cx)); } @@ -3334,6 +3344,13 @@ fn agent_panel_dock_position(cx: &App) -> DockPosition { AgentSettings::get_global(cx).dock.into() } +fn agent_panel_side_str(cx: &App) -> &'static str { + match agent_panel_dock_position(cx) { + DockPosition::Left => "left", + DockPosition::Right | DockPosition::Bottom => "right", + } +} + fn thread_location_str(cx: &App) -> &'static str { use settings::{NewThreadLocation, Settings}; match AgentSettings::get_global(cx).new_thread_location { diff --git a/crates/agent_ui/src/conversation_view.rs b/crates/agent_ui/src/conversation_view.rs index 8d3d325f402e8568b31fd4cb4e3774be863643d1..bdd999746c5c752fedc484adb0b46a3fa68ae07f 100644 --- a/crates/agent_ui/src/conversation_view.rs +++ b/crates/agent_ui/src/conversation_view.rs @@ -669,6 +669,10 @@ impl ConversationView { let connect_result = connection_entry.read(cx).wait_for_connection(); let load_session_id = resume_session_id.clone(); + let side = match AgentSettings::get_global(cx).dock { + settings::DockPosition::Left => "left", + settings::DockPosition::Right | settings::DockPosition::Bottom => "right", + }; let load_task = cx.spawn_in(window, async move |this, cx| { let (connection, history) = match connect_result.await { Ok(AgentConnectedState { @@ -685,7 +689,11 @@ impl ConversationView { } }; - telemetry::event!("Agent Thread Started", agent = connection.telemetry_id()); + telemetry::event!( + "Agent Thread Started", + agent = connection.telemetry_id(), + side = side + ); let mut resumed_without_history = false; let result = if let Some(session_id) = load_session_id.clone() { diff --git a/crates/agent_ui/src/conversation_view/thread_view.rs b/crates/agent_ui/src/conversation_view/thread_view.rs index ae9bf17c76bde99cdacea9d5bb205074a1a4ee39..22b1a6dab0cac92cbd0c79db5fcb0c5bd56a336b 100644 --- a/crates/agent_ui/src/conversation_view/thread_view.rs +++ b/crates/agent_ui/src/conversation_view/thread_view.rs @@ -13,7 +13,7 @@ use crate::message_editor::SharedSessionCapabilities; use gpui::{Corner, List}; use heapless::Vec as ArrayVec; use language_model::{LanguageModelEffortLevel, Speed}; -use settings::update_settings_file; +use settings::{DockPosition, update_settings_file}; use ui::{ButtonLike, SpinnerLabel, SpinnerVariant, SplitButton, SplitButtonStyle, Tab}; use workspace::SERIALIZATION_THROTTLE_TIME; @@ -1066,6 +1066,10 @@ impl ThreadView { }) .detach(); + let side = match AgentSettings::get_global(cx).dock { + DockPosition::Left => "left", + DockPosition::Right | DockPosition::Bottom => "right", + }; let task = cx.spawn_in(window, async move |this, cx| { let Some((contents, tracked_buffers)) = contents_task.await? else { return Ok(()); @@ -1134,7 +1138,8 @@ impl ThreadView { session = session_id, parent_session_id = parent_session_id.as_ref().map(|id| id.to_string()), model = model_id, - mode = mode_id + mode = mode_id, + side = side ); thread.send(contents, cx) @@ -1163,6 +1168,7 @@ impl ThreadView { mode = mode_id, status, turn_time_ms, + side = side ); res.map(|_| ()) }); diff --git a/crates/agent_ui/src/threads_archive_view.rs b/crates/agent_ui/src/threads_archive_view.rs index 7cb8410e5017438b0e8adde673887c13397d9abf..e0a427f152912779b39ace42b8d04106a965a7fc 100644 --- a/crates/agent_ui/src/threads_archive_view.rs +++ b/crates/agent_ui/src/threads_archive_view.rs @@ -557,6 +557,11 @@ impl ThreadsArchiveView { .on_click({ let thread = thread.clone(); cx.listener(move |this, _, window, cx| { + let side = match AgentSettings::get_global(cx).sidebar_side() { + settings::SidebarSide::Left => "left", + settings::SidebarSide::Right => "right", + }; + telemetry::event!("Archived Thread Opened", side = side); this.unarchive_thread(thread.clone(), window, cx); }) }) diff --git a/crates/sidebar/src/sidebar.rs b/crates/sidebar/src/sidebar.rs index 32f084a80f329fa01bd79620b26a8a0fca7c8fa6..a658d4dd59c0b2e54c629664c1ae09ab711d3dbd 100644 --- a/crates/sidebar/src/sidebar.rs +++ b/crates/sidebar/src/sidebar.rs @@ -3841,7 +3841,14 @@ impl Sidebar { fn toggle_archive(&mut self, _: &ToggleArchive, window: &mut Window, cx: &mut Context) { match &self.view { - SidebarView::ThreadList => self.show_archive(window, cx), + SidebarView::ThreadList => { + let side = match AgentSettings::get_global(cx).sidebar_side() { + SidebarSide::Left => "left", + SidebarSide::Right => "right", + }; + telemetry::event!("Sidebar Archive Viewed", side = side); + self.show_archive(window, cx); + } SidebarView::Archive(_) => self.show_thread_list(window, cx), } } diff --git a/crates/workspace/src/multi_workspace.rs b/crates/workspace/src/multi_workspace.rs index 5f1f47a4042bae4d8fbd72f04934777bee9c509c..12063d701ac429a31891a82d86044e8531423f66 100644 --- a/crates/workspace/src/multi_workspace.rs +++ b/crates/workspace/src/multi_workspace.rs @@ -80,6 +80,11 @@ pub fn sidebar_side_context_menu( IconPosition::Start, None, move |_window, cx| { + let side = match position { + SidebarDockPosition::Left => "left", + SidebarDockPosition::Right => "right", + }; + telemetry::event!("Sidebar Side Changed", side = side); settings::update_settings_file(fs.clone(), cx, move |settings, _cx| { settings .agent