vv-agent 0.1.3

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
mod build;
mod defaults;
mod ids;
mod inline;
mod metadata;
mod named;

use std::path::PathBuf;

use serde_json::Value;

use crate::types::AgentTask;

use super::super::session::AgentSessionRunRequest;
use super::super::types::AgentDefinition;
use super::AgentSDKClient;

pub(super) use build::task_from_definition_with_task_name;
pub(super) use metadata::merge_request_metadata;
use metadata::normalize_prepare_session_id;

impl AgentSDKClient {
    fn prepare_task_with_named_agent_in_workspace(
        &self,
        agent_name: &str,
        definition: AgentDefinition,
        prompt: impl Into<String>,
        resolved_model_id: impl Into<String>,
        workspace: impl Into<PathBuf>,
        session_id: Option<String>,
    ) -> AgentTask {
        let mut request = AgentSessionRunRequest::new(prompt);
        request.workspace = Some(workspace.into());
        if let Some(session_id) = normalize_prepare_session_id(session_id) {
            request
                .metadata
                .entry("session_id".to_string())
                .or_insert(Value::String(session_id));
        }
        self.prepare_task_with_named_agent_request(
            agent_name,
            definition,
            request,
            resolved_model_id,
        )
    }

    fn prepare_task_with_named_agent_request(
        &self,
        agent_name: &str,
        definition: AgentDefinition,
        mut request: AgentSessionRunRequest,
        resolved_model_id: impl Into<String>,
    ) -> AgentTask {
        let workspace = request
            .workspace
            .take()
            .unwrap_or_else(|| self.options.workspace.clone());
        let task_name = request
            .task_name
            .as_deref()
            .map(str::trim)
            .filter(|task_name| !task_name.is_empty())
            .unwrap_or(agent_name);
        let mut task = task_from_definition_with_task_name(
            &self.effective_definition(definition),
            request.prompt,
            Some(workspace.as_path()),
            Some(task_name),
        );
        task.model = resolved_model_id.into();
        merge_request_metadata(&mut task, request.metadata);
        task
    }
}