Skip to main content

gemini_cli/
provider_profile.rs

1use 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};