From bde22f97e1cba9056ef4643f70e8aa0c8ea10ae9 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Tue, 23 Jun 2026 18:26:36 -0700 Subject: [PATCH] feat(tools): binding.invoke tracing for tool-call visibility Add debug/warn/info tracing to resolve_toolkit_command (the binding.invoke resolution + policy gate) so a host-tool call is observable end-to-end: resolving, unknown-callback, blocked-by-policy, and resolved (with timeout_ms). Emitted on the secure_exec_sidecar::tools target; surfaces once the consuming sidecar enables RUST_LOG/EnvFilter (see the agent-os configurable-logging PR). Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/sidecar/src/tools.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/sidecar/src/tools.rs b/crates/sidecar/src/tools.rs index 22b97911..a28e5924 100644 --- a/crates/sidecar/src/tools.rs +++ b/crates/sidecar/src/tools.rs @@ -232,12 +232,14 @@ fn resolve_toolkit_command( ))); }; let callback_key = format!("{toolkit_name}:{tool_name}"); + tracing::debug!(callback_key = %callback_key, "binding.invoke: resolving tool callback"); let Some(tool) = vm .toolkits .get(toolkit_name) .and_then(|toolkit| toolkit.callbacks.get(tool_name)) .cloned() else { + tracing::warn!(callback_key = %callback_key, "binding.invoke: unknown tool callback"); return Ok(ToolCommandResolution::Failure(format!( "unknown tool callback {callback_key}" ))); @@ -251,6 +253,7 @@ fn resolve_toolkit_command( ), PermissionMode::Allow ) { + tracing::warn!(callback_key = %callback_key, "binding.invoke: blocked by policy"); return Ok(ToolCommandResolution::Failure(format!( "blocked by binding.invoke policy for {callback_key}" ))); @@ -269,6 +272,11 @@ fn resolve_toolkit_command( return Ok(ToolCommandResolution::Failure(message)); } let timeout_ms = tool.timeout_ms.unwrap_or(DEFAULT_TOOL_TIMEOUT_MS); + tracing::info!( + callback_key = %callback_key, + timeout_ms, + "binding.invoke: resolved tool callback" + ); Ok(build_command_callback_resolution( &callback_key,