use agtrace_sdk::{Client, types::SessionFilter};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::connect_default().await?;
println!("Connected to workspace\n");
let sessions = client.sessions().list(SessionFilter::all())?;
if let Some(summary) = sessions.first() {
println!("Session: {}", summary.id);
println!("Provider: {}", summary.provider);
let handle = client.sessions().get(&summary.id)?;
let session = handle.assemble()?;
let tool_count: usize = session
.turns
.iter()
.flat_map(|t| &t.steps)
.flat_map(|s| &s.tools)
.count();
println!("\nStats:");
println!(" Turns: {}", session.turns.len());
println!(" Tool calls: {}", tool_count);
println!(" Tokens: {}", session.stats.total_tokens);
if !session.turns.is_empty() {
println!("\nTool calls (first turn):");
for step in &session.turns[0].steps {
for tool in &step.tools {
let status = if tool.is_error { "failed" } else { "ok" };
println!(" {} ({})", tool.call.content.name(), status);
}
}
}
} else {
println!("No sessions found. Start an agent session first.");
}
Ok(())
}