vv-agent 0.2.0

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
mod args;
mod logging;
mod output;
mod task;

use std::env;
use std::sync::Arc;

use crate::config::build_vv_llm_from_local_settings;
use crate::runtime::AgentRuntime;
use crate::workspace::LocalWorkspaceBackend;

pub use self::args::{parse_cli_args_from, parse_cli_args_from_with_default_settings, CliArgs};
use self::logging::build_cli_log_handler;
pub use self::output::result_payload;
use self::task::generate_task_id;
pub use self::task::{build_cli_task, build_cli_task_from_resolved};

pub fn main() -> Result<(), String> {
    let raw_args = env::args().collect::<Vec<_>>();
    if raw_args
        .iter()
        .skip(1)
        .any(|arg| matches!(arg.as_str(), "--help" | "-h"))
    {
        println!("{}", args::help_text());
        return Ok(());
    }
    let args = parse_cli_args_from(raw_args)?;
    let (llm, resolved) =
        build_vv_llm_from_local_settings(&args.settings_file, &args.backend, &args.model, 90.0)
            .map_err(|err| err.to_string())?;

    let mut runtime = AgentRuntime::new(llm)
        .with_settings_file(args.settings_file.clone())
        .with_default_backend(args.backend.clone());
    runtime.default_workspace = Some(args.workspace.clone());
    runtime.workspace_backend = Arc::new(LocalWorkspaceBackend::new(args.workspace.clone()));
    runtime.log_handler = build_cli_log_handler(args.verbose);

    let task = build_cli_task_from_resolved(&args, &resolved, generate_task_id())?;
    let result = runtime.run(task).map_err(|err| err.to_string())?;
    let payload = result_payload(&result, &resolved);
    let output = serde_json::to_string_pretty(&payload).map_err(|err| err.to_string())?;
    println!("{output}");
    Ok(())
}