pub struct OperatorSession {Show 15 fields
pub id: SessionId,
pub operator_id: String,
pub role: Role,
pub attached_at: u64,
pub last_seen: u64,
pub attached: bool,
pub owned_task_ids: Vec<TaskId>,
pub token_nonce: String,
pub operator_kind: Option<OperatorKind>,
pub runtime_agent_kinds: HashMap<String, OperatorKind>,
pub bp_agent_kinds: HashMap<String, OperatorKind>,
pub bp_global_kind: Option<OperatorKind>,
pub bridge_id: Option<String>,
pub hook_id: Option<String>,
pub operator_backend_id: Option<String>,
}Expand description
Persisted record of one attached Operator session: identity, role,
heartbeat bookkeeping, owned tasks, and the OperatorKind cascade
inputs plus registry IDs used to rebuild OperatorInfo on dispatch
(see Engine::resolve_operator_info).
Fields§
§id: SessionIdUnique session identifier (distinct from the token nonce).
operator_id: StringCaller-supplied name identifying the Operator (not necessarily unique across sessions).
role: RoleRole the session’s token was minted with.
attached_at: u64Unix timestamp (seconds) when the session was attached.
last_seen: u64Unix timestamp (seconds) of the last heartbeat/attach touch.
attached: boolWhether the session is currently considered live. Flipped to
false by detach or by start_detach_loop on a heartbeat miss.
owned_task_ids: Vec<TaskId>Task IDs started by this session (via start_task while this
session’s token was current).
token_nonce: StringNonce of the CapToken this session was attached with; used to
look sessions up by token in with_state closures.
operator_kind: Option<OperatorKind>The Operator’s kind, plus IDs of
the SeniorBridge / SpawnHook registered on the engine’s
BridgeRegistry. Persisted (all String; no Arc<dyn ...>). At
dispatch_attempt time the engine looks these up in the registry
and builds an OperatorInfo to inject into Ctx.
§4-tier OperatorKind cascade — “Runtime Global” tier
This field is the literal value passed to Engine::attach_with_ids’s
kind parameter, and is fed to crate::core::ctx::collapse_operator_kind
as the runtime_global tier verbatim: Some(_) is always an
explicit Runtime Global request that outranks both BP tiers — even
Some(OperatorKind::Automate) — and None means “not requested”,
letting the BP-level tiers (bp_agent_kinds / bp_global_kind) take
over. #[serde(default)] keeps existing persisted sessions (from
before this field existed / was Option) deserializing as None.
See crate::core::ctx::collapse_operator_kind for the full cascade +
rationale.
runtime_agent_kinds: HashMap<String, OperatorKind>“Runtime Agent-level” tier (highest priority) of the OperatorKind
cascade — per-agent override supplied at task-launch time via
TaskLaunchInput.operator_kind_overrides / TaskApplicationInput .operator_kind_overrides. Keyed by AgentDef.name.
bp_agent_kinds: HashMap<String, OperatorKind>“BP Agent-level” tier of the OperatorKind cascade — baked at
TaskLaunchService::launch time from Blueprint.operators[].kind,
resolved per-agent via AgentDef.spec.operator_ref. Keyed by
AgentDef.name (not OperatorDef.name).
bp_global_kind: Option<OperatorKind>“BP Global” tier of the OperatorKind cascade — baked at
TaskLaunchService::launch time from Blueprint.default_operator_kind.
bridge_id: Option<String>ID of the Arc<dyn SeniorBridge> registered on the engine’s
BridgeRegistry, if any; resolved back into OperatorInfo.senior_bridge.
hook_id: Option<String>ID of the Arc<dyn SpawnHook> registered on the engine’s
BridgeRegistry, if any; resolved back into OperatorInfo.spawn_hook.
operator_backend_id: Option<String>ID of the Arc<dyn Operator> registered on the OperatorRegistry.
Used by OperatorDelegateMiddleware when kind = MainAi /
Composite and operator_id is Some: it delegates the entire
spawn to operator.execute.
Trait Implementations§
Source§impl Clone for OperatorSession
impl Clone for OperatorSession
Source§fn clone(&self) -> OperatorSession
fn clone(&self) -> OperatorSession
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OperatorSession
impl Debug for OperatorSession
Source§impl<'de> Deserialize<'de> for OperatorSession
impl<'de> Deserialize<'de> for OperatorSession
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for OperatorSession
impl RefUnwindSafe for OperatorSession
impl Send for OperatorSession
impl Sync for OperatorSession
impl Unpin for OperatorSession
impl UnsafeUnpin for OperatorSession
impl UnwindSafe for OperatorSession
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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