vv_agent/sdk/types/
options.rs1use 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}