pub struct ClientSession {
pub client_id: String,
pub runtime: Arc<Runtime>,
pub channel: Arc<WsChannel>,
pub host: Arc<HostState>,
pub memgine: Arc<Mutex<MemgineEngine>>,
pub browser: BrowserSessionSlot,
pub authenticated: AtomicBool,
pub agent_id: Mutex<Option<String>>,
pub bound_memgine: Mutex<Option<Arc<Mutex<MemgineEngine>>>>,
}Expand description
Per-client session.
Fields§
§client_id: String§runtime: Arc<Runtime>§channel: Arc<WsChannel>§host: Arc<HostState>§memgine: Arc<Mutex<MemgineEngine>>Memgine handle. Wrapped in tokio::sync::Mutex so dispatcher
handlers can hold the lock across .await points without
risking poisoning. Migrated from std::sync::Mutex in the
car-server-core extraction (U1) per the “one-wrapper rule”.
browser: BrowserSessionSlotLazy browser session — first browser.run call launches Chromium,
subsequent calls reuse it so element IDs resolve across invocations
within the same WebSocket connection.
authenticated: AtomicBoolPer-connection auth state. Starts false; flips to true
after a successful session.auth handshake. Always considered
authenticated when ServerState::auth_token is unset (auth
disabled). Closes Parslee-ai/car-releases#32.
agent_id: Mutex<Option<String>>Bound agent identity (#169). Some(id) once a lifecycle-agent
child has called session.auth { token, agent_id } and the
supervisor confirmed agent_id is supervised + token matches.
Used by agents.list to surface which managed agents have
actually attached vs. just being marked Running at the
process level. Cleared at disconnect by remove_session.
bound_memgine: Mutex<Option<Arc<Mutex<MemgineEngine>>>>Bound persistent memgine (#170). Some after session.auth
successfully attaches the connection to a daemon-owned
per-agent memgine (paired with agent_id). Memory handlers
route through ClientSession::effective_memgine which
returns this when set, falling back to the ephemeral
memgine field for browser/host/CLI connections.
Implementations§
Source§impl ClientSession
impl ClientSession
Sourcepub async fn effective_memgine(&self) -> Arc<Mutex<MemgineEngine>>
pub async fn effective_memgine(&self) -> Arc<Mutex<MemgineEngine>>
Returns the memgine handle the memory.* handlers should use:
the bound per-agent memgine when this session attached via
session.auth { agent_id } (#169 + #170), otherwise the
ephemeral per-WS memgine. Cheap (one async lock + Arc clone).
Auto Trait Implementations§
impl !Freeze for ClientSession
impl !RefUnwindSafe for ClientSession
impl Send for ClientSession
impl Sync for ClientSession
impl Unpin for ClientSession
impl UnsafeUnpin for ClientSession
impl !UnwindSafe for ClientSession
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<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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>
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