vv_agent/app_server/protocol/
initialize.rs1use 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}