Skip to main content

Session

Struct Session 

Source
pub struct Session {
Show 27 fields pub input: String, pub output_lines: Vec<String>, pub workflow_tx: UnboundedSender<TuiMessage>, pub workflow_state: WorkflowState, pub config_toml: Option<String>, pub secrets: Option<HashMap<String, String>>, pub build_info: Option<BuildInfo>, pub resume_info: Option<ResumeInfo>, pub backup_resume_info: Option<ResumeInfo>, pub todo_lines: Vec<String>, pub cancel_token: CancellationToken, pub pending_command: Option<String>, pub handoff_pending: bool, pub pending_tool_lines: Vec<(String, usize, Option<String>)>, pub current_context_tokens: usize, pub auto_handoff: AutoHandoffConfig, pub mcp_servers: Vec<McpServerInfo>, pub should_quit: bool, pub auto_scroll: bool, pub agent_name: String, pub token_store: Option<Arc<dyn TokenStore>>, pub project_id: Option<String>, pub project_name: Option<String>, pub session_id: Option<String>, pub session_name: Option<String>, pub home_dir: Option<PathBuf>, pub workflow_permit: Option<OwnedSemaphorePermit>,
}
Expand description

Core session state for the Trustee agent.

Holds all state that is independent of the presentation layer (TUI, API, Web). Frontend crates compose this struct and add their own UI-specific fields.

Fields§

§input: String

Input buffer for user commands

§output_lines: Vec<String>

Output log lines

§workflow_tx: UnboundedSender<TuiMessage>

Sender for messages from async workflows (clone and pass to workflow runners)

§workflow_state: WorkflowState

Current workflow lifecycle state

§config_toml: Option<String>

Configuration TOML for ABK workflows

§secrets: Option<HashMap<String, String>>

Secrets for ABK workflows

§build_info: Option<BuildInfo>

Build info for ABK workflows

§resume_info: Option<ResumeInfo>

Resume info from the last completed task for session continuity

§backup_resume_info: Option<ResumeInfo>

Saved resume_info before execute_command consumes it; restored if task is cancelled before producing a real checkpoint (mistake-ENTER recovery).

§todo_lines: Vec<String>

Latest todo list from LLM todowrite tool

§cancel_token: CancellationToken

Cancellation token for aborting the current workflow

§pending_command: Option<String>

Command buffered by user during cancellation wind-down.

§handoff_pending: bool

Whether a session handoff (Ctrl+H) should fire once the current workflow cancels.

§pending_tool_lines: Vec<(String, usize, Option<String>)>

In-flight spinner entries: (tool_name, output_lines_index, hint).

§current_context_tokens: usize

Current context token count (updated from ApiCallStarted events).

§auto_handoff: AutoHandoffConfig

Auto-handoff configuration parsed from [tui.auto_handoff].

§mcp_servers: Vec<McpServerInfo>

MCP server statuses received from agent init

§should_quit: bool

Whether the session should quit

§auto_scroll: bool

Whether auto-scroll is enabled (follows new output)

§agent_name: String

Agent name for checkpoint/token paths (replaces ABK_AGENT_NAME env var). Defaults to “trustee”. Set from config at startup.

§token_store: Option<Arc<dyn TokenStore>>

Per-session token store (None = FileTokenStore fallback). When set, MCP credential flows use this instead of file-based storage.

§project_id: Option<String>

Storage partition key (replaces path hash). None = hash(working_dir)

§project_name: Option<String>

Human-readable project name. None = directory name

§session_id: Option<String>

Storage directory name (replaces timestamp slug). None = auto-generate

§session_name: Option<String>

Human-readable session name. None = no description

§home_dir: Option<PathBuf>

Per-user home directory for checkpoint storage. None = default ~/.{agent_name}/ Set to ~/.trustee/users/{user_hash}/ for per-user isolation in web mode.

§workflow_permit: Option<OwnedSemaphorePermit>

Concurrency permit — held while a workflow is running. When the workflow completes (state → Idle), this is dropped, releasing the permit back to the global semaphore. None when no workflow is running or when concurrency limiting is disabled.

Implementations§

Source§

impl Session

Source

pub fn new() -> (Self, UnboundedReceiver<TuiMessage>)

Create a new Session with default state and a fresh message channel.

Returns (Session, Receiver) so the caller can own the receiver without locking the session (prevents deadlock in async drain loops).

Source

pub fn parse_auto_handoff_config(&mut self)

Parse auto-handoff configuration from the stored config TOML.

Source

pub fn handle_workflow_message(&mut self, msg: TuiMessage)

Handle messages from async workflows.

This processes all workflow lifecycle events, output updates, and state transitions. Returns true if the caller should check for pending commands/handoffs after.

Source

pub fn execute_command(&mut self)

Execute the current command in the input buffer.

Spawns an async ABK workflow task, clears the input buffer, and sets workflow_state to Running.

Source

pub fn trigger_handoff(&mut self, hint: String)

Trigger a session handoff.

Runs a single LLM call using the current session’s resume_info to generate a briefing. On completion, sends TuiMessage::HandoffReady(briefing).

Trait Implementations§

Source§

impl Default for Session

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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