pub struct LifecycleHookEngine { /* private fields */ }Implementations§
Source§impl LifecycleHookEngine
impl LifecycleHookEngine
Sourcepub fn new_with_session_gated(
workspace: PathBuf,
config: &HooksConfig,
trigger: SessionStartTrigger,
session_id: impl Into<String>,
workspace_gated: bool,
) -> Result<Option<Self>>
pub fn new_with_session_gated( workspace: PathBuf, config: &HooksConfig, trigger: SessionStartTrigger, session_id: impl Into<String>, workspace_gated: bool, ) -> Result<Option<Self>>
Construct the engine with the workspace approval gate.
When workspace_gated is true, the workspace configuration (a
workspace-root vtcode.toml, the workspace .vtcode/ fallback, a
project profile, or a workspace-sourced agent spec with hooks) contains
lifecycle hook commands. No lifecycle command then executes until the
user explicitly approves the exact command set this engine will run,
bound to its digest. Callers must pass true whenever
VTCodeConfig.workspace_lifecycle_hooks is non-empty or the active
primary agent contributes workspace-controlled hooks.
pub async fn run_session_start(&self) -> Result<SessionStartHookOutcome>
pub async fn run_session_end( &self, turn_id: &str, reason: SessionEndReason, ) -> Result<Vec<HookMessage>>
pub async fn run_subagent_start( &self, parent_session_id: &str, child_thread_id: &str, agent_name: &str, display_label: &str, background: bool, status: &str, transcript_path: Option<&Path>, ) -> Result<Vec<HookMessage>>
pub async fn run_subagent_stop( &self, parent_session_id: &str, child_thread_id: &str, agent_name: &str, display_label: &str, background: bool, status: &str, transcript_path: Option<&Path>, ) -> Result<Vec<HookMessage>>
Sourcepub async fn run_user_prompt_submit(
&self,
turn_id: &str,
prompt: &str,
) -> Result<UserPromptHookOutcome>
pub async fn run_user_prompt_submit( &self, turn_id: &str, prompt: &str, ) -> Result<UserPromptHookOutcome>
Execute all UserPromptSubmit hooks that match the prompt content.
Sourcepub async fn run_permission_request(
&self,
tool_name: &str,
tool_input: Option<&Value>,
permission_request: &PermissionRequest,
permission_suggestions: &[Value],
) -> Result<PermissionRequestHookOutcome>
pub async fn run_permission_request( &self, tool_name: &str, tool_input: Option<&Value>, permission_request: &PermissionRequest, permission_suggestions: &[Value], ) -> Result<PermissionRequestHookOutcome>
Execute all PermissionRequest hooks that match the tool name.
Sourcepub async fn run_pre_tool_use(
&self,
tool_name: &str,
tool_input: Option<&Value>,
tool_call_id: Option<&str>,
) -> Result<PreToolHookOutcome>
pub async fn run_pre_tool_use( &self, tool_name: &str, tool_input: Option<&Value>, tool_call_id: Option<&str>, ) -> Result<PreToolHookOutcome>
Execute all PreToolUse hooks that match the tool name.
Hooks run in configuration order. When a hook returns
hookSpecificOutput.updatedInput, later hooks receive the rewritten
tool input in their payload, so policy hooks placed after rewrite
hooks observe the final command. The first Allow/Deny decision still
short-circuits the remaining hooks.
Sourcepub async fn run_post_tool_use(
&self,
tool_name: &str,
tool_input: Option<&Value>,
tool_output: &Value,
tool_call_id: Option<&str>,
) -> Result<PostToolHookOutcome>
pub async fn run_post_tool_use( &self, tool_name: &str, tool_input: Option<&Value>, tool_output: &Value, tool_call_id: Option<&str>, ) -> Result<PostToolHookOutcome>
Execute all PostToolUse hooks that match the tool name.
Sourcepub async fn run_pre_compact(
&self,
trigger: CompactionTrigger,
mode: CompactionMode,
original_message_count: usize,
compacted_message_count: usize,
history_artifact_path: Option<&str>,
) -> Result<PreCompactHookOutcome>
pub async fn run_pre_compact( &self, trigger: CompactionTrigger, mode: CompactionMode, original_message_count: usize, compacted_message_count: usize, history_artifact_path: Option<&str>, ) -> Result<PreCompactHookOutcome>
Execute all PreCompact hooks that match the compaction trigger.
Sourcepub async fn run_notification(
&self,
notification_type: NotificationHookType,
title: &str,
message: &str,
) -> Result<Vec<HookMessage>>
pub async fn run_notification( &self, notification_type: NotificationHookType, title: &str, message: &str, ) -> Result<Vec<HookMessage>>
Execute all Notification hooks that match the notification type.
Sourcepub async fn run_stop(
&self,
last_assistant_message: &str,
stop_hook_active: bool,
) -> Result<StopHookOutcome>
pub async fn run_stop( &self, last_assistant_message: &str, stop_hook_active: bool, ) -> Result<StopHookOutcome>
Execute all Stop hooks.
Sourcepub async fn update_transcript_path(&self, path: Option<PathBuf>)
pub async fn update_transcript_path(&self, path: Option<PathBuf>)
Update the transcript path that hooks can access via the VT_TRANSCRIPT_PATH env var.
Sourcepub async fn transcript_path(&self) -> Option<PathBuf>
pub async fn transcript_path(&self) -> Option<PathBuf>
Return the current transcript path, if set.
Sourcepub fn workspace_gated(&self) -> bool
pub fn workspace_gated(&self) -> bool
Whether the workspace approval gate is active for this engine.
Sourcepub fn command_digest(&self) -> &str
pub fn command_digest(&self) -> &str
Digest of the exact lifecycle command set this engine will execute. Approvals are bound to this digest and revalidated before every spawn.
Sourcepub fn command_previews(&self) -> Vec<LifecycleHookCommandPreview>
pub fn command_previews(&self) -> Vec<LifecycleHookCommandPreview>
Every lifecycle command this engine will execute, with its canonical event key — the exact set an approval covers.
Sourcepub async fn approve_workspace_hooks(&self)
pub async fn approve_workspace_hooks(&self)
Mark this engine’s exact command set as approved for the session.
Only a digest equal to command_digest() satisfies the gate.
Sourcepub async fn workspace_hooks_need_approval(&self) -> bool
pub async fn workspace_hooks_need_approval(&self) -> bool
Whether the gate is active and the current command set is not yet approved. The binary prompts the user before the first lifecycle run when this is true.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for LifecycleHookEngine
impl !UnwindSafe for LifecycleHookEngine
impl Freeze for LifecycleHookEngine
impl Send for LifecycleHookEngine
impl Sync for LifecycleHookEngine
impl Unpin for LifecycleHookEngine
impl UnsafeUnpin for LifecycleHookEngine
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<T> CacheValue for T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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> 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<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more