pub struct ExecContext {
pub backend: Arc<dyn KernelBackend>,
pub scope: Scope,
pub cwd: PathBuf,
pub prev_cwd: Option<PathBuf>,
pub stdin: Option<String>,
pub stdin_data: Option<Value>,
pub tool_schemas: Vec<ToolSchema>,
pub tools: Option<Arc<ToolRegistry>>,
pub job_manager: Option<Arc<JobManager>>,
pub pipeline_position: PipelinePosition,
}Expand description
Execution context passed to tools.
Provides access to the backend (for file operations and tool dispatch), scope, and other kernel state.
Fields§
§backend: Arc<dyn KernelBackend>Kernel backend for I/O operations.
This is the preferred way to access filesystem operations.
Use backend.read(), backend.write(), etc.
scope: ScopeVariable scope.
cwd: PathBufCurrent working directory (VFS path).
prev_cwd: Option<PathBuf>Previous working directory (for cd -).
stdin: Option<String>Standard input for the tool (from pipeline).
stdin_data: Option<Value>Structured data from pipeline (pre-parsed JSON from previous command). Tools can check this before parsing stdin to avoid redundant JSON parsing.
tool_schemas: Vec<ToolSchema>Tool schemas for help command.
tools: Option<Arc<ToolRegistry>>Tool registry reference (for tools that need to inspect available tools).
job_manager: Option<Arc<JobManager>>Job manager for background jobs (optional).
pipeline_position: PipelinePositionPosition of this command within a pipeline (for stdio decisions).
Implementations§
Source§impl ExecContext
impl ExecContext
Sourcepub fn new(vfs: Arc<VfsRouter>) -> Self
pub fn new(vfs: Arc<VfsRouter>) -> Self
Create a new execution context with a VFS (uses LocalBackend without tools).
This constructor is for backward compatibility and tests that don’t need tool dispatch.
For full tool support, use with_vfs_and_tools.
Sourcepub fn with_vfs_and_tools(vfs: Arc<VfsRouter>, tools: Arc<ToolRegistry>) -> Self
pub fn with_vfs_and_tools(vfs: Arc<VfsRouter>, tools: Arc<ToolRegistry>) -> Self
Create a new execution context with VFS and tool registry.
This is the preferred constructor for full kaish operation where tools need to be dispatched through the backend.
Sourcepub fn with_backend(backend: Arc<dyn KernelBackend>) -> Self
pub fn with_backend(backend: Arc<dyn KernelBackend>) -> Self
Create a new execution context with a custom backend.
Sourcepub fn with_vfs_tools_and_scope(
vfs: Arc<VfsRouter>,
tools: Arc<ToolRegistry>,
scope: Scope,
) -> Self
pub fn with_vfs_tools_and_scope( vfs: Arc<VfsRouter>, tools: Arc<ToolRegistry>, scope: Scope, ) -> Self
Create a context with VFS, tools, and a specific scope.
Sourcepub fn with_scope(vfs: Arc<VfsRouter>, scope: Scope) -> Self
pub fn with_scope(vfs: Arc<VfsRouter>, scope: Scope) -> Self
Create a context with a specific scope (uses LocalBackend without tools).
For tests that don’t need tool dispatch. For full tool support,
use with_vfs_tools_and_scope.
Sourcepub fn with_backend_and_scope(
backend: Arc<dyn KernelBackend>,
scope: Scope,
) -> Self
pub fn with_backend_and_scope( backend: Arc<dyn KernelBackend>, scope: Scope, ) -> Self
Create a context with a custom backend and scope.
Sourcepub fn set_tool_schemas(&mut self, schemas: Vec<ToolSchema>)
pub fn set_tool_schemas(&mut self, schemas: Vec<ToolSchema>)
Set the available tool schemas (for help command).
Sourcepub fn set_tools(&mut self, tools: Arc<ToolRegistry>)
pub fn set_tools(&mut self, tools: Arc<ToolRegistry>)
Set the tool registry reference.
Sourcepub fn set_job_manager(&mut self, manager: Arc<JobManager>)
pub fn set_job_manager(&mut self, manager: Arc<JobManager>)
Set the job manager for background job tracking.
Sourcepub fn take_stdin(&mut self) -> Option<String>
pub fn take_stdin(&mut self) -> Option<String>
Get stdin, consuming it.
Sourcepub fn set_stdin_with_data(&mut self, text: String, data: Option<Value>)
pub fn set_stdin_with_data(&mut self, text: String, data: Option<Value>)
Set both text stdin and structured data.
Use this when passing output through a pipeline where the previous command produced structured data (e.g., JSON from MCP tools).
Sourcepub fn take_stdin_data(&mut self) -> Option<Value>
pub fn take_stdin_data(&mut self) -> Option<Value>
Take structured data if available, consuming it.
Tools can use this to avoid re-parsing JSON that was already parsed by a previous command in the pipeline.
Sourcepub fn resolve_path(&self, path: &str) -> PathBuf
pub fn resolve_path(&self, path: &str) -> PathBuf
Resolve a path relative to cwd.
Sourcepub fn set_cwd(&mut self, path: PathBuf)
pub fn set_cwd(&mut self, path: PathBuf)
Change the current working directory.
Saves the old directory for cd - support.
Sourcepub fn get_prev_cwd(&self) -> Option<&PathBuf>
pub fn get_prev_cwd(&self) -> Option<&PathBuf>
Get the previous working directory (for cd -).