@@ -27,6 +27,35 @@ pub fn sync_to_live(
2727 }
2828}
2929
30+ /// 清理 Claude 配置中冲突的认证环境变量
31+ ///
32+ /// Claude Code 同时检测到 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY 时会报警告。
33+ /// 此函数确保只保留一个认证变量:
34+ /// - 优先保留 ANTHROPIC_AUTH_TOKEN(OAuth token)
35+ /// - 如果只有 ANTHROPIC_API_KEY,则保留它
36+ fn clean_claude_auth_conflict ( settings : & mut Value ) {
37+ if let Some ( env) = settings. get_mut ( "env" ) . and_then ( |v| v. as_object_mut ( ) ) {
38+ let has_auth_token = env
39+ . get ( "ANTHROPIC_AUTH_TOKEN" )
40+ . and_then ( |v| v. as_str ( ) )
41+ . map ( |s| !s. is_empty ( ) )
42+ . unwrap_or ( false ) ;
43+ let has_api_key = env
44+ . get ( "ANTHROPIC_API_KEY" )
45+ . and_then ( |v| v. as_str ( ) )
46+ . map ( |s| !s. is_empty ( ) )
47+ . unwrap_or ( false ) ;
48+
49+ // 如果两者都存在,移除 ANTHROPIC_API_KEY(优先使用 AUTH_TOKEN)
50+ if has_auth_token && has_api_key {
51+ tracing:: info!(
52+ "检测到 Claude 认证冲突:同时存在 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY,移除 ANTHROPIC_API_KEY"
53+ ) ;
54+ env. remove ( "ANTHROPIC_API_KEY" ) ;
55+ }
56+ }
57+ }
58+
3059/// Sync Claude settings to ~/.claude/settings.json
3160fn sync_claude_settings (
3261 provider : & Provider ,
@@ -69,6 +98,9 @@ fn sync_claude_settings(
6998 settings = provider. settings_config . clone ( ) ;
7099 }
71100
101+ // 清理冲突的认证环境变量
102+ clean_claude_auth_conflict ( & mut settings) ;
103+
72104 // Write settings
73105 let content = serde_json:: to_string_pretty ( & settings) ?;
74106 std:: fs:: write ( & config_path, content) ?;
0 commit comments