pub struct PostToolUseHookAdapter { /* private fields */ }Expand description
Adapter that implements PostToolExecHook for a single UserHookSpec
whose event is post_tool_use.
Lifecycle per after_exec call:
- Skip when the matcher rejects the (tool_name, arguments) pair.
- Build a
HookPayloadfrom the tool call + result. - Run the executor with the spec’s
timeout_ms. - On
Allow, do nothing. - On
Mutate { patch }, apply the patch to theToolResult:patch.resultoverwritesresult.resultpatch.erroroverwritesresult.errorpatch.additional_contextis appended as ahook_contextfield onresult.resultso the model sees the hook’s commentary.
- On
Block, log a warning —post_tool_usecannot block by spec. - On
Error, apply the spec’son_errorpolicy.Blockpolicy overwritesresult.error;Warn/Allowjust log.
Implementations§
Source§impl PostToolUseHookAdapter
impl PostToolUseHookAdapter
pub fn new(spec: UserHookSpec, executor: Arc<dyn HookExecutor>) -> Self
pub fn with_index( spec: UserHookSpec, executor: Arc<dyn HookExecutor>, index: usize, ) -> Self
Trait Implementations§
Source§impl PostToolExecHook for PostToolUseHookAdapter
impl PostToolExecHook for PostToolUseHookAdapter
Source§fn after_exec<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
tool_call: &'life1 ToolCall,
_tool_def: &'life2 ToolDefinition,
result: &'life3 mut ToolResult,
context: &'life4 ToolContext,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn after_exec<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
tool_call: &'life1 ToolCall,
_tool_def: &'life2 ToolDefinition,
result: &'life3 mut ToolResult,
context: &'life4 ToolContext,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Called after a tool returns its result, before ActAtom emits events.
Source§fn priority(&self) -> PostToolExecHookPriority
fn priority(&self) -> PostToolExecHookPriority
Ordering within the capability-contributed hook phase.
Auto Trait Implementations§
impl !RefUnwindSafe for PostToolUseHookAdapter
impl !UnwindSafe for PostToolUseHookAdapter
impl Freeze for PostToolUseHookAdapter
impl Send for PostToolUseHookAdapter
impl Sync for PostToolUseHookAdapter
impl Unpin for PostToolUseHookAdapter
impl UnsafeUnpin for PostToolUseHookAdapter
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 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>
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 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>
Wrap the input message
T in a tonic::Request