pub struct AgentSession {Show 17 fields
pub id: SessionId,
pub user_id: [u8; 8],
pub messages: Vec<Message>,
pub capabilities: Arc<CapabilityStore>,
pub allowance_store: Arc<AllowanceStore>,
pub approval_manager: Arc<ApprovalManager>,
pub system_prompt: String,
pub created_at: DateTime<Utc>,
pub token_count: usize,
pub metadata: SessionMetadata,
pub escape_handler: EscapeHandler,
pub budget_tracker: Arc<BudgetTracker>,
pub workspace_budget_tracker: Option<Arc<WorkspaceBudgetTracker>>,
pub workspace_path: Option<PathBuf>,
pub model: Option<String>,
pub is_subagent: bool,
pub capsule_context: Option<String>,
}Expand description
An agent session.
Fields§
§id: SessionIdUnique session identifier.
user_id: [u8; 8]User identifier (key ID).
messages: Vec<Message>Conversation messages.
capabilities: Arc<CapabilityStore>Session capabilities.
allowance_store: Arc<AllowanceStore>Session allowance store.
approval_manager: Arc<ApprovalManager>Session approval manager.
system_prompt: StringSystem prompt.
created_at: DateTime<Utc>When the session was created.
token_count: usizeEstimated token count.
metadata: SessionMetadataSession metadata.
escape_handler: EscapeHandlerWorkspace escape handler for tracking allowed paths.
budget_tracker: Arc<BudgetTracker>Per-session budget tracker.
workspace_budget_tracker: Option<Arc<WorkspaceBudgetTracker>>Workspace cumulative budget tracker (shared across sessions).
workspace_path: Option<PathBuf>Workspace path this session belongs to (for workspace-scoped listing).
model: Option<String>Model used for this session (e.g. "claude-sonnet-4-20250514").
is_subagent: boolWhether this session belongs to a sub-agent (skip spark preamble in run_loop).
capsule_context: Option<String>Plugin-provided context (fetched dynamically per subagent/session, not persisted).
Implementations§
Source§impl AgentSession
impl AgentSession
Sourcepub fn with_id(
id: SessionId,
user_id: [u8; 8],
system_prompt: impl Into<String>,
) -> Self
pub fn with_id( id: SessionId, user_id: [u8; 8], system_prompt: impl Into<String>, ) -> Self
Create with a specific session ID.
Create a child session that shares parent’s stores.
The child inherits the parent’s AllowanceStore, CapabilityStore, and
BudgetTracker (same Arc — spend is visible bidirectionally). The
ApprovalManager and DeferredResolutionStore are fresh (independent
handler registration and independent deferred queue).
Sourcepub fn with_workspace(self, path: impl Into<PathBuf>) -> Self
pub fn with_workspace(self, path: impl Into<PathBuf>) -> Self
Set the workspace path for this session.
Sourcepub fn with_model(self, model: impl Into<String>) -> Self
pub fn with_model(self, model: impl Into<String>) -> Self
Set the model name for this session.
Sourcepub fn with_capability_store(self, store: Arc<CapabilityStore>) -> Self
pub fn with_capability_store(self, store: Arc<CapabilityStore>) -> Self
Replace the capability store with a persistent one.
Call this after session construction when a persistent store is available (e.g. at daemon startup).
Sourcepub fn with_workspace_budget(self, tracker: Arc<WorkspaceBudgetTracker>) -> Self
pub fn with_workspace_budget(self, tracker: Arc<WorkspaceBudgetTracker>) -> Self
Set the workspace cumulative budget tracker.
Sourcepub fn import_workspace_allowances(&self, allowances: Vec<Allowance>)
pub fn import_workspace_allowances(&self, allowances: Vec<Allowance>)
Import workspace-scoped allowances into this session.
These allowances were previously persisted in the workspace state.db
and are loaded when a session is created or resumed in the same workspace.
Sourcepub fn export_workspace_allowances(&self) -> Vec<Allowance>
pub fn export_workspace_allowances(&self) -> Vec<Allowance>
Export workspace-scoped allowances from this session for persistence.
Sourcepub async fn with_persistent_deferred_queue(
self,
store: ScopedKvStore,
) -> Result<Self, RuntimeError>
pub async fn with_persistent_deferred_queue( self, store: ScopedKvStore, ) -> Result<Self, RuntimeError>
Replace the deferred resolution queue with a persistent one.
This reconstructs the ApprovalManager with the new persistent queue.
Call this after session construction when a persistent store is available.
§Errors
Returns an error if the persistent store cannot be initialized.
Sourcepub fn add_message(&mut self, message: Message)
pub fn add_message(&mut self, message: Message)
Add a message to the session.
Sourcepub fn last_messages(&self, n: usize) -> &[Message]
pub fn last_messages(&self, n: usize) -> &[Message]
Get the last N messages.
Sourcepub fn clear_messages(&mut self)
pub fn clear_messages(&mut self)
Clear messages (keeping system prompt).
Sourcepub fn end_session(&self)
pub fn end_session(&self)
Clean up session-scoped state.
Clears session-only allowances, leaving workspace and persistent ones intact.
Sourcepub fn is_near_limit(&self, max_tokens: usize, threshold: f32) -> bool
pub fn is_near_limit(&self, max_tokens: usize, threshold: f32) -> bool
Check if session is near context limit.
Trait Implementations§
Source§impl Debug for AgentSession
impl Debug for AgentSession
Source§impl From<&AgentSession> for SerializableSession
impl From<&AgentSession> for SerializableSession
Source§fn from(session: &AgentSession) -> Self
fn from(session: &AgentSession) -> Self
Auto Trait Implementations§
impl Freeze for AgentSession
impl !RefUnwindSafe for AgentSession
impl Send for AgentSession
impl Sync for AgentSession
impl Unpin for AgentSession
impl UnsafeUnpin for AgentSession
impl !UnwindSafe for AgentSession
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
Source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
Source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self file descriptor.Source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
Source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
self file descriptor. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more