Skip to main content

TurnContext

Struct TurnContext 

Source
pub struct TurnContext {
    pub messages: Arc<Vec<Message>>,
    pub step_events_tx: Option<UnboundedSender<AgentEvent>>,
    pub tool_specs: Vec<ToolSpec>,
    pub streaming: bool,
    pub permission_hook: Option<Arc<dyn PermissionHook>>,
    pub exploring_plan_mode: Arc<AtomicBool>,
    pub permission_mode: PermissionMode,
    pub mailbox: Option<WorkerMailbox>,
    pub turn: u32,
    pub prompt_segments: Option<PromptSegments>,
    pub wall_timeout_secs: u64,
}
Expand description

Everything the Kernel needs to execute one turn.

Prepared by the Wrapper (AgentRuntime). The Kernel does not know where these messages came from — could be fresh, compacted, or resumed.

§Ownership

messages is an owned copy of the wrapper’s transcript. The kernel takes ownership and may mutate it freely during the ReAct loop (trimming old tool results, intra-turn compaction). The wrapper retains the canonical transcript and incorporates only the new messages from TurnOutcome::new_messages after the turn completes.

A full clone per turn is intentional: RunCore mutates the list in-place, so sharing via Arc would not eliminate the allocation. The clone is bounded by the max_transcript_chars trim that runs before each turn.

Fields§

§messages: Arc<Vec<Message>>

Shared reference to the wrapper’s transcript for this turn.

The kernel may mutate this list in-place via Arc::make_mut; the wrapper’s canonical transcript is unaffected until the kernel drops its reference.

§step_events_tx: Option<UnboundedSender<AgentEvent>>

Channel to send agent events to the caller (runtime or test harness).

The kernel passes this channel directly to RunCore (Goal 219 Commit 1), so callers receive the same AgentEvent stream the kernel sees — no internal conversion.

§tool_specs: Vec<ToolSpec>

Tool specifications to advertise to the LLM.

§streaming: bool

Whether to stream LLM responses token-by-token.

§permission_hook: Option<Arc<dyn PermissionHook>>

Optional permission hook for gating tool calls.

§exploring_plan_mode: Arc<AtomicBool>

Goal-165: shared flag that enables agent-driven read-only plan mode. When true, write tools are blocked until exit_plan_mode is called.

§permission_mode: PermissionMode

Goal-190: default permission mode for tools not covered by explicit config lists. Mirrors PermissionsConfig.mode for quick access.

§mailbox: Option<WorkerMailbox>

Optional mailbox for mid-run message injection from a coordinator.

When set, the kernel drains this mailbox at the start of every step and appends any pending messages as user turns. This powers the send_message tool’s bidirectional coordinator ↔ worker flow.

§turn: u32

Turn index (0-based), used to scope crate::tools::AuditMeta keys so that tool-call-id collisions across turns cannot cause audit metadata to be overwritten or lost.

§prompt_segments: Option<PromptSegments>

Goal-328: structured prompt segments from assemble_system_prompt, forwarded to RunCore so it can size the static breakdown buckets. None when the caller did not provide one (legacy channels, tests).

§wall_timeout_secs: u64

Goal 345: wall-clock timeout in seconds. When > 0, the step loop checks elapsed time and terminates cleanly with FinishReason::WallClockExceeded. Default 0 = unset.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoMaybeUndefined<T> for T

Source§

fn into_maybe_undefined(self) -> MaybeUndefined<T>

Converts this value into a three-state builder argument.
Source§

impl<T> IntoOption<T> for T

Source§

fn into_option(self) -> Option<T>

Converts this value into an optional builder argument.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more