use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Agent {
ClaudeCode,
Codex,
GeminiCli,
QwenCode,
KimiCli,
Pi,
CopilotCli,
CodeBuddy,
IFlow,
OpenCode,
Cline,
RooCode,
Goose,
Continue,
Cursor,
Grok,
ClineCli,
Hermes,
WorkBuddy,
Qoder,
ZCode,
GrokBot,
CursorCli,
Zed,
Warp,
Antigravity,
}
impl Agent {
pub const SUPPORTED: &'static [Self] = &[
Self::ClaudeCode,
Self::Codex,
Self::GeminiCli,
Self::QwenCode,
Self::KimiCli,
Self::Pi,
Self::CopilotCli,
Self::CodeBuddy,
Self::IFlow,
Self::OpenCode,
Self::Cline,
Self::RooCode,
Self::Goose,
Self::Continue,
Self::Cursor,
Self::Grok,
Self::ClineCli,
Self::Hermes,
Self::WorkBuddy,
Self::Qoder,
Self::ZCode,
Self::GrokBot,
Self::CursorCli,
Self::Zed,
Self::Warp,
Self::Antigravity,
];
pub(crate) fn streaming(self) -> bool {
matches!(
self,
Self::ClaudeCode
| Self::Codex
| Self::QwenCode
| Self::KimiCli
| Self::Pi
| Self::CopilotCli
| Self::CodeBuddy
| Self::IFlow
| Self::WorkBuddy
| Self::Qoder
)
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum CodexContentMode {
#[default]
Auto,
ResponseItems,
CompletedItems,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum FileKind {
Main,
Subagent,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Origin {
#[default]
Unknown,
Interactive,
Ide,
Exec,
Subagent,
}
impl Origin {
pub(crate) fn priority(self) -> u8 {
match self {
Self::Unknown => 0,
Self::Interactive => 1,
Self::Ide => 2,
Self::Exec => 3,
Self::Subagent => 4,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Role {
User,
Assistant,
System,
Developer,
}
impl Role {
pub(crate) fn parse(value: &str) -> Option<Self> {
match value {
"user" => Some(Self::User),
"assistant" => Some(Self::Assistant),
"system" => Some(Self::System),
"developer" => Some(Self::Developer),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
#[non_exhaustive]
pub enum CodexUsageMode {
#[default]
TokenCount,
Response,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum Endpoint {
Native,
Proxy,
#[default]
Unknown,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum AccountingPolicy {
#[default]
Strict,
UsageStatistics,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum ToolCallKind {
Function,
Custom,
Server,
}