pub struct TurnContext {
pub messages: Vec<Message>,
pub step_events_tx: Option<UnboundedSender<AgentEvent>>,
pub plan_confirmed: bool,
pub plan_buffer: Option<Vec<ToolCall>>,
pub tool_specs: Vec<ToolSpec>,
pub streaming: bool,
pub permission_hook: Option<Arc<dyn PermissionHook>>,
pub planning_mode: PlanningMode,
pub exploring_plan_mode: Arc<AtomicBool>,
pub permission_mode: PermissionMode,
pub mailbox: Option<WorkerMailbox>,
}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.
Fields§
§messages: Vec<Message>The full message list to send to the LLM (system + history + new user msg).
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.
plan_confirmed: boolWhether the user confirmed a pending plan.
plan_buffer: Option<Vec<ToolCall>>Buffered tool calls from a proposed plan (when user confirms).
tool_specs: Vec<ToolSpec>Tool specifications to advertise to the LLM.
streaming: boolWhether to stream LLM responses token-by-token.
permission_hook: Option<Arc<dyn PermissionHook>>Optional permission hook for gating tool calls.
planning_mode: PlanningModePlanning mode (execute immediately vs buffer for confirmation).
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: PermissionModeGoal-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.
Auto Trait Implementations§
impl !RefUnwindSafe for TurnContext
impl !UnwindSafe for TurnContext
impl Freeze for TurnContext
impl Send for TurnContext
impl Sync for TurnContext
impl Unpin for TurnContext
impl UnsafeUnpin for TurnContext
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<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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