pub struct Session { /* private fields */ }Expand description
A Lua execution session with domain state tracking.
Each session owns a dedicated Lua VM via _vm_driver. The VM’s OS thread
stays alive as long as the driver is held, and exits cleanly when the
session is dropped (channel closes → Lua thread drains and exits).
Implementations§
Source§impl Session
impl Session
Sourcepub fn new(
llm_rx: Receiver<LlmRequest>,
exec_task: AsyncTask,
metrics: ExecutionMetrics,
vm_driver: AsyncIsleDriver,
) -> Self
pub fn new( llm_rx: Receiver<LlmRequest>, exec_task: AsyncTask, metrics: ExecutionMetrics, vm_driver: AsyncIsleDriver, ) -> Self
Create a new session.
§Arguments
llm_rx— Receiver for LLM requests from the Lua bridge.exec_task— The coroutine execution task handle.metrics— Session metrics (owns the LogSink ring buffer; the bridge reads itslog_sink_handle()separately to wireprint()/alc.log()into the same ring buffer thatmetrics.snapshot()exposes viarecent_logsinalc_status).vm_driver— Keeps the Lua OS thread alive.
§Returns
A new Session in the Running state.
Sourcepub fn snapshot(
&self,
pending_filter: Option<&PendingFilter>,
include_history: bool,
) -> Value
pub fn snapshot( &self, pending_filter: Option<&PendingFilter>, include_history: bool, ) -> Value
Lightweight snapshot for external observation (alc_status).
Returns session state label and running metrics without consuming or modifying the session.
§Arguments
pending_filter— Opt-in projection for the currently pending LLM queries.Noneemits onlypending_queries: N(integer count), preserving the v0.x wire shape for light-weight polling.Some(filter)adds apending: [...]array projected through the filter’s field flags.include_history— Whentrue,conversation_history(≤10 entries) is included in the metrics output. Whenfalse(default), the key is absent. High-frequency polling callers should leave thisfalseto avoid wire bloat.
§Returns
A serde_json::Value snapshot with the following additive fields beyond v0.x:
phase— 5-value string derived fromExecutionState:"running","paused","completed","failed","cancelled". The existingstatekey is retained for backward compatibility (3-value).started_at— Unix millisecond timestamp when the session was created.last_activity_at— Unix millisecond timestamp of the most recent feed_one. Note:started_atandlast_activity_atare wall-clock values while expiry GC uses the monotoniclast_activeInstant; they may skew slightly on NTP adjustments (acceptable for observability use).
Sourcepub fn is_expired(&self, ttl: Duration) -> bool
pub fn is_expired(&self, ttl: Duration) -> bool
Returns true if the session has been idle longer than ttl.
Uses saturating_duration_since to avoid panics if the clock drifts
backwards (though this is extremely rare with monotonic clocks).
Auto Trait Implementations§
impl Freeze for Session
impl !RefUnwindSafe for Session
impl Send for Session
impl Sync for Session
impl Unpin for Session
impl UnsafeUnpin for Session
impl !UnwindSafe for Session
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
Mutably borrows from an owned value. Read more
Source§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>
Converts
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>
Converts
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 moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.