pub struct SessionManager { /* private fields */ }Expand description
AI-optimized session manager for creating and managing multiple terminal sessions.
The SessionManager provides a centralized way to create, track, and manage AI-enhanced
terminal sessions. It includes automatic cleanup, session restoration, and efficient
resource management.
§Features
- Session Pooling: Efficient management of multiple concurrent sessions
- Automatic Cleanup: Garbage collection of terminated sessions
- Session Restoration: Restore sessions from persistent storage
- Resource Management: Automatic cleanup and memory management
§Examples
§Basic Session Management
use ai_session::{SessionManager, SessionConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let manager = SessionManager::new();
// Create multiple sessions
let session1 = manager.create_session().await?;
let session2 = manager.create_session().await?;
session1.start().await?;
session2.start().await?;
// List all active sessions
let session_ids = manager.list_sessions();
println!("Active sessions: {}", session_ids.len());
// Clean up
manager.remove_session(&session1.id).await?;
manager.remove_session(&session2.id).await?;
Ok(())
}§Custom Configuration
use ai_session::{SessionManager, SessionConfig, ContextConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let manager = SessionManager::new();
// Configure for AI development agent
let mut config = SessionConfig::default();
config.enable_ai_features = true;
config.agent_role = Some("backend-developer".to_string());
config.working_directory = "/project/backend".into();
config.context_config = ContextConfig {
max_tokens: 8192,
compression_threshold: 0.8,
};
let session = manager.create_session_with_config(config).await?;
session.start().await?;
// Session is optimized for AI backend development
Ok(())
}§Session Persistence
use ai_session::{SessionManager, SessionConfig, SessionId};
use chrono::Utc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let manager = SessionManager::new();
// Create session
let config = SessionConfig::default();
let session = manager.create_session_with_config(config.clone()).await?;
let session_id = session.id.clone();
let created_at = session.created_at;
// Later, restore the session
let restored = manager.restore_session(session_id, config, created_at).await?;
restored.start().await?;
Ok(())
}Implementations§
Source§impl SessionManager
impl SessionManager
Sourcepub async fn create_session(&self) -> Result<Arc<AISession>>
pub async fn create_session(&self) -> Result<Arc<AISession>>
Create a new session with default config
Sourcepub async fn create_session_with_config(
&self,
config: SessionConfig,
) -> Result<Arc<AISession>>
pub async fn create_session_with_config( &self, config: SessionConfig, ) -> Result<Arc<AISession>>
Create a new session with custom config
Sourcepub async fn restore_session(
&self,
id: SessionId,
config: SessionConfig,
created_at: DateTime<Utc>,
) -> Result<Arc<AISession>>
pub async fn restore_session( &self, id: SessionId, config: SessionConfig, created_at: DateTime<Utc>, ) -> Result<Arc<AISession>>
Restore a session with a specific ID (for persistence)
Sourcepub fn list_sessions(&self) -> Vec<SessionId>
pub fn list_sessions(&self) -> Vec<SessionId>
List all active sessions
Sourcepub fn list_session_refs(&self) -> Vec<Arc<AISession>>
pub fn list_session_refs(&self) -> Vec<Arc<AISession>>
List all active session references
Sourcepub async fn remove_session(&self, id: &SessionId) -> Result<()>
pub async fn remove_session(&self, id: &SessionId) -> Result<()>
Remove a session
Sourcepub async fn cleanup_terminated(&self) -> Result<usize>
pub async fn cleanup_terminated(&self) -> Result<usize>
Clean up terminated sessions
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SessionManager
impl !RefUnwindSafe for SessionManager
impl Send for SessionManager
impl Sync for SessionManager
impl Unpin for SessionManager
impl !UnwindSafe for SessionManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.