From 77bb8ac03dedda1f6d52f855dfcbdf92c7c953d4 Mon Sep 17 00:00:00 2001 From: Stephen Belanger Date: Wed, 23 Sep 2026 15:12:22 -0400 Subject: [PATCH 1/2] refactor: use narrowed trace host selection --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/trace_host.rs | 36 ++++++++++++++---------------------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e62b1081..96e7e965 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -606,7 +606,7 @@ dependencies = [ [[package]] name = "bt-daemon" version = "0.1.0" -source = "git+https://github.com/braintrustdata/braintrust-coding-agent-plugins?rev=df9380fd00ab10bd1609c6c22baca5a442122893#df9380fd00ab10bd1609c6c22baca5a442122893" +source = "git+https://github.com/braintrustdata/braintrust-coding-agent-plugins?rev=fa6aa30966bd930b3b737ee59b805b7bb4d33983#fa6aa30966bd930b3b737ee59b805b7bb4d33983" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 2ccf2d6d..96e3cb22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ actix-web = "4.11.0" anyhow = "1.0.89" backoff = { version = "0.4.0", features = ["tokio"] } braintrust-sdk-rust = { git = "https://github.com/braintrustdata/braintrust-sdk-rust", rev = "019e428ab80d0da4c00dab383d4b0d1fdf4486fd" } -bt-daemon = { git = "https://github.com/braintrustdata/braintrust-coding-agent-plugins", rev = "df9380fd00ab10bd1609c6c22baca5a442122893" } +bt-daemon = { git = "https://github.com/braintrustdata/braintrust-coding-agent-plugins", rev = "fa6aa30966bd930b3b737ee59b805b7bb4d33983" } async-trait = "0.1" clap = { version = "4.5.20", features = ["derive", "env"] } crossterm = "0.28.1" diff --git a/src/trace_host.rs b/src/trace_host.rs index aad8bd9e..dc0c4cbe 100644 --- a/src/trace_host.rs +++ b/src/trace_host.rs @@ -8,12 +8,10 @@ use std::ffi::OsString; use std::sync::Arc; use async_trait::async_trait; -use bt_daemon::wire::{ - AuthSelection, AuthSource, BackendAuth, FlushMode, SessionRoute, TraceDestination, -}; +use bt_daemon::wire::{AuthSelection, AuthSource, BackendAuth}; use bt_daemon::{ - AuthDiagnostic, AuthLease, AuthResolveReason, OutputFormat, RouteRequirements, RunHookCommand, - TraceHostContext, TraceHostServices, + AuthDiagnostic, AuthLease, AuthResolveReason, HostRouteSelection, OutputFormat, + RouteRequirements, RunHookCommand, TraceHostContext, TraceHostServices, }; use braintrust_sdk_rust::DEFAULT_APP_URL; @@ -68,7 +66,7 @@ fn has_usable_api_key(base: &BaseArgs) -> bool { .is_some_and(|key| !key.trim().is_empty()) } -fn session_route(base: &BaseArgs) -> SessionRoute { +fn route_selection(base: &BaseArgs) -> HostRouteSelection { let source = if base.profile.is_some() { AuthSource::SavedProfile } else if matches!(base.api_key_source, Some(ArgValueSource::EnvVariable)) @@ -78,24 +76,14 @@ fn session_route(base: &BaseArgs) -> SessionRoute { } else { AuthSource::Auto }; - SessionRoute { + HostRouteSelection { auth: AuthSelection { source, profile_id: None, profile: base.profile.clone(), org_name: base.org_name.clone(), }, - destination: base - .project - .clone() - .map(|project_name| TraceDestination::ProjectLogs { - project_id: None, - project_name: Some(project_name), - }), - flush_mode: FlushMode::FireAndForget, - additional_metadata: None, - tags: Vec::new(), - ..SessionRoute::default() + project_name: base.project.clone(), } } @@ -321,7 +309,10 @@ async fn resolve_trace_project(mut base: BaseArgs) -> anyhow::Result { #[async_trait] impl TraceHostServices for BtTraceHost { - async fn resolve_route(&self, requirements: RouteRequirements) -> anyhow::Result { + async fn resolve_route( + &self, + requirements: RouteRequirements, + ) -> anyhow::Result { // Commands that run inside an agent's turn (hooks) leave this false so // no missing profile or org can block the turn on a prompt. bt gates // every prompt on this global, including the ones `resolve_auth` @@ -347,7 +338,7 @@ impl TraceHostServices for BtTraceHost { if requirements.interactive_auth { base = resolve_trace_org(base).await?; } - Ok(session_route(&base)) + Ok(route_selection(&base)) } async fn resolve_auth( @@ -786,13 +777,14 @@ mod tests { api_key_source: Some(ArgValueSource::EnvVariable), ..LoginBaseArgs::default() }, + project: Some("test-project".into()), ..BaseArgs::default() }; assert!(!has_usable_api_key(&base)); - let route = session_route(&base); + let route = route_selection(&base); assert_eq!(route.auth.source, AuthSource::Auto); - assert!(route.tags.is_empty()); + assert_eq!(route.project_name.as_deref(), Some("test-project")); } #[tokio::test] From 00a6c95944fe73a78d9baa21f43648707993e22a Mon Sep 17 00:00:00 2001 From: Stephen Belanger Date: Wed, 23 Sep 2026 15:22:53 -0400 Subject: [PATCH 2/2] refactor: retain session route helper name --- src/trace_host.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/trace_host.rs b/src/trace_host.rs index dc0c4cbe..90e838d3 100644 --- a/src/trace_host.rs +++ b/src/trace_host.rs @@ -66,7 +66,7 @@ fn has_usable_api_key(base: &BaseArgs) -> bool { .is_some_and(|key| !key.trim().is_empty()) } -fn route_selection(base: &BaseArgs) -> HostRouteSelection { +fn session_route(base: &BaseArgs) -> HostRouteSelection { let source = if base.profile.is_some() { AuthSource::SavedProfile } else if matches!(base.api_key_source, Some(ArgValueSource::EnvVariable)) @@ -338,7 +338,7 @@ impl TraceHostServices for BtTraceHost { if requirements.interactive_auth { base = resolve_trace_org(base).await?; } - Ok(route_selection(&base)) + Ok(session_route(&base)) } async fn resolve_auth( @@ -782,7 +782,7 @@ mod tests { }; assert!(!has_usable_api_key(&base)); - let route = route_selection(&base); + let route = session_route(&base); assert_eq!(route.auth.source, AuthSource::Auto); assert_eq!(route.project_name.as_deref(), Some("test-project")); }