Trait SessionBackend
pub trait SessionBackend: Send + Sync {
Show 26 methods
// Required methods
fn load(&self, session_key: &str) -> Vec<ChatMessage>;
fn append(&self, session_key: &str, message: &ChatMessage) -> Result<()>;
fn remove_last(&self, session_key: &str) -> Result<bool>;
fn list_sessions(&self) -> Vec<String>;
// Provided methods
fn load_with_timestamps(&self, session_key: &str) -> Vec<TimestampedMessage> { ... }
fn update_last(
&self,
session_key: &str,
message: &ChatMessage,
) -> Result<bool> { ... }
fn list_sessions_with_metadata(&self) -> Vec<SessionMetadata> { ... }
fn compact(&self, _session_key: &str) -> Result<()> { ... }
fn cleanup_stale(&self, _ttl_hours: u32) -> Result<usize> { ... }
fn search(&self, _query: &SessionQuery) -> Vec<SessionMetadata> { ... }
fn clear_messages(&self, session_key: &str) -> Result<usize> { ... }
fn delete_session(&self, _session_key: &str) -> Result<bool> { ... }
fn clear_agent_attribution(&self, _agent_alias: &str) -> Result<usize> { ... }
fn rename_agent_attribution(&self, _from: &str, _to: &str) -> Result<usize> { ... }
fn count_agent_attribution(&self, _agent_alias: &str) -> Result<usize> { ... }
fn session_exists(&self, session_key: &str) -> bool { ... }
fn set_session_name(&self, _session_key: &str, _name: &str) -> Result<()> { ... }
fn get_session_name(&self, _session_key: &str) -> Result<Option<String>> { ... }
fn set_session_agent_alias(
&self,
_session_key: &str,
_agent_alias: &str,
) -> Result<()> { ... }
fn get_session_agent_alias(
&self,
_session_key: &str,
) -> Result<Option<String>> { ... }
fn set_session_context(
&self,
_session_key: &str,
_context: SessionContext<'_>,
) -> Result<()> { ... }
fn get_session_metadata(&self, session_key: &str) -> Option<SessionMetadata> { ... }
fn set_session_state(
&self,
_session_key: &str,
_state: &str,
_turn_id: Option<&str>,
) -> Result<()> { ... }
fn get_session_state(
&self,
_session_key: &str,
) -> Result<Option<SessionState>> { ... }
fn list_running_sessions(&self) -> Vec<SessionMetadata> { ... }
fn list_stuck_sessions(&self, _threshold_secs: u64) -> Vec<SessionMetadata> { ... }
}Expand description
Trait for session persistence backends.
Implementations must be Send + Sync for sharing across async tasks.
Required Methods§
Sourcefn load(&self, session_key: &str) -> Vec<ChatMessage>
fn load(&self, session_key: &str) -> Vec<ChatMessage>
Load all messages for a session. Returns empty vec if session doesn’t exist.
Sourcefn append(&self, session_key: &str, message: &ChatMessage) -> Result<()>
fn append(&self, session_key: &str, message: &ChatMessage) -> Result<()>
Append a single message to a session.
Sourcefn remove_last(&self, session_key: &str) -> Result<bool>
fn remove_last(&self, session_key: &str) -> Result<bool>
Remove the last message from a session. Returns true if a message was removed.
Sourcefn list_sessions(&self) -> Vec<String>
fn list_sessions(&self) -> Vec<String>
List all session keys.
Provided Methods§
Sourcefn load_with_timestamps(&self, session_key: &str) -> Vec<TimestampedMessage>
fn load_with_timestamps(&self, session_key: &str) -> Vec<TimestampedMessage>
Same as load, but each row carries its persisted created_at
when the backend has one. Default impl falls back to load
without timestamps so non-SQLite backends keep working.
fn update_last(&self, session_key: &str, message: &ChatMessage) -> Result<bool>
Sourcefn list_sessions_with_metadata(&self) -> Vec<SessionMetadata>
fn list_sessions_with_metadata(&self) -> Vec<SessionMetadata>
List sessions with metadata.
Sourcefn compact(&self, _session_key: &str) -> Result<()>
fn compact(&self, _session_key: &str) -> Result<()>
Compact a session file (remove duplicates/corruption). No-op by default.
Sourcefn cleanup_stale(&self, _ttl_hours: u32) -> Result<usize>
fn cleanup_stale(&self, _ttl_hours: u32) -> Result<usize>
Remove sessions that haven’t been active within the given TTL hours.
Sourcefn search(&self, _query: &SessionQuery) -> Vec<SessionMetadata>
fn search(&self, _query: &SessionQuery) -> Vec<SessionMetadata>
Search sessions by keyword. Default returns empty (backends with FTS override).
fn clear_messages(&self, session_key: &str) -> Result<usize>
Sourcefn delete_session(&self, _session_key: &str) -> Result<bool>
fn delete_session(&self, _session_key: &str) -> Result<bool>
Delete all messages for a session. Returns true if the session existed.
fn clear_agent_attribution(&self, _agent_alias: &str) -> Result<usize>
fn rename_agent_attribution(&self, _from: &str, _to: &str) -> Result<usize>
fn count_agent_attribution(&self, _agent_alias: &str) -> Result<usize>
fn session_exists(&self, session_key: &str) -> bool
Sourcefn set_session_name(&self, _session_key: &str, _name: &str) -> Result<()>
fn set_session_name(&self, _session_key: &str, _name: &str) -> Result<()>
Set or update the human-readable name for a session.
Sourcefn get_session_name(&self, _session_key: &str) -> Result<Option<String>>
fn get_session_name(&self, _session_key: &str) -> Result<Option<String>>
Get the human-readable name for a session (if set).
Sourcefn set_session_agent_alias(
&self,
_session_key: &str,
_agent_alias: &str,
) -> Result<()>
fn set_session_agent_alias( &self, _session_key: &str, _agent_alias: &str, ) -> Result<()>
Record the agent alias that owns a session. Called on WebSocket handshake when the alias is known. No-op for backends that don’t track per-agent attribution.
Sourcefn get_session_agent_alias(&self, _session_key: &str) -> Result<Option<String>>
fn get_session_agent_alias(&self, _session_key: &str) -> Result<Option<String>>
Get the agent alias associated with a session, if recorded.
fn set_session_context( &self, _session_key: &str, _context: SessionContext<'_>, ) -> Result<()>
fn get_session_metadata(&self, session_key: &str) -> Option<SessionMetadata>
Sourcefn set_session_state(
&self,
_session_key: &str,
_state: &str,
_turn_id: Option<&str>,
) -> Result<()>
fn set_session_state( &self, _session_key: &str, _state: &str, _turn_id: Option<&str>, ) -> Result<()>
Set the session state (e.g. “idle”, “running”, “error”).
turn_id identifies the current turn (set when running, cleared on idle).
Sourcefn get_session_state(&self, _session_key: &str) -> Result<Option<SessionState>>
fn get_session_state(&self, _session_key: &str) -> Result<Option<SessionState>>
Get the current session state. Returns None if the backend doesn’t track state.
Sourcefn list_running_sessions(&self) -> Vec<SessionMetadata>
fn list_running_sessions(&self) -> Vec<SessionMetadata>
List sessions currently in “running” state.
Sourcefn list_stuck_sessions(&self, _threshold_secs: u64) -> Vec<SessionMetadata>
fn list_stuck_sessions(&self, _threshold_secs: u64) -> Vec<SessionMetadata>
List sessions stuck in “running” state longer than threshold_secs.