vv-agent 0.6.2

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use ts_rs::TS;

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct InitializeParams {
    pub client_info: AppClientInfo,
    pub capabilities: AppClientCapabilities,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct AppClientInfo {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct AppClientCapabilities {
    #[serde(default)]
    pub experimental_api: bool,
    #[serde(default)]
    pub opt_out_notification_methods: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct InitializeResponse {
    pub server_info: AppServerInfo,
    pub protocol_version: String,
    pub supported_transports: Vec<String>,
    pub capabilities: AppServerCapabilities,
}

impl InitializeResponse {
    pub fn new(
        name: impl Into<String>,
        version: impl Into<String>,
        capabilities: AppServerCapabilities,
    ) -> Self {
        Self {
            server_info: AppServerInfo {
                name: name.into(),
                version: version.into(),
            },
            protocol_version: "2026-06-02".to_string(),
            supported_transports: vec!["stdio".to_string()],
            capabilities,
        }
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct AppServerInfo {
    pub name: String,
    pub version: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct AppServerCapabilities {
    pub thread: bool,
    pub turn: bool,
    pub item_stream: bool,
    pub approval_requests: bool,
    pub event_replay: bool,
    pub schema_export: bool,
}

impl AppServerCapabilities {
    pub fn mvp() -> Self {
        Self {
            thread: true,
            turn: true,
            item_stream: true,
            approval_requests: true,
            event_replay: true,
            schema_export: true,
        }
    }
}