Skip to main content

vv_agent/sdk/types/
options.rs

1use std::collections::BTreeMap;
2use std::path::{Path, PathBuf};
3use std::sync::Arc;
4
5use crate::config::ResolvedModelConfig;
6use crate::llm::LlmClient;
7use crate::runtime::backends::RuntimeExecutionBackend;
8use crate::runtime::{RuntimeEventHandler, RuntimeHook, StreamCallback};
9use crate::sdk::resources::AgentResourceLoader;
10use crate::tools::ToolRegistry;
11
12pub type SdkLlmClient = Arc<dyn LlmClient>;
13pub type LlmBuilder = Arc<
14    dyn Fn(&Path, &str, &str, f64) -> Result<(SdkLlmClient, ResolvedModelConfig), String>
15        + Send
16        + Sync
17        + 'static,
18>;
19pub use crate::runtime::RuntimeEventHandler as RuntimeLogHandler;
20pub use LlmBuilder as LLMBuilder;
21pub type ToolRegistryFactory = Arc<dyn Fn() -> ToolRegistry + Send + Sync + 'static>;
22
23#[derive(Clone)]
24pub struct AgentSDKOptions {
25    pub settings_file: PathBuf,
26    pub default_backend: String,
27    pub workspace: PathBuf,
28    pub timeout_seconds: f64,
29    pub log_preview_chars: Option<usize>,
30    pub llm_builder: Option<LlmBuilder>,
31    pub tool_registry_factory: Option<ToolRegistryFactory>,
32    pub log_handler: Option<RuntimeEventHandler>,
33    pub execution_backend: Option<RuntimeExecutionBackend>,
34    pub resource_loader: Option<AgentResourceLoader>,
35    pub auto_discover_resources: bool,
36    pub debug_dump_dir: Option<String>,
37    pub stream_callback: Option<StreamCallback>,
38    pub runtime_hooks: Vec<Arc<dyn RuntimeHook>>,
39    pub bash_shell: Option<String>,
40    pub windows_shell_priority: Vec<String>,
41    pub bash_env: BTreeMap<String, String>,
42}
43
44impl std::fmt::Debug for AgentSDKOptions {
45    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46        formatter
47            .debug_struct("AgentSDKOptions")
48            .field("settings_file", &self.settings_file)
49            .field("default_backend", &self.default_backend)
50            .field("workspace", &self.workspace)
51            .field("timeout_seconds", &self.timeout_seconds)
52            .field("log_preview_chars", &self.log_preview_chars)
53            .field("has_llm_builder", &self.llm_builder.is_some())
54            .field("has_log_handler", &self.log_handler.is_some())
55            .field(
56                "has_tool_registry_factory",
57                &self.tool_registry_factory.is_some(),
58            )
59            .field("execution_backend", &self.execution_backend)
60            .field("has_resource_loader", &self.resource_loader.is_some())
61            .field("auto_discover_resources", &self.auto_discover_resources)
62            .field("debug_dump_dir", &self.debug_dump_dir)
63            .field("has_stream_callback", &self.stream_callback.is_some())
64            .field("runtime_hooks", &self.runtime_hooks.len())
65            .field("bash_shell", &self.bash_shell)
66            .field("windows_shell_priority", &self.windows_shell_priority)
67            .field("bash_env", &self.bash_env)
68            .finish()
69    }
70}
71
72impl Default for AgentSDKOptions {
73    fn default() -> Self {
74        Self {
75            settings_file: PathBuf::from("local_settings.json"),
76            default_backend: "moonshot".to_string(),
77            workspace: PathBuf::from("./workspace"),
78            timeout_seconds: 90.0,
79            log_preview_chars: None,
80            llm_builder: None,
81            tool_registry_factory: None,
82            log_handler: None,
83            execution_backend: None,
84            resource_loader: None,
85            auto_discover_resources: true,
86            debug_dump_dir: None,
87            stream_callback: None,
88            runtime_hooks: Vec::new(),
89            bash_shell: None,
90            windows_shell_priority: Vec::new(),
91            bash_env: BTreeMap::new(),
92        }
93    }
94}