1use nils_common::shell::{SingleQuoteEscapeStyle, quote_posix_single_with_style};
2
3pub fn show() -> i32 {
4 let snapshot = crate::runtime::config_snapshot();
5
6 println!("CODEX_CLI_MODEL={}", snapshot.model);
7 println!("CODEX_CLI_REASONING={}", snapshot.reasoning);
8 println!(
9 "CODEX_ALLOW_DANGEROUS_ENABLED={}",
10 snapshot.allow_dangerous_enabled_raw
11 );
12
13 if let Some(path) = snapshot.secret_dir {
14 println!("CODEX_SECRET_DIR={}", path.to_string_lossy());
15 } else {
16 println!("CODEX_SECRET_DIR=");
17 }
18
19 if let Some(path) = snapshot.auth_file {
20 println!("CODEX_AUTH_FILE={}", path.to_string_lossy());
21 } else {
22 println!("CODEX_AUTH_FILE=");
23 }
24
25 if let Some(path) = snapshot.secret_cache_dir {
26 println!("CODEX_SECRET_CACHE_DIR={}", path.to_string_lossy());
27 } else {
28 println!("CODEX_SECRET_CACHE_DIR=");
29 }
30
31 println!(
32 "CODEX_PROMPT_SEGMENT_ENABLED={}",
33 snapshot.prompt_segment_enabled
34 );
35 println!(
36 "CODEX_AUTO_REFRESH_ENABLED={}",
37 snapshot.auto_refresh_enabled
38 );
39 println!(
40 "CODEX_AUTO_REFRESH_MIN_DAYS={}",
41 snapshot.auto_refresh_min_days
42 );
43
44 0
45}
46
47pub fn set(key: &str, value: &str) -> i32 {
48 match key {
49 "model" | "CODEX_CLI_MODEL" => {
50 println!(
51 "export CODEX_CLI_MODEL={}",
52 quote_posix_single_with_style(value, SingleQuoteEscapeStyle::DoubleQuoteBoundary)
53 );
54 0
55 }
56 "reasoning" | "reason" | "CODEX_CLI_REASONING" => {
57 println!(
58 "export CODEX_CLI_REASONING={}",
59 quote_posix_single_with_style(value, SingleQuoteEscapeStyle::DoubleQuoteBoundary)
60 );
61 0
62 }
63 "dangerous" | "allow-dangerous" | "CODEX_ALLOW_DANGEROUS_ENABLED" => {
64 let lowered = value.trim().to_ascii_lowercase();
65 if lowered != "true" && lowered != "false" {
66 eprintln!(
67 "codex-cli config: dangerous must be true|false (got: {})",
68 value
69 );
70 return 64;
71 }
72 println!("export CODEX_ALLOW_DANGEROUS_ENABLED={}", lowered);
73 0
74 }
75 _ => {
76 eprintln!("codex-cli config: unknown key: {key}");
77 eprintln!("codex-cli config: keys: model|reasoning|dangerous");
78 64
79 }
80 }
81}