Skip to main content

vv_agent/
cli.rs

1mod args;
2mod logging;
3mod output;
4mod task;
5
6use std::env;
7use std::sync::Arc;
8
9use crate::config::build_vv_llm_from_local_settings;
10use crate::runtime::AgentRuntime;
11use crate::workspace::LocalWorkspaceBackend;
12
13pub use self::args::{parse_cli_args_from, parse_cli_args_from_with_default_settings, CliArgs};
14use self::logging::build_cli_log_handler;
15pub use self::output::result_payload;
16use self::task::generate_task_id;
17pub use self::task::{build_cli_task, build_cli_task_from_resolved};
18
19pub fn main() -> Result<(), String> {
20    let raw_args = env::args().collect::<Vec<_>>();
21    if raw_args
22        .iter()
23        .skip(1)
24        .any(|arg| matches!(arg.as_str(), "--help" | "-h"))
25    {
26        println!("{}", args::help_text());
27        return Ok(());
28    }
29    let args = parse_cli_args_from(raw_args)?;
30    let (llm, resolved) =
31        build_vv_llm_from_local_settings(&args.settings_file, &args.backend, &args.model, 90.0)
32            .map_err(|err| err.to_string())?;
33
34    let mut runtime = AgentRuntime::new(llm)
35        .with_settings_file(args.settings_file.clone())
36        .with_default_backend(args.backend.clone());
37    runtime.default_workspace = Some(args.workspace.clone());
38    runtime.workspace_backend = Arc::new(LocalWorkspaceBackend::new(args.workspace.clone()));
39    runtime.log_handler = build_cli_log_handler(args.verbose);
40
41    let task = build_cli_task_from_resolved(&args, &resolved, generate_task_id())?;
42    let result = runtime.run(task).map_err(|err| err.to_string())?;
43    let payload = result_payload(&result, &resolved);
44    let output = serde_json::to_string_pretty(&payload).map_err(|err| err.to_string())?;
45    println!("{output}");
46    Ok(())
47}