Skip to main content

lash_remote_protocol/protocol/
turn_result.rs

1#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
2#[serde(tag = "type", rename_all = "snake_case")]
3pub enum RemoteCausalRef {
4    Turn {
5        session_id: String,
6        turn_id: String,
7    },
8    Effect {
9        session_id: String,
10        #[serde(default, skip_serializing_if = "Option::is_none")]
11        turn_id: Option<String>,
12        effect_id: String,
13    },
14    ToolCall {
15        session_id: String,
16        call_id: String,
17    },
18    Process {
19        process_id: String,
20    },
21    ProcessEvent {
22        process_id: String,
23        sequence: u64,
24    },
25    TriggerOccurrence {
26        occurrence_id: String,
27    },
28    SessionNode {
29        session_id: String,
30        node_id: String,
31    },
32}
33
34#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
35#[serde(rename_all = "snake_case")]
36pub enum RemoteTurnStatus {
37    #[default]
38    Completed,
39    Failed,
40    Cancelled,
41    InProgress,
42}
43
44#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
45#[serde(tag = "type", rename_all = "snake_case")]
46pub enum RemoteTurnOutcome {
47    Finished { finish: RemoteTurnFinish },
48    AgentFrameSwitch { frame_id: String, task: String },
49    Stopped { stop: RemoteTurnStop },
50}
51
52impl Default for RemoteTurnOutcome {
53    fn default() -> Self {
54        Self::Stopped {
55            stop: RemoteTurnStop::Incomplete,
56        }
57    }
58}
59
60#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
61#[serde(tag = "type", rename_all = "snake_case")]
62pub enum RemoteTurnFinish {
63    AssistantMessage {
64        text: String,
65    },
66    SubmittedValue {
67        value: serde_json::Value,
68    },
69    ToolValue {
70        tool_name: String,
71        value: serde_json::Value,
72    },
73}
74
75#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
76#[serde(tag = "type", rename_all = "snake_case")]
77pub enum RemoteTurnStop {
78    Cancelled,
79    Incomplete,
80    InvalidInput,
81    MaxTurns,
82    ToolFailure,
83    ProviderError,
84    PluginAbort,
85    RuntimeError,
86    SubmittedError {
87        value: serde_json::Value,
88    },
89    ToolError {
90        tool_name: String,
91        value: serde_json::Value,
92    },
93}
94
95#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
96pub struct RemoteAssistantOutput {
97    #[serde(default)]
98    pub safe_text: String,
99    #[serde(default)]
100    pub raw_text: String,
101    #[serde(default)]
102    pub state: RemoteAssistantOutputState,
103}
104
105#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
106#[serde(rename_all = "snake_case")]
107pub enum RemoteAssistantOutputState {
108    #[default]
109    Usable,
110    EmptyOutput,
111    TracebackOnly,
112    RecoveredFromError,
113}
114
115#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
116pub struct RemoteTurnUsageSummary {
117    #[serde(default)]
118    pub parent: RemoteUsage,
119    #[serde(default, skip_serializing_if = "Vec::is_empty")]
120    pub children: Vec<RemoteTokenLedgerEntry>,
121    #[serde(default)]
122    pub total: RemoteUsage,
123}
124
125#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
126pub struct RemoteExecutionSummary {
127    #[serde(default)]
128    pub had_tool_calls: bool,
129    #[serde(default)]
130    pub had_code_execution: bool,
131}
132
133#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
134pub struct RemoteToolCallSummary {
135    #[serde(default, skip_serializing_if = "Option::is_none")]
136    pub call_id: Option<String>,
137    pub tool_name: String,
138    #[serde(default)]
139    pub args: serde_json::Value,
140    pub outcome: RemoteToolCallOutcome,
141    pub duration_ms: u64,
142}
143
144#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
145#[serde(tag = "status", content = "payload", rename_all = "snake_case")]
146pub enum RemoteToolCallOutcome {
147    Success(serde_json::Value),
148    Failure(serde_json::Value),
149    Cancelled(serde_json::Value),
150}
151
152#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
153pub struct RemoteTurnIssue {
154    pub kind: String,
155    #[serde(default, skip_serializing_if = "Option::is_none")]
156    pub code: Option<String>,
157    #[serde(default, skip_serializing_if = "Option::is_none")]
158    pub terminal_reason: Option<RemoteLlmTerminalReason>,
159    pub message: String,
160    #[serde(default, skip_serializing_if = "Option::is_none")]
161    pub raw: Option<String>,
162}