use lingshu_sdk::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let agent = SdkAgent::builder("copilot/claude-sonnet-4.6")?
.quiet_mode(true)
.build()?;
let reply = agent
.chat("Explain the Rust borrow checker in two sentences.")
.await?;
println!("Agent: {reply}");
let session_id = agent.session_id().await.unwrap();
println!("\nSession ID: [redacted] (len={})", session_id.len());
let sessions = agent.list_sessions(5).await?;
println!("\nRecent sessions ({}):", sessions.len());
for s in &sessions {
println!(
" {} | model={:?} | msgs={} | {:?}",
&s.id[..8.min(s.id.len())],
s.model,
s.message_count,
s.title,
);
}
let hits = agent.search_sessions("borrow checker", 5).await?;
println!("\nSearch results ({}):", hits.len());
for h in &hits {
println!(
" session={}... | score={:.2}",
&h.session.id[..8.min(h.session.id.len())],
h.score
);
println!(" snippet: {}...", &h.snippet[..h.snippet.len().min(80)]);
}
let export = agent.export().await;
println!(
"\nExported session: {} messages, model={}",
export.messages.len(),
export.snapshot.model,
);
let child = agent.fork().await?;
let followup = child.chat("Now explain lifetimes.").await?;
println!("\nForked agent: {}", &followup[..followup.len().min(120)]);
Ok(())
}