#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WrapStrategy {
SystemFlag {
flag: String,
},
SystemEnv {
name: String,
},
MessageFile {
flag: String,
},
Auto,
}
#[must_use]
pub fn default_strategy(agent: &str) -> WrapStrategy {
match agent {
"codex" | "codex-cli" => WrapStrategy::SystemFlag {
flag: "--system".into(),
},
"claude" | "claude-cli" => WrapStrategy::SystemFlag {
flag: "--append-system-prompt".into(),
},
"aider" => WrapStrategy::MessageFile {
flag: "--message-file".into(),
},
"gemini" => WrapStrategy::SystemFlag {
flag: "--system".into(),
},
"ollama" => WrapStrategy::SystemEnv {
name: "OLLAMA_SYSTEM".into(),
},
_ => WrapStrategy::SystemFlag {
flag: "--system".into(),
},
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_strategy_per_known_agent_pins_1183() {
assert_eq!(
default_strategy("codex"),
WrapStrategy::SystemFlag {
flag: "--system".into()
}
);
assert_eq!(
default_strategy("codex-cli"),
WrapStrategy::SystemFlag {
flag: "--system".into()
}
);
assert_eq!(
default_strategy("aider"),
WrapStrategy::MessageFile {
flag: "--message-file".into()
}
);
assert_eq!(
default_strategy("gemini"),
WrapStrategy::SystemFlag {
flag: "--system".into()
}
);
assert_eq!(
default_strategy("ollama"),
WrapStrategy::SystemEnv {
name: "OLLAMA_SYSTEM".into()
}
);
assert_eq!(
default_strategy("claude"),
WrapStrategy::SystemFlag {
flag: "--append-system-prompt".into()
}
);
assert_eq!(
default_strategy("claude-cli"),
WrapStrategy::SystemFlag {
flag: "--append-system-prompt".into()
}
);
for gap in ["gpt", "grok", "anthropic-cli"] {
assert_eq!(
default_strategy(gap),
WrapStrategy::SystemFlag {
flag: "--system".into()
},
"documented #1238 gap `{gap}` must fall through to the generic --system \
default until a canonical upstream form is verifiable"
);
}
assert_eq!(
default_strategy("some-future-cli"),
WrapStrategy::SystemFlag {
flag: "--system".into()
}
);
}
}