diff --git a/codex-rs/hooks/src/engine/mcp_runner.rs b/codex-rs/hooks/src/engine/mcp_runner.rs index 7a8da53e4d..71bf050e0f 100644 --- a/codex-rs/hooks/src/engine/mcp_runner.rs +++ b/codex-rs/hooks/src/engine/mcp_runner.rs @@ -1,3 +1,4 @@ +use std::sync::LazyLock; use std::time::Duration; use std::time::Instant; @@ -121,7 +122,9 @@ fn resolve_value(value: &Value, hook_event: &Value) -> Result { } fn resolve_string(text: &str, hook_event: &Value) -> Result { - let pattern = Regex::new(r"\$\{([^{}]+)\}")?; + static PLACEHOLDER_PATTERN: LazyLock> = + LazyLock::new(|| Regex::new(r"\$\{([^{}]+)\}")); + let pattern = PLACEHOLDER_PATTERN.as_ref().map_err(Clone::clone)?; let captures = pattern.captures_iter(text).collect::>(); if captures.is_empty() { return Ok(Value::String(text.to_string()));