use ai_session::{SessionConfig, SessionManager};
use anyhow::Result;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() -> Result<()> {
println!("đ AI-Session Simple Test\n");
let manager = SessionManager::new();
println!("â Session manager created");
let mut config = SessionConfig::default();
config.enable_ai_features = false; config.pty_size = (24, 80);
let session = manager.create_session_with_config(config).await?;
println!("â Session created: {}", session.id);
let status = session.status().await;
println!("â Initial status: {:?}", status);
match session.start().await {
Ok(_) => println!("â Session started successfully"),
Err(e) => {
println!("â Failed to start session: {}", e);
println!("đ This might be expected in test environment without shell access");
println!("\nđ Testing session management...");
let sessions = manager.list_sessions();
println!("â Found {} sessions", sessions.len());
let retrieved = manager.get_session(&session.id);
if retrieved.is_some() {
println!("â Session retrieval works");
}
session
.set_metadata("test_key".to_string(), serde_json::json!("test_value"))
.await?;
let metadata = session.get_metadata("test_key").await;
if metadata.is_some() {
println!("â Metadata storage works");
}
println!("â Basic session management functionality confirmed");
return Ok(());
}
}
let status = session.status().await;
println!("â Session status after start: {:?}", status);
println!("\nđ Testing basic operations...");
println!("Sending: echo 'Hello World'");
match session.send_input("echo 'Hello World'\n").await {
Ok(_) => {
println!("â Command sent successfully");
sleep(Duration::from_millis(500)).await;
match session.read_output().await {
Ok(output) => {
let output_str = String::from_utf8_lossy(&output);
if !output_str.trim().is_empty() {
println!("â Output received: {}", output_str.trim());
} else {
println!("âšī¸ No output received (may be normal)");
}
}
Err(e) => println!("â ī¸ Read error: {}", e),
}
}
Err(e) => println!("â Send error: {}", e),
}
println!("\nđ Session Information:");
println!(" ID: {}", session.id);
println!(
" Created: {}",
session.created_at.format("%Y-%m-%d %H:%M:%S")
);
println!(
" Working Directory: {}",
session.config.working_directory.display()
);
println!(" AI Features: {}", session.config.enable_ai_features);
if session.config.enable_ai_features {
match session.get_ai_context().await {
Ok(context) => {
println!("â AI Context accessible");
println!(" Session ID: {}", context.session_id);
}
Err(e) => println!("â ī¸ AI Context error: {}", e),
}
}
println!("\nđ Shutting down session...");
session.stop().await?;
println!("â Session stopped");
let final_status = session.status().await;
println!("â Final status: {:?}", final_status);
manager.remove_session(&session.id).await?;
println!("â Session removed from manager");
let remaining_sessions = manager.list_sessions();
println!("â Remaining sessions: {}", remaining_sessions.len());
println!("\nđ Simple test completed successfully!");
Ok(())
}