diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index efa20747e3..8852b25834 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -308,12 +308,6 @@ impl TurnContext { .map(PathBuf::from) .map_or_else(|| self.cwd.clone(), |p| self.cwd.join(p)) } - - pub fn end_session_span(&self) { - if let Some(span) = self.session_span.lock().unwrap().take() { - drop(span); - } - } } /// Configure the model session. diff --git a/codex-rs/core/src/telemetry_init.rs b/codex-rs/core/src/telemetry_init.rs index 280a5875c8..8729524901 100644 --- a/codex-rs/core/src/telemetry_init.rs +++ b/codex-rs/core/src/telemetry_init.rs @@ -53,3 +53,12 @@ pub fn build_otel_layer_from_config( codex_home: Some(config.codex_home.clone()), }) } + +/// Filter predicate for exporting only Codex-owned spans via OTEL. +/// +/// Keeps spans that either: +/// - use our naming convention (names starting with "codex.") +/// - originate from our crates (targets starting with "codex_") +pub fn codex_export_filter(meta: &tracing::Metadata<'_>) -> bool { + meta.name().starts_with("codex.") || meta.target().starts_with("codex_") +} diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index d4097d735c..df556d3360 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -175,7 +175,9 @@ pub async fn run_main(cli: Cli, codex_linux_sandbox_exe: Option) -> any env!("CARGO_PKG_VERSION"), ); let _telemetry_guard = if let Some((guard, tracer)) = telemetry { - let otel_layer = tracing_opentelemetry::OpenTelemetryLayer::new(tracer); + let otel_layer = tracing_opentelemetry::OpenTelemetryLayer::new(tracer).with_filter( + tracing_subscriber::filter::filter_fn(codex_core::telemetry_init::codex_export_filter), + ); // Build env_filter separately and attach via with_filter. let env_filter = EnvFilter::try_from_default_env() .or_else(|_| EnvFilter::try_new(default_level)) diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index 024d2e1a17..f4201ea789 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -259,7 +259,19 @@ pub async fn run_main( .map_err(|e| std::io::Error::other(format!("OSS setup failed: {e}")))?; } - let _ = tracing_subscriber::registry().with(file_layer).try_init(); + let _telemetry_guard = if let Some((guard, tracer)) = telemetry { + let otel_layer = tracing_opentelemetry::OpenTelemetryLayer::new(tracer).with_filter( + tracing_subscriber::filter::filter_fn(codex_core::telemetry_init::codex_export_filter), + ); + let _ = tracing_subscriber::registry() + .with(file_layer) + .with(otel_layer) + .try_init(); + Some(guard) + } else { + let _ = tracing_subscriber::registry().with(file_layer).try_init(); + None + }; run_ratatui_app( cli,