pub struct EngineState {
pub tasks: HashMap<TaskId, TaskState>,
pub sessions: HashMap<SessionId, OperatorSession>,
pub prompts: HashMap<(TaskId, u32), String>,
pub systems: HashMap<(TaskId, u32), Option<String>>,
pub tokens: HashMap<String, CapTokenRecord>,
pub worker_handles: HashMap<String, String>,
pub pending_resumes: HashMap<ResumeKey, ResumePending>,
pub task_notifies: HashMap<TaskId, Arc<Notify>>,
pub resources: HashMap<String, Value>,
pub output_store: HashMap<(TaskId, u32), Vec<OutputEvent>>,
pub event_log_tail: Vec<Event>,
pub event_log_max: usize,
}Expand description
The single Mutex-guarded blob of engine flow state, accessed only
through Engine::with_state (see the R1-R4 discipline documented
there).
Fields§
§tasks: HashMap<TaskId, TaskState>All known tasks, keyed by TaskId.
sessions: HashMap<SessionId, OperatorSession>All attached/detached sessions, keyed by SessionId.
prompts: HashMap<(TaskId, u32), String>Per-(task_id, attempt) prompt/directive text, seeded from
TaskSpec.initial_directive and fetched via fetch_prompt.
systems: HashMap<(TaskId, u32), Option<String>>Per-attempt system_prompt: AgentDef.profile.system_prompt is
baked at compile time, rendered inside OperatorSpawner::spawn,
and stashed here for the SubAgent to fetch alongside its prompt via
HTTP /v1/worker/prompt. The value is Option<String> so a missing
profile can be distinguished: an absent key means “not yet baked”,
while Some(None) means “baked and profile is explicitly absent”.
tokens: HashMap<String, CapTokenRecord>All minted CapToken records, keyed by token nonce.
worker_handles: HashMap<String, String>Short worker handle (wh-XXXXXXXX, 12 chars) → token-nonce lookup
map. Resolves the worker_handle field a SubAgent receives with its
prompt. There is no signature verification: task_id is resolved by
a plain HashMap lookup — deliberately thin for the local
running over WebSocket, and adopted specifically to remove the
base64 copy-paste failure mode.
pending_resumes: HashMap<ResumeKey, ResumePending>Outstanding query_senior suspensions awaiting resume.
task_notifies: HashMap<TaskId, Arc<Notify>>Per-task notifier — notify_waiters fires on every task-status
change. Used by poll_task on the caller side, and by callers that
need to await again after detach/reattach.
resources: HashMap<String, Value>Arbitrary named resources set via set_resource and read via
fetch_data.
output_store: HashMap<(TaskId, u32), Vec<OutputEvent>>Per-attempt output-event log. The SpawnerAdapter appends via
submit_output; the dispatch path pulls the terminal
OutputEvent::Final off the tail and decides Pass / Blocked.
event_log_tail: Vec<Event>Bounded in-process tail of recent Events (most recent last),
trimmed to event_log_max by push_event.
event_log_max: usizeMaximum length of event_log_tail before older entries are
dropped.
Implementations§
Source§impl EngineState
impl EngineState
Sourcepub fn ensure_task_notify(&mut self, task_id: &TaskId) -> Arc<Notify> ⓘ
pub fn ensure_task_notify(&mut self, task_id: &TaskId) -> Arc<Notify> ⓘ
Ensure a per-task Notify exists; return the existing one if any.
Sourcepub fn push_event(&mut self, ev: Event)
pub fn push_event(&mut self, ev: Event)
Append ev to event_log_tail, trimming the oldest entries once
event_log_max is exceeded.
Trait Implementations§
Source§impl Debug for EngineState
impl Debug for EngineState
Auto Trait Implementations§
impl Freeze for EngineState
impl RefUnwindSafe for EngineState
impl Send for EngineState
impl Sync for EngineState
impl Unpin for EngineState
impl UnsafeUnpin for EngineState
impl UnwindSafe for EngineState
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> 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