use std::sync::Arc;
use meerkat::{AgentBuilder, AgentFactory, AnthropicClient, JsonlStore};
use meerkat_store::StoreAdapter;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("ANTHROPIC_API_KEY")
.map_err(|_| "ANTHROPIC_API_KEY environment variable must be set")?;
let store_dir = std::env::current_dir()?.join(".rkat").join("sessions");
std::fs::create_dir_all(&store_dir)?;
let factory = AgentFactory::new(store_dir.clone());
let client = Arc::new(AnthropicClient::new(api_key)?);
let llm = factory.build_llm_adapter(client, "claude-sonnet-4-5").await;
let store = Arc::new(JsonlStore::new(store_dir));
store.init().await?;
let store = Arc::new(StoreAdapter::new(store));
let tools = Arc::new(meerkat_tools::EmptyToolDispatcher);
let mut agent = AgentBuilder::new()
.model("claude-sonnet-4-5")
.system_prompt("You are a helpful assistant. Be concise in your responses.")
.max_tokens_per_turn(1024)
.build(Arc::new(llm), tools, store)
.await?;
let result = agent
.run("What is the capital of France? Answer in one sentence.".into())
.await?;
println!("Response: {}", result.text);
println!("\n--- Stats ---");
println!("Session ID: {}", result.session_id);
println!("Turns: {}", result.turns);
println!("Total tokens: {}", result.usage.total_tokens());
Ok(())
}