Skip to main content

vv_agent/app_server/protocol/
initialize.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use ts_rs::TS;
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
6#[serde(rename_all = "camelCase")]
7pub struct InitializeParams {
8    pub client_info: AppClientInfo,
9    pub capabilities: AppClientCapabilities,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
13#[serde(rename_all = "camelCase")]
14pub struct AppClientInfo {
15    pub name: String,
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub title: Option<String>,
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub version: Option<String>,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize, JsonSchema, TS)]
23#[serde(rename_all = "camelCase")]
24pub struct AppClientCapabilities {
25    #[serde(default)]
26    pub experimental_api: bool,
27    #[serde(default)]
28    pub opt_out_notification_methods: Vec<String>,
29}
30
31#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
32#[serde(rename_all = "camelCase")]
33pub struct InitializeResponse {
34    pub server_info: AppServerInfo,
35    pub protocol_version: String,
36    pub supported_transports: Vec<String>,
37    pub capabilities: AppServerCapabilities,
38}
39
40impl InitializeResponse {
41    pub fn new(
42        name: impl Into<String>,
43        version: impl Into<String>,
44        capabilities: AppServerCapabilities,
45    ) -> Self {
46        Self {
47            server_info: AppServerInfo {
48                name: name.into(),
49                version: version.into(),
50            },
51            protocol_version: "2026-06-02".to_string(),
52            supported_transports: vec!["stdio".to_string()],
53            capabilities,
54        }
55    }
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
59#[serde(rename_all = "camelCase")]
60pub struct AppServerInfo {
61    pub name: String,
62    pub version: String,
63}
64
65#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
66#[serde(rename_all = "camelCase")]
67pub struct AppServerCapabilities {
68    pub thread: bool,
69    pub turn: bool,
70    pub item_stream: bool,
71    pub approval_requests: bool,
72    pub event_replay: bool,
73    pub schema_export: bool,
74}
75
76impl AppServerCapabilities {
77    pub fn mvp() -> Self {
78        Self {
79            thread: true,
80            turn: true,
81            item_stream: true,
82            approval_requests: true,
83            event_replay: true,
84            schema_export: true,
85        }
86    }
87}