vv-agent 0.6.2

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use std::io::Write;

mod common;

use common::{build_facade_agent, build_facade_runner, print_run_result, ExampleConfig};
use vv_agent::RunEventPayload;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = ExampleConfig::load();
    config.ensure_workspace()?;

    let runner = build_facade_runner(&config)?;
    let agent = build_facade_agent(
        &config,
        "stream-demo",
        "You are a helpful agent. Answer concisely.",
    )?;
    let prompt = config
        .prompt
        .unwrap_or_else(|| "用三句话介绍 Rust 语言".to_string());

    let mut stream = runner.stream(&agent, prompt).await?;
    let mut fragments = 0usize;

    println!("[demo] live event stream:\n");
    while let Some(event) = stream.next().await {
        let event = event?;
        match event.payload() {
            RunEventPayload::AssistantDelta { delta } => {
                print!("{delta}");
                std::io::stdout().flush()?;
                fragments += 1;
            }
            RunEventPayload::ToolCallStarted { tool_name, .. } => {
                eprintln!("\n[tool] started: {tool_name}");
            }
            RunEventPayload::ApprovalRequested {
                request_id,
                tool_name,
                ..
            } => {
                eprintln!("\n[approval] {tool_name} needs approval: {request_id}");
            }
            RunEventPayload::RunCompleted { status } => {
                eprintln!("\n[run] completed: {status:?}");
            }
            _ => {}
        }
    }

    println!("\n\n[demo] received {fragments} assistant fragments");
    let result = stream.into_result().await?;
    print_run_result(&result)
}