use thiserror::Error;
use uuid::Uuid;
#[derive(Debug, Error)]
pub enum SessionError {
#[error("session not found")]
NotFound(Uuid),
#[error("session expired")]
Expired(Uuid),
#[error("session budget exceeded")]
BudgetExceeded {
session_id: Uuid,
limit: u64,
used: u64,
},
#[error("tool not authorized in session")]
ToolNotAuthorized { session_id: Uuid, tool: String },
#[error("session already closed")]
AlreadyClosed(Uuid),
#[error("session rate limit exceeded")]
RateLimited {
session_id: Uuid,
limit_per_minute: u64,
},
#[error("agent mismatch")]
AgentMismatch {
session_id: Uuid,
expected: Uuid,
actual: Uuid,
},
#[error("storage write-through failed")]
StorageWriteThrough { session_id: Uuid, detail: String },
#[error("too many concurrent sessions")]
TooManySessions {
agent_id: String,
max: u64,
current: u64,
},
}