Skip to main content

gproxy_protocol/protocol/claude/common/server_tools/
results.rs

1use serde::{Deserialize, Serialize};
2
3use super::super::{CacheControl, Caller, JsonObject, WebSearchResultBlock};
4use super::{
5    AdvisorRedactedResultBlock, AdvisorResultBlock, AdvisorToolResultError,
6    BashCodeExecutionResultBlock, BashCodeExecutionToolResultError, CodeExecutionResultBlock,
7    CodeExecutionToolResultError, EncryptedCodeExecutionResultBlock,
8    TextEditorCodeExecutionCreateResultBlock, TextEditorCodeExecutionStrReplaceResultBlock,
9    TextEditorCodeExecutionToolResultError, TextEditorCodeExecutionViewResultBlock,
10    ToolSearchToolResultError, ToolSearchToolSearchResultBlock, WebFetchResultBlock,
11    WebFetchToolResultError, WebSearchToolResultError,
12};
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(untagged)]
16pub enum WebSearchToolResultContent {
17    Error(WebSearchToolResultError),
18    Results(Vec<WebSearchResultBlock>),
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22#[serde(untagged)]
23pub enum WebFetchToolResultContent {
24    Error(WebFetchToolResultError),
25    Result(WebFetchResultBlock),
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
29#[serde(untagged)]
30pub enum AdvisorToolResultContent {
31    Error(AdvisorToolResultError),
32    Result(AdvisorResultBlock),
33    Redacted(AdvisorRedactedResultBlock),
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
37#[serde(untagged)]
38pub enum CodeExecutionToolResultContent {
39    Error(CodeExecutionToolResultError),
40    Result(CodeExecutionResultBlock),
41    Encrypted(EncryptedCodeExecutionResultBlock),
42}
43
44#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
45#[serde(untagged)]
46pub enum BashCodeExecutionToolResultContent {
47    Error(BashCodeExecutionToolResultError),
48    Result(BashCodeExecutionResultBlock),
49}
50
51#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
52#[serde(untagged)]
53pub enum TextEditorCodeExecutionToolResultContent {
54    Error(TextEditorCodeExecutionToolResultError),
55    View(TextEditorCodeExecutionViewResultBlock),
56    Create(TextEditorCodeExecutionCreateResultBlock),
57    StrReplace(TextEditorCodeExecutionStrReplaceResultBlock),
58}
59
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
61#[serde(untagged)]
62pub enum ToolSearchToolResultContent {
63    Error(ToolSearchToolResultError),
64    Result(ToolSearchToolSearchResultBlock),
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68pub struct WebFetchToolResultBlock {
69    pub content: WebFetchToolResultContent,
70    pub tool_use_id: String,
71    #[serde(rename = "type")]
72    pub type_: WebFetchToolResultBlockType,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub cache_control: Option<CacheControl>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub caller: Option<Caller>,
77    #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
78    pub extra: JsonObject,
79}
80
81#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
82pub enum WebFetchToolResultBlockType {
83    #[serde(rename = "web_fetch_tool_result")]
84    WebFetchToolResult,
85}
86
87macro_rules! server_tool_result_block {
88    ($block:ident, $content:ident, $tag:ident, $wire:literal, $variant:ident) => {
89        #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
90        pub struct $block {
91            pub content: $content,
92            pub tool_use_id: String,
93            #[serde(rename = "type")]
94            pub type_: $tag,
95            #[serde(skip_serializing_if = "Option::is_none")]
96            pub cache_control: Option<CacheControl>,
97            #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
98            pub extra: JsonObject,
99        }
100
101        #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
102        pub enum $tag {
103            #[serde(rename = $wire)]
104            $variant,
105        }
106    };
107}
108
109server_tool_result_block!(
110    AdvisorToolResultBlock,
111    AdvisorToolResultContent,
112    AdvisorToolResultBlockType,
113    "advisor_tool_result",
114    AdvisorToolResult
115);
116server_tool_result_block!(
117    CodeExecutionToolResultBlock,
118    CodeExecutionToolResultContent,
119    CodeExecutionToolResultBlockType,
120    "code_execution_tool_result",
121    CodeExecutionToolResult
122);
123server_tool_result_block!(
124    BashCodeExecutionToolResultBlock,
125    BashCodeExecutionToolResultContent,
126    BashCodeExecutionToolResultBlockType,
127    "bash_code_execution_tool_result",
128    BashCodeExecutionToolResult
129);
130server_tool_result_block!(
131    TextEditorCodeExecutionToolResultBlock,
132    TextEditorCodeExecutionToolResultContent,
133    TextEditorCodeExecutionToolResultBlockType,
134    "text_editor_code_execution_tool_result",
135    TextEditorCodeExecutionToolResult
136);
137server_tool_result_block!(
138    ToolSearchToolResultBlock,
139    ToolSearchToolResultContent,
140    ToolSearchToolResultBlockType,
141    "tool_search_tool_result",
142    ToolSearchToolResult
143);