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: boolWhether 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: boolWhen 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: u32How 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
impl Clone for ToolContext
Source§fn clone(&self) -> ToolContext
fn clone(&self) -> ToolContext
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ToolContext
impl !RefUnwindSafe for ToolContext
impl Send for ToolContext
impl Sync for ToolContext
impl Unpin for ToolContext
impl UnsafeUnpin for ToolContext
impl !UnwindSafe for ToolContext
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,
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