Skip to main content

vtcode_config/core/agent/
circuit_breaker.rs

1//! Tool circuit-breaker configuration.
2
3use serde::{Deserialize, Serialize};
4
5#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
6#[derive(Debug, Clone, Deserialize, Serialize)]
7pub struct CircuitBreakerConfig {
8    /// Enable circuit breaker functionality
9    #[serde(default = "default_circuit_breaker_enabled")]
10    pub enabled: bool,
11
12    /// Number of consecutive failures before opening circuit
13    #[serde(default = "default_failure_threshold")]
14    pub failure_threshold: u32,
15
16    /// Pause and ask user when circuit opens (vs auto-backoff)
17    #[serde(default = "default_pause_on_open")]
18    pause_on_open: bool,
19
20    /// Number of open circuits before triggering pause
21    #[serde(default = "default_max_open_circuits")]
22    max_open_circuits: usize,
23
24    /// Cooldown period between recovery prompts (seconds)
25    #[serde(default = "default_recovery_cooldown")]
26    pub recovery_cooldown: u64,
27}
28
29impl Default for CircuitBreakerConfig {
30    fn default() -> Self {
31        Self {
32            enabled: default_circuit_breaker_enabled(),
33            failure_threshold: default_failure_threshold(),
34            pause_on_open: default_pause_on_open(),
35            max_open_circuits: default_max_open_circuits(),
36            recovery_cooldown: default_recovery_cooldown(),
37        }
38    }
39}
40#[inline]
41const fn default_circuit_breaker_enabled() -> bool {
42    true // Default: enabled for resilient execution
43}
44
45#[inline]
46const fn default_failure_threshold() -> u32 {
47    7 // Open circuit after 7 consecutive failures
48}
49
50#[inline]
51const fn default_pause_on_open() -> bool {
52    true // Default: ask user for guidance on circuit breaker
53}
54
55#[inline]
56const fn default_max_open_circuits() -> usize {
57    3 // Pause when 3+ tools have open circuits
58}
59
60#[inline]
61const fn default_recovery_cooldown() -> u64 {
62    60 // Cooldown between recovery prompts (seconds)
63}