pub struct SessionState {
pub messages: Vec<ConversationMessage>,
pub tool_calls: Vec<SessionToolCall>,
pub activity_log: Vec<SessionActivityEvent>,
pub working_memory: SessionWorkingMemory,
pub total_tokens: u64,
pub context_cache_key: Option<String>,
pub workspace_dir: Option<PathBuf>,
pub llm_config: Option<SessionLlmConfig>,
pub voice_config: Option<SessionVoiceConfig>,
pub tool_settings: Option<SessionToolSettings>,
pub reflection_settings: Option<SessionReflectionSettings>,
pub paused_execution: Option<PausedExecutionState>,
}Expand description
Persisted session state.
Fields§
§messages: Vec<ConversationMessage>Conversation history.
tool_calls: Vec<SessionToolCall>Tool call history.
activity_log: Vec<SessionActivityEvent>Replayable session activity timeline used to restore rich UI state.
working_memory: SessionWorkingMemoryShort-term working memory for this session.
total_tokens: u64Total tokens used in this session (best-effort).
context_cache_key: Option<String>Last context cache key (for smart context reduction).
workspace_dir: Option<PathBuf>Workspace directory for sandboxed file/shell operations.
llm_config: Option<SessionLlmConfig>Session-scoped LLM configuration.
voice_config: Option<SessionVoiceConfig>Session-scoped voice configuration.
tool_settings: Option<SessionToolSettings>Session-scoped tool settings.
reflection_settings: Option<SessionReflectionSettings>Session-scoped experiential reflection settings.
paused_execution: Option<PausedExecutionState>Paused execution state for resumable sessions.
When the user pauses (cancels) a streaming response, the execution state
is captured here so it can be resumed later via @continue (CLI) or the
resume button (GUI).
Implementations§
Source§impl SessionState
impl SessionState
Sourcepub fn with_workspace(workspace_dir: PathBuf) -> SessionState
pub fn with_workspace(workspace_dir: PathBuf) -> SessionState
Create a new session state with a workspace directory.
Sourcepub fn get_recent_messages(&self, limit: usize) -> Vec<&ConversationMessage>
pub fn get_recent_messages(&self, limit: usize) -> Vec<&ConversationMessage>
Get the most recent messages in the session.
Sourcepub fn add_user_message(&mut self, content: &str, source: MessageSource)
pub fn add_user_message(&mut self, content: &str, source: MessageSource)
Add a user message.
Sourcepub fn add_assistant_message(&mut self, content: &str, thinking: Option<String>)
pub fn add_assistant_message(&mut self, content: &str, thinking: Option<String>)
Add an assistant message.
Sourcepub fn remember_assistant_summary(
&mut self,
content: &str,
thinking: Option<String>,
)
pub fn remember_assistant_summary( &mut self, content: &str, thinking: Option<String>, )
Remember an assistant summary without appending a new conversation message.
Sourcepub fn append_to_last_assistant_message(
&mut self,
content: &str,
thinking: Option<String>,
) -> bool
pub fn append_to_last_assistant_message( &mut self, content: &str, thinking: Option<String>, ) -> bool
Append streamed continuation content to the most recent assistant message.
Returns true when the last conversation entry was an assistant message and
the additional content/thinking was merged into that entry.
Sourcepub fn add_tool_message(&mut self, tool_call_id: &str, content: &str)
pub fn add_tool_message(&mut self, tool_call_id: &str, content: &str)
Add a tool result message.
Sourcepub fn record_tool_call(&mut self, call: SessionToolCall)
pub fn record_tool_call(&mut self, call: SessionToolCall)
Record a tool call.
Sourcepub fn record_activity_event(
&mut self,
event_type: impl Into<String>,
payload: Option<Value>,
)
pub fn record_activity_event( &mut self, event_type: impl Into<String>, payload: Option<Value>, )
Append a replay/export activity event to the session timeline.
Sourcepub fn remember_decision(
&mut self,
summary: impl Into<String>,
rationale: Option<String>,
tags: Vec<String>,
)
pub fn remember_decision( &mut self, summary: impl Into<String>, rationale: Option<String>, tags: Vec<String>, )
Add a decision to session working memory.
Sourcepub fn remember_blocker(
&mut self,
summary: impl Into<String>,
detail: Option<String>,
)
pub fn remember_blocker( &mut self, summary: impl Into<String>, detail: Option<String>, )
Add or refresh a blocker in session working memory.
Sourcepub fn resolve_blocker(&mut self, summary: &str)
pub fn resolve_blocker(&mut self, summary: &str)
Resolve an existing blocker in session working memory.
Sourcepub fn remember_resource(
&mut self,
kind: SessionMemoryResourceKind,
label: impl Into<String>,
value: impl Into<String>,
source: impl Into<String>,
)
pub fn remember_resource( &mut self, kind: SessionMemoryResourceKind, label: impl Into<String>, value: impl Into<String>, source: impl Into<String>, )
Track an explicit resource in session working memory.
Sourcepub fn relevant_working_memory_sections(
&self,
query: &str,
limit: usize,
) -> Vec<String>
pub fn relevant_working_memory_sections( &self, query: &str, limit: usize, ) -> Vec<String>
Return prompt-ready short-term memory sections relevant to the query.
Sourcepub fn promotion_candidates(
&self,
limit: usize,
) -> Vec<SessionMemoryPromotionCandidate>
pub fn promotion_candidates( &self, limit: usize, ) -> Vec<SessionMemoryPromotionCandidate>
Return high-value short-term memory candidates for durable promotion.
Sourcepub fn to_pipeline_messages(&self) -> Vec<Message>
pub fn to_pipeline_messages(&self) -> Vec<Message>
Convert to pipeline messages.
Trait Implementations§
Source§impl Clone for SessionState
impl Clone for SessionState
Source§fn clone(&self) -> SessionState
fn clone(&self) -> SessionState
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SessionState
impl Debug for SessionState
Source§impl Default for SessionState
impl Default for SessionState
Source§fn default() -> SessionState
fn default() -> SessionState
Source§impl<'de> Deserialize<'de> for SessionState
impl<'de> Deserialize<'de> for SessionState
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<SessionState, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<SessionState, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for SessionState
impl Serialize for SessionState
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for SessionState
impl RefUnwindSafe for SessionState
impl Send for SessionState
impl Sync for SessionState
impl Unpin for SessionState
impl UnsafeUnpin for SessionState
impl UnwindSafe for SessionState
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere
T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().