use phi_agent::session;
#[path = "../common/mod.rs"]
mod common;
fn main() -> anyhow::Result<()> {
let base_dir = std::env::temp_dir().join("phi-agent-session-demo");
println!("Session base dir: {}", base_dir.display());
let ctx = session::resolve_session(Some("demo-session-001"), &base_dir)?;
println!("Session ID: {}", ctx.session_id);
println!("Is new session: {}", ctx.is_new_session);
println!("Session dir: {}", ctx.session_dir.display());
println!("Log path: {}", ctx.log_path().display());
println!("Turn path (turn 1): {}", ctx.turn_path(1).display());
assert!(session::validate_session_id("valid-id-123").is_ok());
assert!(session::validate_session_id("").is_err());
assert!(session::validate_session_id("spaces not allowed").is_err());
let auto_id = session::generate_session_id();
println!("Auto-generated ID: {}", auto_id);
let parts: Vec<&str> = auto_id.split('_').collect();
assert_eq!(parts.len(), 2);
assert_eq!(parts[0].len(), 8); assert_eq!(parts[1].len(), 8);
let result = session::resolve_session(Some("demo-session-001"), &base_dir);
match result {
Ok(_) => println!("Unexpected: second lock succeeded"),
Err(e) => {
println!("Expected: second lock failed — {}", e);
assert!(matches!(e, phi_agent::AgentError::ResourceUnavailable(_)));
},
}
let cleaned = session::cleanup_expired_sessions(&base_dir, 7)?;
println!("Cleaned {} expired session(s)", cleaned);
drop(ctx); let _ = std::fs::remove_dir_all(&base_dir);
println!("\n=== Session management demonstrated ===");
Ok(())
}