pub struct HookManager { /* private fields */ }Expand description
Hook 管理器:管理四级 hook(内置、用户级、项目级、session 级)
执行顺序:内置 → 用户级 → 项目级 → Session 级,链式执行。
前者的输出会更新到 context 中,影响后者的输入。任何 stop 或 skip 立即中止整条链。
Implementations§
Source§impl HookManager
impl HookManager
Sourcepub fn register_builtin(
&mut self,
event: HookEvent,
name: impl Into<String>,
handler: impl Fn(&HookContext) -> Option<HookResult> + Send + Sync + 'static,
)
pub fn register_builtin( &mut self, event: HookEvent, name: impl Into<String>, handler: impl Fn(&HookContext) -> Option<HookResult> + Send + Sync + 'static, )
注册内置 hook(程序初始化时调用)
Sourcepub fn register_session_hook(&mut self, event: HookEvent, def: HookDef)
pub fn register_session_hook(&mut self, event: HookEvent, def: HookDef)
注册 session 级 hook(由 register_hook 工具调用)
Sourcepub fn session_hooks_snapshot(&self) -> Vec<SessionHookPersist>
pub fn session_hooks_snapshot(&self) -> Vec<SessionHookPersist>
获取所有 session 级 hook 的可序列化快照(用于 session 持久化) 只保存 Shell 和 Llm 类型(Builtin 不可序列化)
Sourcepub fn clear_session_hooks(&mut self)
pub fn clear_session_hooks(&mut self)
清除所有 session 级 hook(session 切换时使用)
Sourcepub fn restore_session_hooks(&mut self, hooks: &[SessionHookPersist])
pub fn restore_session_hooks(&mut self, hooks: &[SessionHookPersist])
从持久化快照恢复 session 级 hook
Sourcepub fn register_session_hook_kind(&mut self, event: HookEvent, kind: HookKind)
pub fn register_session_hook_kind(&mut self, event: HookEvent, kind: HookKind)
注册 session 级 hook(直接传入 HookKind)
Sourcepub fn set_provider(&mut self, provider: Arc<Mutex<ModelProvider>>)
pub fn set_provider(&mut self, provider: Arc<Mutex<ModelProvider>>)
注入 LLM provider(用于 LLM hook 执行)
Sourcepub fn remove_session_hook(&mut self, event: HookEvent, index: usize) -> bool
pub fn remove_session_hook(&mut self, event: HookEvent, index: usize) -> bool
移除 session 级 hook(按事件和索引)
Sourcepub fn list_hooks(&self) -> Vec<HookEntry>
pub fn list_hooks(&self) -> Vec<HookEntry>
列出所有 hook(含来源标记和摘要信息)
Sourcepub fn has_hooks_for(&self, event: HookEvent) -> bool
pub fn has_hooks_for(&self, event: HookEvent) -> bool
热重载用户级和项目级 hook 配置
检查某个事件是否有任何 hook 注册(内置/用户级/项目级/session 级) 用于调用方在构建 HookContext 之前短路,避免不必要的 clone 和内存分配
Sourcepub fn execute_fire_and_forget(
manager: Arc<Mutex<HookManager>>,
event: HookEvent,
context: HookContext,
disabled_hooks: Vec<String>,
)
pub fn execute_fire_and_forget( manager: Arc<Mutex<HookManager>>, event: HookEvent, context: HookContext, disabled_hooks: Vec<String>, )
Fire-and-forget 执行:在后台线程中执行 hook,不阻塞调用方 适用于 PostSendMessage、SessionEnd 等不需要返回值的 hook
Sourcepub fn execute(
&self,
event: HookEvent,
context: HookContext,
disabled_hooks: &[String],
) -> Option<HookResult>
pub fn execute( &self, event: HookEvent, context: HookContext, disabled_hooks: &[String], ) -> Option<HookResult>
链式执行所有 hook(内置→用户→项目→session)
返回 Some(HookResult) 如果有任何修改或 stop/skip,否则 None。
链式执行中,前一个 hook 的输出会更新到 context 中,成为下一个 hook 的输入。
disabled_hooks 为被禁用的 hook 标识列表(来自 AgentConfig.disabled_hooks)。
注意:调用方应先用 has_hooks_for() 检查,再构建 HookContext 并调用此方法,
避免在没有 hook 注册时进行不必要的内存分配。
Trait Implementations§
Source§impl Clone for HookManager
impl Clone for HookManager
Source§impl Debug for HookManager
impl Debug for HookManager
Source§impl Default for HookManager
impl Default for HookManager
Source§fn default() -> HookManager
fn default() -> HookManager
Auto Trait Implementations§
impl !Freeze for HookManager
impl !RefUnwindSafe for HookManager
impl Send for HookManager
impl Sync for HookManager
impl Unpin for HookManager
impl UnsafeUnpin for HookManager
impl !UnwindSafe for HookManager
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.