use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
pub enum QuerySource {
#[serde(rename = "agent:default")]
AgentDefault,
#[serde(rename = "agent:custom")]
AgentCustom,
#[serde(rename = "repl_main_thread")]
ReplMainThread,
}
pub fn get_query_source_for_agent(
agent_type: Option<&str>,
is_built_in_agent: bool,
) -> QuerySource {
if is_built_in_agent {
match agent_type {
Some(t) => {
QuerySource::AgentDefault
}
None => QuerySource::AgentDefault,
}
} else {
QuerySource::AgentCustom
}
}
pub fn get_query_source_for_repl() -> QuerySource {
let style = std::env::var("AI_CODE_OUTPUT_STYLE")
.ok()
.unwrap_or_else(|| "default".to_string());
if style == "default" {
return QuerySource::ReplMainThread;
}
let is_built_in = matches!(
style.as_str(),
"compact" | "verbose" | "minimal" | "default"
);
if is_built_in {
QuerySource::ReplMainThread
} else {
QuerySource::ReplMainThread
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_query_source_for_agent_builtin() {
let source = get_query_source_for_agent(Some("planner"), true);
assert!(matches!(source, QuerySource::AgentDefault));
}
#[test]
fn test_get_query_source_for_agent_custom() {
let source = get_query_source_for_agent(None, false);
assert!(matches!(source, QuerySource::AgentCustom));
}
#[test]
fn test_get_query_source_for_repl_default() {
std::env::remove_var("AI_CODE_OUTPUT_STYLE");
let source = get_query_source_for_repl();
assert!(matches!(source, QuerySource::ReplMainThread));
}
}