1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[serde(rename_all = "snake_case")]
5pub enum AgentStatus {
6 Pending,
7 Running,
8 WaitUser,
9 Completed,
10 Failed,
11 MaxCycles,
12 ReconciliationRequired,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
16#[serde(rename_all = "snake_case")]
17#[non_exhaustive]
18pub enum CompletionReason {
19 ToolFinish,
20 NoToolFinish,
21 StopOnFirstTool,
22 StopAtToolName,
23 WaitUser,
24 MaxCycles,
25 Cancelled,
26 Failed,
27 BudgetExhausted,
28}
29
30impl CompletionReason {
31 pub fn as_str(self) -> &'static str {
32 match self {
33 Self::ToolFinish => "tool_finish",
34 Self::NoToolFinish => "no_tool_finish",
35 Self::StopOnFirstTool => "stop_on_first_tool",
36 Self::StopAtToolName => "stop_at_tool_name",
37 Self::WaitUser => "wait_user",
38 Self::MaxCycles => "max_cycles",
39 Self::Cancelled => "cancelled",
40 Self::Failed => "failed",
41 Self::BudgetExhausted => "budget_exhausted",
42 }
43 }
44
45 pub fn parse(value: &str) -> Option<Self> {
46 match value {
47 "tool_finish" => Some(Self::ToolFinish),
48 "no_tool_finish" => Some(Self::NoToolFinish),
49 "stop_on_first_tool" => Some(Self::StopOnFirstTool),
50 "stop_at_tool_name" => Some(Self::StopAtToolName),
51 "wait_user" => Some(Self::WaitUser),
52 "max_cycles" => Some(Self::MaxCycles),
53 "cancelled" => Some(Self::Cancelled),
54 "failed" => Some(Self::Failed),
55 "budget_exhausted" => Some(Self::BudgetExhausted),
56 _ => None,
57 }
58 }
59}
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
62#[serde(rename_all = "snake_case")]
63pub enum ToolDirective {
64 Continue,
65 WaitUser,
66 Finish,
67}
68
69#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
70#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
71pub enum ToolResultStatus {
72 Success,
73 Error,
74 WaitResponse,
75 Running,
76 PendingCompress,
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
80#[serde(rename_all = "snake_case")]
81pub enum CycleStatus {
82 Pending,
83 Processing,
84 Completed,
85 WaitResponse,
86 Failed,
87}
88
89#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
90#[serde(rename_all = "snake_case")]
91pub enum NoToolPolicy {
92 #[default]
93 Continue,
94 WaitUser,
95 Finish,
96}