From af5e26175a4cdc433a6a65cb6e3bed1c2e412ccf Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Mon, 2 Mar 2026 16:17:05 +0100 Subject: [PATCH] agent: Add subagent info to telemetry events (#50492) - **Add parent_session_id to agent thread feedback submission** - **Add more parent session ids to events** Release Notes: - N/A --------- Co-authored-by: Bennet Bo Fenner --- crates/acp_thread/src/acp_thread.rs | 2 ++ crates/agent/src/thread.rs | 4 ++++ crates/agent_ui/src/connection_view/thread_view.rs | 11 +++++++++++ crates/cloud_api_types/src/cloud_api_types.rs | 1 + 4 files changed, 18 insertions(+) diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index 46797130c0cebb605c6820f4d04fd2e989977617..e6da8f3f901b41c0a59d73920c3036fc72d1b906 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -1600,6 +1600,7 @@ impl AcpThread { let agent_telemetry_id = self.connection().telemetry_id(); let session = self.session_id(); + let parent_session_id = self.parent_session_id(); if let ToolCallStatus::Completed | ToolCallStatus::Failed = status { let status = if matches!(status, ToolCallStatus::Completed) { "completed" @@ -1610,6 +1611,7 @@ impl AcpThread { "Agent Tool Call Completed", agent_telemetry_id, session, + parent_session_id, status ); } diff --git a/crates/agent/src/thread.rs b/crates/agent/src/thread.rs index 64ab5795e7dadcb86f4df45e08157c851d4c7c25..0825910e78af2950b895c17699c8cd623b359727 100644 --- a/crates/agent/src/thread.rs +++ b/crates/agent/src/thread.rs @@ -1739,6 +1739,9 @@ impl Thread { telemetry::event!( "Agent Thread Completion", thread_id = this.read_with(cx, |this, _| this.id.to_string())?, + parent_thread_id = this.read_with(cx, |this, _| this + .parent_thread_id() + .map(|id| id.to_string()))?, prompt_id = this.read_with(cx, |this, _| this.prompt_id.to_string())?, model = model.telemetry_id(), model_provider = model.provider_id().to_string(), @@ -1997,6 +2000,7 @@ impl Thread { telemetry::event!( "Agent Thread Completion Usage Updated", thread_id = self.id.to_string(), + parent_thread_id = self.parent_thread_id().map(|id| id.to_string()), prompt_id = self.prompt_id.to_string(), model = self.model.as_ref().map(|m| m.telemetry_id()), model_provider = self.model.as_ref().map(|m| m.provider_id().to_string()), diff --git a/crates/agent_ui/src/connection_view/thread_view.rs b/crates/agent_ui/src/connection_view/thread_view.rs index f9d5311983c5f1a0b53504fc88b97ef8f2e953c4..cd8becbded396afa5c8eb4a9136db18f63e4a535 100644 --- a/crates/agent_ui/src/connection_view/thread_view.rs +++ b/crates/agent_ui/src/connection_view/thread_view.rs @@ -45,6 +45,7 @@ impl ThreadFeedbackState { } } let session_id = thread.read(cx).session_id().clone(); + let parent_session_id = thread.read(cx).parent_session_id().cloned(); let agent_telemetry_id = thread.read(cx).connection().telemetry_id(); let task = telemetry.thread_data(&session_id, cx); let rating = match feedback { @@ -60,6 +61,7 @@ impl ThreadFeedbackState { organization_id: organization.map(|organization| organization.id.clone()), agent: agent_telemetry_id.to_string(), session_id: session_id.to_string(), + parent_session_id: parent_session_id.map(|id| id.to_string()), rating: rating.to_string(), thread, }) @@ -804,6 +806,7 @@ impl ThreadView { cx: &mut Context, ) { let session_id = self.thread.read(cx).session_id().clone(); + let parent_session_id = self.thread.read(cx).parent_session_id().cloned(); let agent_telemetry_id = self.thread.read(cx).connection().telemetry_id(); let thread = self.thread.downgrade(); @@ -858,6 +861,7 @@ impl ThreadView { "Agent Message Sent", agent = agent_telemetry_id, session = session_id, + parent_session_id = parent_session_id.as_ref().map(|id| id.to_string()), model = model_id, mode = mode_id ); @@ -877,6 +881,7 @@ impl ThreadView { "Agent Turn Completed", agent = agent_telemetry_id, session = session_id, + parent_session_id = parent_session_id.as_ref().map(|id| id.to_string()), model = model_id, mode = mode_id, status, @@ -985,11 +990,17 @@ impl ThreadView { let agent_telemetry_id = self.thread.read(cx).connection().telemetry_id(); let session_id = self.thread.read(cx).session_id().clone(); + let parent_session_id = self + .thread + .read(cx) + .parent_session_id() + .map(|id| id.to_string()); telemetry::event!( "Agent Panel Error Shown", agent = agent_telemetry_id, session_id = session_id, + parent_session_id = parent_session_id, kind = error_kind, acp_error_code = acp_error_code, message = message, diff --git a/crates/cloud_api_types/src/cloud_api_types.rs b/crates/cloud_api_types/src/cloud_api_types.rs index 5f86dce21eea6f76a426fa1bca735be87a513ee2..2d457fc6630d5b32f049e67a6a460047e925973a 100644 --- a/crates/cloud_api_types/src/cloud_api_types.rs +++ b/crates/cloud_api_types/src/cloud_api_types.rs @@ -62,6 +62,7 @@ pub struct SubmitAgentThreadFeedbackBody { pub organization_id: Option, pub agent: String, pub session_id: String, + pub parent_session_id: Option, pub rating: String, pub thread: serde_json::Value, }