pub(super) enum ResumeEvent {
SpawnedWithResume {
generation: u64,
attempted_sid: String,
retry: RetryPayload,
},
SpawnedFresh {
generation: u64,
},
SessionCaptured {
generation: u64,
sid: String,
is_confirmed_success: bool,
},
MessageAppendedToRetryBatch {
generation: u64,
entry: QueuedRetryEntry,
},
ResumeUnreachable {
generation: u64,
sid: String,
},
ErrorResultLine {
generation: u64,
line: String,
},
ProcessExited {
generation: u64,
},
StopRequested {
generation: u64,
},
}Expand description
Events the stdin writer / stdout reader / stderr reader / process-
waiter sensor tasks report. Each carries the exact spawn generation
it was observed for.
Variants§
SpawnedWithResume
A fresh spawn attached --resume <attempted_sid>; generation is
this spawn’s identity for the rest of its lifetime.
SpawnedFresh
A fresh spawn did NOT attach --resume (no session id held yet).
generation is this spawn’s identity, carried so NotTracking
can tell a later, legitimate ProcessExited for THIS generation
apart from a stale one for whatever generation it superseded.
SessionCaptured
A session-id-bearing stdout frame arrived for this generation.
sid is the id it carried; is_confirmed_success is true only
when THIS exact frame is a terminal result with is_error:false
— a fully-completed, genuinely successful turn.
reagentx P0 on PR #2371: the CLI echoes back whatever --resume
sid it was given as its FIRST stdout line REGARDLESS of whether
that resume goes on to succeed or fail — this is true even for a
frame that isn’t itself an error (e.g. a “system”/init frame), and
this first echo can arrive before the independently-scheduled
stderr reader has had a chance to report “No conversation found”
and poison it. So sid == attempted_sid alone is NOT proof of
genuine progress — it’s ambiguous until EITHER a different sid
appears (the CLI gave up and started fresh — unambiguous) OR a
successful terminal result confirms the WHOLE turn actually
completed (also unambiguous). Only those two cases resolve
tracking; a same-sid echo on any other frame type is left
untouched, giving ResumeUnreachable a real chance to promote the
retry first if this turns out to be the doomed case.
MessageAppendedToRetryBatch
The drain appended another message to this generation’s retry batch before it was known to be doomed (or after it was confirmed doomed but before the process actually exited).
ResumeUnreachable
stderr reader saw “No conversation found” for this exact sid.
ErrorResultLine
stdout reader saw a terminal result/is_error:true line.
ProcessExited
The process actually exited.
StopRequested
stop_process was called while this generation was live.
Trait Implementations§
Source§impl Clone for ResumeEvent
impl Clone for ResumeEvent
Source§fn clone(&self) -> ResumeEvent
fn clone(&self) -> ResumeEvent
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ResumeEvent
impl RefUnwindSafe for ResumeEvent
impl Send for ResumeEvent
impl Sync for ResumeEvent
impl Unpin for ResumeEvent
impl UnsafeUnpin for ResumeEvent
impl UnwindSafe for ResumeEvent
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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