vv-agent 0.1.3

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use std::sync::{Arc, Mutex};

use crate::llm::LlmClient;
use crate::runtime::AgentRuntime;
use crate::sdk::types::AgentSDKOptions;
use crate::workspace::LocalWorkspaceBackend;

pub(in crate::sdk::client) fn configure_runtime_from_options<C: LlmClient + Clone + 'static>(
    runtime: &mut AgentRuntime<C>,
    options: &AgentSDKOptions,
) {
    if let Some(factory) = &options.tool_registry_factory {
        runtime.tool_registry = factory();
    }
    if let Some(execution_backend) = &options.execution_backend {
        runtime.execution_backend = execution_backend.clone();
    }
    if let Some(log_handler) = &options.log_handler {
        let option_handler = log_handler.clone();
        let previous_handler = runtime.log_handler.take();
        runtime.log_handler = Some(Arc::new(Mutex::new(Box::new(move |event, payload| {
            if let Some(previous_handler) = &previous_handler {
                if let Ok(mut previous_handler) = previous_handler.lock() {
                    previous_handler(event, payload);
                }
            }
            option_handler(event, payload);
        }))));
    }
    if runtime.log_preview_chars.is_none() {
        runtime.log_preview_chars = options.log_preview_chars;
    }
    if runtime.default_workspace.is_none() {
        let workspace = options.workspace.clone();
        runtime.default_workspace = Some(workspace.clone());
        runtime.workspace_backend = Arc::new(LocalWorkspaceBackend::new(workspace));
    }
    runtime.hooks.extend(options.runtime_hooks.clone());
}