vv-agent 0.7.0

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use super::*;

pub(super) fn normalized_name_set(values: Option<&[String]>) -> Option<Vec<String>> {
    values.map(|values| {
        let mut values = values.to_vec();
        values.sort_by(|left, right| utf16_cmp(left, right));
        values.dedup();
        values
    })
}

pub(super) fn no_tool_policy_name(policy: NoToolPolicy) -> &'static str {
    match policy {
        NoToolPolicy::Continue => "continue",
        NoToolPolicy::WaitUser => "wait_user",
        NoToolPolicy::Finish => "finish",
    }
}

pub(super) fn approval_policy_name(policy: ApprovalPolicy) -> &'static str {
    match policy {
        ApprovalPolicy::Default => "default",
        ApprovalPolicy::Never => "never",
        ApprovalPolicy::Always => "always",
        ApprovalPolicy::OnRequest => "on_request",
    }
}

pub(super) fn tool_use_behavior_name(behavior: &ToolUseBehavior) -> &'static str {
    match behavior {
        ToolUseBehavior::RunLlmAgain => "run_llm_again",
        ToolUseBehavior::StopOnFirstTool => "stop_on_first_tool",
        ToolUseBehavior::StopAtToolNames(_) => "stop_at_tool_names",
    }
}

pub(super) fn stop_at_tool_names(behavior: &ToolUseBehavior) -> Vec<String> {
    match behavior {
        ToolUseBehavior::StopAtToolNames(names) => names.clone(),
        _ => Vec::new(),
    }
}

pub(super) fn utf16_cmp(left: &str, right: &str) -> Ordering {
    left.encode_utf16().cmp(right.encode_utf16())
}

pub(crate) fn tool_idempotency_for(registry: &ToolRegistry, name: &str) -> ToolIdempotency {
    registry
        .get(name)
        .map(|spec| spec.idempotency)
        .unwrap_or(ToolIdempotency::Unknown)
}