Skip to main content

ToolContext

Struct ToolContext 

Source
pub struct ToolContext {
    pub working_dir: PathBuf,
    pub sandbox_enabled: bool,
    pub io: Arc<dyn AgentIO>,
    pub compact_mode: bool,
    pub lsp_client: Arc<Mutex<Option<LspClient>>>,
    pub mcp_client: Option<Arc<Mutex<McpClient>>>,
    pub nesting_depth: u32,
    pub llm: Arc<dyn LlmProvider>,
    pub tools: Arc<ToolRegistry>,
    pub permissions: Vec<PermissionRule>,
    pub formatters: HashMap<String, String>,
}

Fields§

§working_dir: PathBuf§sandbox_enabled: bool

Whether to route tool execution through the sandbox process. Currently set but not yet acted upon — sandbox integration is future work.

§io: Arc<dyn AgentIO>

I/O channel used by the agent for status output and confirmation prompts. In terminal mode this is Arc<TerminalIO>; in tests it is Arc<NullIO>. A future HTTP mode will pass Arc<HttpIO> here without touching the agent.

§compact_mode: bool

When true, tool output is capped to 50 lines to save tokens. Set via --compact CLI flag or /compact REPL command.

§lsp_client: Arc<Mutex<Option<LspClient>>>

Lazily-started LSP client shared across all LSP tools. Wrapped in Arc<Mutex<Option<...>>> so multiple tools can share it. The first LSP tool call to run will start and initialize the server. None if LSP is disabled in config or the server failed to start.

§mcp_client: Option<Arc<Mutex<McpClient>>>

Optional MCP client connection, shared across MCP-related tools. None when no MCP server is connected. Wrapped in Option<Arc<Mutex<...>>> so it can be absent and shared.

§nesting_depth: u32

How many levels deep the current agent is in a spawn_task nesting chain. spawn_task increments this for child agents; at depth >= 3 it refuses to spawn further so the stack cannot grow unboundedly. The top-level REPL agent starts at depth 0.

§llm: Arc<dyn LlmProvider>

The active LLM provider for this agent context. spawn_task needs access to the provider to give it to child agents. We store it here as Arc<dyn LlmProvider> so it can be cloned cheaply.

§tools: Arc<ToolRegistry>

The full tool registry, shared via Arc so spawn_task can give child agents the same set of tools without re-constructing the registry.

§permissions: Vec<PermissionRule>

Permission rules from config — used by the agent loop to check whether a tool call needs explicit user confirmation.

§formatters: HashMap<String, String>

Code formatters keyed by file extension. After file_write/file_edit succeeds, the tool checks this map and runs the formatter if one matches.

Trait Implementations§

Source§

impl Clone for ToolContext

Source§

fn clone(&self) -> ToolContext

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. 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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
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: 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: 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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