feat: auto-detect provider from ~/.claude/settings.json
Reads ANTHROPIC_BASE_URL and ANTHROPIC_API_KEY from Claude Code's settings.json and registers them as a 'claude' provider. Automatically sets it as the default provider when no custom default is configured. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
aac1de8af6
commit
56847f380a
@@ -101,6 +101,44 @@ impl AppConfig {
|
||||
for (name, provider) in defaults.providers {
|
||||
cfg.providers.entry(name).or_insert(provider);
|
||||
}
|
||||
// Auto-detect provider from ~/.claude/settings.json
|
||||
if let Some(claude_provider) = detect_claude_settings_provider() {
|
||||
cfg.providers.entry("claude".to_string()).or_insert(claude_provider);
|
||||
if cfg.default_provider == defaults.default_provider {
|
||||
cfg.default_provider = "claude".to_string();
|
||||
}
|
||||
}
|
||||
cfg
|
||||
}
|
||||
}
|
||||
|
||||
/// Configuration structure inside `~/.claude/settings.json`.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct ClaudeEnv {
|
||||
#[serde(alias = "ANTHROPIC_BASE_URL")]
|
||||
anthropic_base_url: Option<String>,
|
||||
#[serde(alias = "ANTHROPIC_API_KEY")]
|
||||
anthropic_api_key: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct ClaudeSettings {
|
||||
env: Option<ClaudeEnv>,
|
||||
}
|
||||
|
||||
/// Read `~/.claude/settings.json` and return a `ProviderConfig` if the file
|
||||
/// contains `ANTHROPIC_BASE_URL` and `ANTHROPIC_API_KEY` in its `env` block.
|
||||
fn detect_claude_settings_provider() -> Option<ProviderConfig> {
|
||||
let path = dirs::home_dir()?.join(".claude").join("settings.json");
|
||||
let content = std::fs::read_to_string(&path).ok()?;
|
||||
let settings: ClaudeSettings = serde_json::from_str(&content).ok()?;
|
||||
let env = settings.env?;
|
||||
let base_url = env.anthropic_base_url?;
|
||||
let _api_key = env.anthropic_api_key?; // presence check — stored as env var, not in config.
|
||||
Some(ProviderConfig {
|
||||
api_base: base_url,
|
||||
api_key_env: Some("ANTHROPIC_API_KEY".to_string()),
|
||||
default_model: None,
|
||||
default_api_key: None,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user