pub struct SubagentState {Show 24 fields
pub status: SubagentStatus,
pub partial_text: String,
pub tool_log: Vec<String>,
pub conversation_state: Vec<Value>,
pub finished_at: Option<Instant>,
pub cancel_requested: bool,
pub stopped_by_reload: bool,
pub completion_settled: bool,
pub terminal: Option<TerminalDiagnostic>,
pub step: String,
pub tools: u32,
pub history: Option<Vec<SharedMessage>>,
pub last_response_start: usize,
pub archive_meta: Option<SubagentArchiveMeta>,
pub archive_dir: Option<PathBuf>,
pub archive_path: Option<PathBuf>,
pub cache_anchor_unix_ms: Option<u64>,
pub context_window: u64,
pub context_rollovers: u32,
pub context_transcripts: Vec<PathBuf>,
pub finalization_started: bool,
pub finalization_ready: bool,
pub archive_error: Option<String>,
pub watch: WatchJournal,
}Expand description
All mutable state shared between the subagent thread and its handle. Collapsed behind a single RwLock so a status poll takes exactly one lock.
Fields§
§status: SubagentStatus§partial_text: String§tool_log: Vec<String>§conversation_state: Vec<Value>§finished_at: Option<Instant>Stamped once by finalize_subagent at thread exit.
cancel_requested: boolSet by cancel() before the shutdown signal is sent. Read by finalize_subagent to label the terminal status correctly.
stopped_by_reload: boolStopped by a daemon reload (SubagentRegistry::stop_for_reload), not
by the user: the run is resumable from its archive.
completion_settled: boolThe finalizer ran to its end: the archive is written and the completion wake pushed (or deliberately withheld, e.g. a cancel). A reload waits for this so the wake is in the queue it carries.
terminal: Option<TerminalDiagnostic>§step: StringWhat the worker is doing right now: the same text as its latest
SubagentUpdate (“💭 thinking…”, “⚙ bash (tool #2)”, “$ cargo test”).
Those events ride the stream of the turn that started the worker; a
background worker outlives that turn, so clients read its progress
from here (via SubagentDisplayRow) once the turn has ended.
tools: u32Tool calls started so far (the “tool #N” in step).
history: Option<Vec<SharedMessage>>The worker’s real message history, from the runtime’s last
SessionEvent::MessageHistory. Written to the resume archive by the
finalizer and then released, so finished handles stay small.
last_response_start: usizeByte offset in partial_text where the latest model response starts.
Completion previews show that response (the worker’s final word), not
the first words of the whole run.
archive_meta: Option<SubagentArchiveMeta>Identity needed to resume from the archive after the handle is reaped.
archive_dir: Option<PathBuf>Archive destination captured at launch, independent of later config changes.
archive_path: Option<PathBuf>Where the finalizer wrote this worker’s resume archive.
cache_anchor_unix_ms: Option<u64>Wall-clock start (Unix ms) of the run’s last accepted Anthropic
request, captured when the run ends. subagent_resume compares it to
the worker cache TTL: an expired prefix would be rewritten in full, so
a large cold history is resumed from a compact context instead.
context_window: u64The worker’s current context window (1 until its context first rolls over; a resumed rolled worker starts at its archived window).
context_rollovers: u32Automatic context rollovers in this run.
context_transcripts: Vec<PathBuf>Transcripts of every earlier context window, oldest first.
finalization_started: boolManaged workers remain publicly running until their recovery outcome is published.
finalization_ready: bool§archive_error: Option<String>§watch: WatchJournalWhat the worker has shown so far, for clients watching it in its own
thread view (SessionQuery::SubagentWatch). Bounded.
Implementations§
Source§impl SubagentState
impl SubagentState
pub fn public_status(&self) -> SubagentStatus
pub fn new() -> Self
Sourcepub fn note_progress(&mut self, step: &str, tools: u32)
pub fn note_progress(&mut self, step: &str, tools: u32)
Record the worker’s latest progress line and tool count.
Sourcepub fn note_context(&mut self, window: u64, transcripts: Vec<PathBuf>)
pub fn note_context(&mut self, window: u64, transcripts: Vec<PathBuf>)
Record where the worker’s context stands: at launch from a resumed history, then after each rollover.
Sourcepub fn context_summary(&self) -> Option<Value>
pub fn context_summary(&self) -> Option<Value>
{"window", "rollovers", "transcripts"} for status/collect once the
worker’s context has rolled over; None before (outputs unchanged).
Sourcepub fn last_response_text(&self) -> &str
pub fn last_response_text(&self) -> &str
Text of the latest model response (empty if none started yet).
Sourcepub fn safe_fail(&mut self, diagnostic: TerminalDiagnostic)
pub fn safe_fail(&mut self, diagnostic: TerminalDiagnostic)
Persist only typed, allowlisted failure data. Raw provider errors never enter state.
Trait Implementations§
Source§impl Debug for SubagentState
impl Debug for SubagentState
Auto Trait Implementations§
impl Freeze for SubagentState
impl RefUnwindSafe for SubagentState
impl Send for SubagentState
impl Sync for SubagentState
impl Unpin for SubagentState
impl UnsafeUnpin for SubagentState
impl UnwindSafe for SubagentState
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.