pub struct DynamicConfigManager { /* private fields */ }Expand description
Manager for dynamic TOON configuration with hot-reload support
This manager:
- Loads all TOON configs at startup
- Watches config directories for changes
- Atomically swaps config on changes (lock-free reads)
- Provides convenient accessor methods
§Example
let manager = DynamicConfigManager::new(
PathBuf::from("config/agents"),
PathBuf::from("config/models"),
PathBuf::from("config/tools"),
PathBuf::from("config/workflows"),
PathBuf::from("config/mcps"),
true, // hot_reload
)?;
// Get an agent config (lock-free)
if let Some(router) = manager.agent("router") {
println!("Router uses model: {}", router.model);
}Implementations§
Source§impl DynamicConfigManager
impl DynamicConfigManager
Sourcepub fn from_config(config: &AresConfig) -> Result<Self, ToonConfigError>
pub fn from_config(config: &AresConfig) -> Result<Self, ToonConfigError>
Create DynamicConfigManager from AresConfig
This uses the paths defined in config.config (DynamicConfigPaths)
to initialize the manager.
Sourcepub fn new(
agents_dir: PathBuf,
models_dir: PathBuf,
tools_dir: PathBuf,
workflows_dir: PathBuf,
mcps_dir: PathBuf,
hot_reload: bool,
) -> Result<Self, ToonConfigError>
pub fn new( agents_dir: PathBuf, models_dir: PathBuf, tools_dir: PathBuf, workflows_dir: PathBuf, mcps_dir: PathBuf, hot_reload: bool, ) -> Result<Self, ToonConfigError>
Create a new DynamicConfigManager
§Arguments
agents_dir- Directory containing agent TOON filesmodels_dir- Directory containing model TOON filestools_dir- Directory containing tool TOON filesworkflows_dir- Directory containing workflow TOON filesmcps_dir- Directory containing MCP TOON fileshot_reload- Whether to watch for file changes
Sourcepub fn set_version_tx(&self, tx: UnboundedSender<Vec<ToonAgentConfig>>)
pub fn set_version_tx(&self, tx: UnboundedSender<Vec<ToonAgentConfig>>)
Attach a version tracking sender. After this call, every hot-reload emits the updated agent list to this channel for a background task to persist to DB.
Sourcepub fn config(&self) -> Guard<Arc<DynamicConfig>>
pub fn config(&self) -> Guard<Arc<DynamicConfig>>
Get current config snapshot (lock-free)
Sourcepub fn agent(&self, name: &str) -> Option<ToonAgentConfig>
pub fn agent(&self, name: &str) -> Option<ToonAgentConfig>
Get a specific agent config
Sourcepub fn model(&self, name: &str) -> Option<ToonModelConfig>
pub fn model(&self, name: &str) -> Option<ToonModelConfig>
Get a specific model config
Sourcepub fn tool(&self, name: &str) -> Option<ToonToolConfig>
pub fn tool(&self, name: &str) -> Option<ToonToolConfig>
Get a specific tool config
Sourcepub fn workflow(&self, name: &str) -> Option<ToonWorkflowConfig>
pub fn workflow(&self, name: &str) -> Option<ToonWorkflowConfig>
Get a specific workflow config
Sourcepub fn mcp(&self, name: &str) -> Option<ToonMcpConfig>
pub fn mcp(&self, name: &str) -> Option<ToonMcpConfig>
Get a specific MCP config
Sourcepub fn agents(&self) -> Vec<ToonAgentConfig>
pub fn agents(&self) -> Vec<ToonAgentConfig>
Get all agents
Sourcepub fn models(&self) -> Vec<ToonModelConfig>
pub fn models(&self) -> Vec<ToonModelConfig>
Get all models
Sourcepub fn tools(&self) -> Vec<ToonToolConfig>
pub fn tools(&self) -> Vec<ToonToolConfig>
Get all tools
Sourcepub fn workflows(&self) -> Vec<ToonWorkflowConfig>
pub fn workflows(&self) -> Vec<ToonWorkflowConfig>
Get all workflows
Sourcepub fn mcps(&self) -> Vec<ToonMcpConfig>
pub fn mcps(&self) -> Vec<ToonMcpConfig>
Get all MCPs
Sourcepub fn agent_names(&self) -> Vec<String>
pub fn agent_names(&self) -> Vec<String>
Get all agent names
Sourcepub fn model_names(&self) -> Vec<String>
pub fn model_names(&self) -> Vec<String>
Get all model names
Sourcepub fn tool_names(&self) -> Vec<String>
pub fn tool_names(&self) -> Vec<String>
Get all tool names
Sourcepub fn workflow_names(&self) -> Vec<String>
pub fn workflow_names(&self) -> Vec<String>
Get all workflow names
Sourcepub fn upsert_agent(&self, agent: ToonAgentConfig)
pub fn upsert_agent(&self, agent: ToonAgentConfig)
Hot-swap a single agent config in the in-memory cache (used for rollback). Does not write to disk — disk files are the canonical source on next restart.
Sourcepub fn reload(&self) -> Result<Vec<ConfigWarning>, ToonConfigError>
pub fn reload(&self) -> Result<Vec<ConfigWarning>, ToonConfigError>
Manually reload configuration
Auto Trait Implementations§
impl Freeze for DynamicConfigManager
impl RefUnwindSafe for DynamicConfigManager
impl Send for DynamicConfigManager
impl Sync for DynamicConfigManager
impl Unpin for DynamicConfigManager
impl UnsafeUnpin for DynamicConfigManager
impl UnwindSafe for DynamicConfigManager
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> 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