gemini_cli/
provider_profile.rs1use std::sync::atomic::AtomicBool;
2
3use nils_common::provider_runtime::{
4 ExecInvocation, ExecProfile, HomePathSelection, PathsProfile, ProviderDefaults,
5 ProviderEnvKeys, ProviderProfile,
6};
7
8const SECRET_HOME_MODERN: &[&str] = &[".gemini", "secrets"];
9const AUTH_HOME_MODERN: &[&str] = &[".gemini", "oauth_creds.json"];
10const CACHE_HOME: &[&str] = &[".gemini", "cache", "secrets"];
11
12static WARNED_INVALID_ALLOW_DANGEROUS: AtomicBool = AtomicBool::new(false);
13
14pub static GEMINI_PROVIDER_PROFILE: ProviderProfile = ProviderProfile {
15 provider_name: "gemini",
16 env: ProviderEnvKeys {
17 model: "GEMINI_CLI_MODEL",
18 reasoning: "GEMINI_CLI_REASONING",
19 allow_dangerous_enabled: "GEMINI_ALLOW_DANGEROUS_ENABLED",
20 secret_dir: "GEMINI_SECRET_DIR",
21 auth_file: "GEMINI_AUTH_FILE",
22 secret_cache_dir: "GEMINI_SECRET_CACHE_DIR",
23 prompt_segment_enabled: "GEMINI_PROMPT_SEGMENT_ENABLED",
24 auto_refresh_enabled: "GEMINI_AUTO_REFRESH_ENABLED",
25 auto_refresh_min_days: "GEMINI_AUTO_REFRESH_MIN_DAYS",
26 },
27 defaults: ProviderDefaults {
28 model: "gemini-2.5-flash",
29 reasoning: "medium",
30 prompt_segment_enabled: "false",
31 auto_refresh_enabled: "false",
32 auto_refresh_min_days: "5",
33 },
34 paths: PathsProfile {
35 feature_name: "gemini",
36 feature_tool_script: "gemini-tools.zsh",
37 secret_dir_home: HomePathSelection::ModernOnly(SECRET_HOME_MODERN),
38 auth_file_home: HomePathSelection::ModernOnly(AUTH_HOME_MODERN),
39 secret_cache_home: Some(CACHE_HOME),
40 },
41 exec: ExecProfile {
42 default_caller_prefix: "gemini",
43 missing_prompt_label: "_gemini_exec_dangerous",
44 binary_name: "gemini",
45 failed_exec_message_prefix: "gemini-tools: failed to run gemini exec",
46 invocation: ExecInvocation::GeminiStyle,
47 warned_invalid_allow_dangerous: &WARNED_INVALID_ALLOW_DANGEROUS,
48 },
49};