claude_agent/session/
mod.rs1pub mod cache;
4pub mod compact;
5pub mod manager;
6pub mod persistence;
7#[cfg(feature = "postgres")]
8pub mod persistence_postgres;
9#[cfg(feature = "redis-backend")]
10pub mod persistence_redis;
11pub mod queue;
12pub mod session_state;
13pub mod state;
14pub mod types;
15
16pub use crate::types::TokenUsage;
17pub use cache::{CacheConfigBuilder, CacheStats, SessionCacheManager};
18pub use compact::{CompactExecutor, CompactStrategy};
19pub use manager::SessionManager;
20pub use persistence::{MemoryPersistence, Persistence, PersistenceFactory};
21#[cfg(feature = "postgres")]
22pub use persistence_postgres::{PostgresConfig, PostgresPersistence};
23#[cfg(feature = "redis-backend")]
24pub use persistence_redis::RedisPersistence;
25pub use queue::{InputQueue, MergedInput, QueuedInput, SharedInputQueue};
26pub use session_state::ToolState;
27pub use state::{
28 MessageId, MessageMetadata, PermissionPolicy, Session, SessionConfig, SessionId,
29 SessionMessage, SessionMode, SessionState, SessionType,
30};
31pub use types::{
32 CompactRecord, CompactTrigger, EnvironmentContext, Plan, PlanStatus, QueueItem, QueueOperation,
33 QueueStatus, SessionStats, SessionTree, SummarySnapshot, TodoItem, TodoStatus, ToolExecution,
34 ToolExecutionFilter,
35};
36
37use thiserror::Error;
38
39#[derive(Error, Debug)]
40pub enum SessionError {
41 #[error("Session not found: {id}")]
42 NotFound { id: String },
43
44 #[error("Session expired: {id}")]
45 Expired { id: String },
46
47 #[error("Permission denied: {reason}")]
48 PermissionDenied { reason: String },
49
50 #[error("Storage error: {message}")]
51 Storage { message: String },
52
53 #[error("Persistence error: {0}")]
54 PersistenceError(String),
55
56 #[error("Serialization error: {0}")]
57 Serialization(#[from] serde_json::Error),
58
59 #[error("Compact error: {message}")]
60 Compact { message: String },
61
62 #[error("Context error: {0}")]
63 Context(#[from] crate::context::ContextError),
64
65 #[error("Plan error: {message}")]
66 Plan { message: String },
67}
68
69pub type SessionResult<T> = std::result::Result<T, SessionError>;
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74
75 #[test]
76 fn test_session_error_display() {
77 let err = SessionError::NotFound {
78 id: "test-123".to_string(),
79 };
80 assert!(err.to_string().contains("test-123"));
81 }
82
83 #[test]
84 fn test_session_error_expired() {
85 let err = SessionError::Expired {
86 id: "sess-456".to_string(),
87 };
88 assert!(err.to_string().contains("expired"));
89 }
90}