Skip to main content

agent_sessions/
agent.rs

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    /// Sources implemented by this version. See docs/support.md for format scope.
36    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/// Select one Codex content representation when both are present.
83#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
84pub enum CodexContentMode {
85    #[default]
86    /// Use session_meta.history_mode; absent metadata means legacy history.
87    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/// The ledger to emit; selection is explicit to prevent double counting.
144#[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    /// Explicit legacy statistical normalization; adjustments remain observable.
166    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}