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