pub struct MemoryToolExecutor { /* private fields */ }Expand description
Executes memory_search and memory_save tool calls on behalf of the agent.
Implementations§
Source§impl MemoryToolExecutor
impl MemoryToolExecutor
Sourcepub fn new(memory: Arc<SemanticMemory>, conversation_id: ConversationId) -> Self
pub fn new(memory: Arc<SemanticMemory>, conversation_id: ConversationId) -> Self
Create with default validator and persistent (non-ephemeral) semantics.
Sourcepub fn with_validator(
memory: Arc<SemanticMemory>,
conversation_id: ConversationId,
validator: MemoryWriteValidator,
) -> Self
pub fn with_validator( memory: Arc<SemanticMemory>, conversation_id: ConversationId, validator: MemoryWriteValidator, ) -> Self
Create with a custom validator (used when security config is loaded).
Sourcepub fn ephemeral(self) -> Self
pub fn ephemeral(self) -> Self
Mark this executor as ephemeral (bare mode).
When set, memory_save reports that the content is session-only and will not be
available after the session ends.
Sourcepub fn with_consent_gate(
self,
trust_slot: MemoryConsentTrustSlot,
confirm_threshold: ContentTrustLevel,
) -> Self
pub fn with_consent_gate( self, trust_slot: MemoryConsentTrustSlot, confirm_threshold: ContentTrustLevel, ) -> Self
Attach the write-time memory-consent gate (issue #6490, MemGhost).
trust_slot must be the same MemoryConsentTrustSlot the owning Agent ratchets up
in sanitize_tool_output — see AgentBuilder::with_memory_consent_trust_slot.
confirm_threshold is the minimum trust tier (inclusive) that requires
Channel::confirm before memory_save persists (memory.consent_gate.confirm_threshold
in config).
Sourcepub fn with_audit(self, logger: Arc<AuditLogger>) -> Self
pub fn with_audit(self, logger: Arc<AuditLogger>) -> Self
Attach an audit sink so every memory_save write is recorded with source attribution
(issue #6490, MemGhost part D).
Sourcepub fn with_audit_all(self, audit_all: bool) -> Self
pub fn with_audit_all(self, audit_all: bool) -> Self
Set whether memory_save writes are audited, mirroring memory.consent_gate.audit_all
(issue #6559). Pass the config value here regardless of consent_gate.enabled — audit
attribution and the interactive/disclosure gate are independent switches, matching
Agent::persist_message_inner’s background-write-path gating (store.rs).
Trait Implementations§
Source§impl ToolExecutor for MemoryToolExecutor
impl ToolExecutor for MemoryToolExecutor
Source§async fn execute_tool_call_confirmed(
&self,
call: &ToolCall,
) -> Result<Option<ToolOutput>, ToolError>
async fn execute_tool_call_confirmed( &self, call: &ToolCall, ) -> Result<Option<ToolOutput>, ToolError>
Execute bypassing the consent-gate confirmation check (called after the user approves).
memory_search has no confirmation policy of its own, so it delegates to
ToolExecutor::execute_tool_call unchanged.
Source§fn tool_definitions(&self) -> Vec<ToolDef>
fn tool_definitions(&self) -> Vec<ToolDef>
Source§async fn execute(
&self,
_response: &str,
) -> Result<Option<ToolOutput>, ToolError>
async fn execute( &self, _response: &str, ) -> Result<Option<ToolOutput>, ToolError>
response for fenced tool blocks and execute them. Read moreSource§async fn execute_tool_call(
&self,
call: &ToolCall,
) -> Result<Option<ToolOutput>, ToolError>
async fn execute_tool_call( &self, call: &ToolCall, ) -> Result<Option<ToolOutput>, ToolError>
Source§fn requires_confirmation(&self, call: &ToolCall) -> bool
fn requires_confirmation(&self, call: &ToolCall) -> bool
Source§fn checkpoint_undo(&self, _n: usize) -> CheckpointActionResult
fn checkpoint_undo(&self, _n: usize) -> CheckpointActionResult
n checkpointed write commands. Read moreSource§fn checkpoint_redo(&self) -> CheckpointActionResult
fn checkpoint_redo(&self) -> CheckpointActionResult
Source§fn checkpoint_list(&self) -> CheckpointListResult
fn checkpoint_list(&self) -> CheckpointListResult
Source§fn is_tool_speculatable(&self, _tool_id: &str) -> bool
fn is_tool_speculatable(&self, _tool_id: &str) -> bool
Source§fn execute_confirmed(
&self,
response: &str,
) -> impl Future<Output = Result<Option<ToolOutput>, ToolError>> + Send
fn execute_confirmed( &self, response: &str, ) -> impl Future<Output = Result<Option<ToolOutput>, ToolError>> + Send
Source§fn set_skill_env(&self, _env: Option<HashMap<String, String>>)
fn set_skill_env(&self, _env: Option<HashMap<String, String>>)
Source§fn set_effective_trust(&self, _level: SkillTrustLevel)
fn set_effective_trust(&self, _level: SkillTrustLevel)
Auto Trait Implementations§
impl !RefUnwindSafe for MemoryToolExecutor
impl !UnwindSafe for MemoryToolExecutor
impl Freeze for MemoryToolExecutor
impl Send for MemoryToolExecutor
impl Sync for MemoryToolExecutor
impl Unpin for MemoryToolExecutor
impl UnsafeUnpin for MemoryToolExecutor
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> ErasedToolExecutor for Twhere
T: ToolExecutor,
impl<T> ErasedToolExecutor for Twhere
T: ToolExecutor,
fn execute_erased<'a>( &'a self, response: &'a str, ) -> Pin<Box<dyn Future<Output = Result<Option<ToolOutput>, ToolError>> + Send + 'a>>
fn execute_confirmed_erased<'a>( &'a self, response: &'a str, ) -> Pin<Box<dyn Future<Output = Result<Option<ToolOutput>, ToolError>> + Send + 'a>>
fn tool_definitions_erased(&self) -> Vec<ToolDef>
fn execute_tool_call_erased<'a>( &'a self, call: &'a ToolCall, ) -> Pin<Box<dyn Future<Output = Result<Option<ToolOutput>, ToolError>> + Send + 'a>>
Source§fn execute_tool_call_confirmed_erased<'a>(
&'a self,
call: &'a ToolCall,
) -> Pin<Box<dyn Future<Output = Result<Option<ToolOutput>, ToolError>> + Send + 'a>>
fn execute_tool_call_confirmed_erased<'a>( &'a self, call: &'a ToolCall, ) -> Pin<Box<dyn Future<Output = Result<Option<ToolOutput>, ToolError>> + Send + 'a>>
ToolExecutor::execute_tool_call_confirmed reach it through the blanket impl below.
Other implementors should fall back to
execute_tool_call_erased (normal
enforcement path) unless they need to replicate confirmed-path-specific behavior
(e.g. a fallback that only applies on the unconfirmed path must be mirrored
explicitly, not assumed). See
erased_tool_executor_no_inner_defaults!
for leaf executors with no wrapped inner.Source§fn set_skill_env(&self, env: Option<HashMap<String, String>>)
fn set_skill_env(&self, env: Option<HashMap<String, String>>)
Source§fn set_effective_trust(&self, level: SkillTrustLevel)
fn set_effective_trust(&self, level: SkillTrustLevel)
Source§fn checkpoint_undo_erased(&self, n: usize) -> CheckpointActionResult
fn checkpoint_undo_erased(&self, n: usize) -> CheckpointActionResult
n checkpointed write commands. Read moreSource§fn checkpoint_redo_erased(&self) -> CheckpointActionResult
fn checkpoint_redo_erased(&self) -> CheckpointActionResult
Source§fn checkpoint_list_erased(&self) -> CheckpointListResult
fn checkpoint_list_erased(&self) -> CheckpointListResult
Source§fn is_tool_retryable_erased(&self, tool_id: &str) -> bool
fn is_tool_retryable_erased(&self, tool_id: &str) -> bool
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request