1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[non_exhaustive]
5pub enum Agent {
6 ClaudeCode,
7 Codex,
8 GeminiCli,
9 QwenCode,
10 KimiCli,
11 Pi,
12 CopilotCli,
13 CodeBuddy,
14 IFlow,
15 OpenCode,
16 Cline,
17 RooCode,
18 Goose,
19 Continue,
20 Cursor,
21 Grok,
22 ClineCli,
23 Hermes,
24 WorkBuddy,
25 Qoder,
26 ZCode,
27 GrokBot,
28 CursorCli,
29 Zed,
30 Warp,
31 Antigravity,
32}
33
34impl Agent {
35 pub const SUPPORTED: &'static [Self] = &[
37 Self::ClaudeCode,
38 Self::Codex,
39 Self::GeminiCli,
40 Self::QwenCode,
41 Self::KimiCli,
42 Self::Pi,
43 Self::CopilotCli,
44 Self::CodeBuddy,
45 Self::IFlow,
46 Self::OpenCode,
47 Self::Cline,
48 Self::RooCode,
49 Self::Goose,
50 Self::Continue,
51 Self::Cursor,
52 Self::Grok,
53 Self::ClineCli,
54 Self::Hermes,
55 Self::WorkBuddy,
56 Self::Qoder,
57 Self::ZCode,
58 Self::GrokBot,
59 Self::CursorCli,
60 Self::Zed,
61 Self::Warp,
62 Self::Antigravity,
63 ];
64
65 pub(crate) fn streaming(self) -> bool {
66 matches!(
67 self,
68 Self::ClaudeCode
69 | Self::Codex
70 | Self::QwenCode
71 | Self::KimiCli
72 | Self::Pi
73 | Self::CopilotCli
74 | Self::CodeBuddy
75 | Self::IFlow
76 | Self::WorkBuddy
77 | Self::Qoder
78 )
79 }
80}
81
82#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
84pub enum CodexContentMode {
85 #[default]
86 Auto,
88 ResponseItems,
89 CompletedItems,
90}
91
92#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
93#[non_exhaustive]
94pub enum FileKind {
95 Main,
96 Subagent,
97}
98
99#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
100#[non_exhaustive]
101pub enum Origin {
102 #[default]
103 Unknown,
104 Interactive,
105 Ide,
106 Exec,
107 Subagent,
108}
109
110impl Origin {
111 pub(crate) fn priority(self) -> u8 {
112 match self {
113 Self::Unknown => 0,
114 Self::Interactive => 1,
115 Self::Ide => 2,
116 Self::Exec => 3,
117 Self::Subagent => 4,
118 }
119 }
120}
121
122#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
123#[non_exhaustive]
124pub enum Role {
125 User,
126 Assistant,
127 System,
128 Developer,
129}
130
131impl Role {
132 pub(crate) fn parse(value: &str) -> Option<Self> {
133 match value {
134 "user" => Some(Self::User),
135 "assistant" => Some(Self::Assistant),
136 "system" => Some(Self::System),
137 "developer" => Some(Self::Developer),
138 _ => None,
139 }
140 }
141}
142
143#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
145#[non_exhaustive]
146pub enum CodexUsageMode {
147 #[default]
148 TokenCount,
149 Response,
150}
151
152#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
153#[non_exhaustive]
154pub enum Endpoint {
155 Native,
156 Proxy,
157 #[default]
158 Unknown,
159}
160
161#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
162pub enum AccountingPolicy {
163 #[default]
164 Strict,
165 UsageStatistics,
167}
168
169#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
170#[non_exhaustive]
171pub enum ToolCallKind {
172 Function,
173 Custom,
174 Server,
175}