Skip to content

Commit d3f07c0

Browse files
committed
fix(cli): wire config.toml into backend creation
config.toml was defined but never read at startup. Now the CLI: 1. Loads ~/.config/crab-code/config.toml 2. Merges with priority: CLI args > settings.json > config.toml 3. Provider/model/api_key/api_base_url all resolved correctly This enables DeepSeek/OpenAI/Ollama via config.toml profiles.
1 parent 174010e commit d3f07c0

1 file changed

Lines changed: 26 additions & 11 deletions

File tree

crates/cli/src/main.rs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -574,23 +574,32 @@ async fn run(cli: &Cli, resume_session_id: Option<String>) -> anyhow::Result<()>
574574
}
575575
}
576576

577-
// CLI args override settings; non-default CLI provider overrides settings
578-
let provider = if cli.provider == "anthropic" {
579-
settings
580-
.api_provider
581-
.clone()
582-
.unwrap_or_else(|| cli.provider.clone())
583-
} else {
577+
// Load config.toml for multi-provider support
578+
let config_toml = crab_config::config_toml::load_config_toml().unwrap_or_default();
579+
let provider_override = (cli.provider != "anthropic").then_some(cli.provider.as_str());
580+
let toml_settings =
581+
crab_config::config_toml::config_toml_to_settings(&config_toml, provider_override);
582+
583+
// Merge priority: CLI args > settings.json > config.toml > defaults
584+
let provider = if cli.provider != "anthropic" {
584585
cli.provider.clone()
586+
} else if let Some(ref p) = settings.api_provider {
587+
p.clone()
588+
} else if let Some(ref p) = toml_settings.api_provider {
589+
p.clone()
590+
} else {
591+
"anthropic".to_string()
585592
};
593+
586594
let model_id = cli
587595
.model
588596
.as_deref()
589597
.map(resolve_model_alias)
590598
.or_else(|| settings.model.clone())
599+
.or_else(|| toml_settings.model.clone())
591600
.unwrap_or_else(|| {
592-
if provider == "openai" {
593-
"gpt-4o".to_string()
601+
if provider == "openai" || provider == "deepseek" || provider == "ollama" {
602+
"deepseek-chat".to_string()
594603
} else {
595604
"claude-sonnet-4-6".to_string()
596605
}
@@ -599,8 +608,14 @@ async fn run(cli: &Cli, resume_session_id: Option<String>) -> anyhow::Result<()>
599608
// Build effective settings for backend creation
600609
let effective_settings = crab_config::Settings {
601610
api_provider: Some(provider.clone()),
602-
api_base_url: settings.api_base_url.clone(),
603-
api_key: settings.api_key.clone(),
611+
api_base_url: settings
612+
.api_base_url
613+
.clone()
614+
.or_else(|| toml_settings.api_base_url.clone()),
615+
api_key: settings
616+
.api_key
617+
.clone()
618+
.or_else(|| toml_settings.api_key.clone()),
604619
model: Some(model_id.clone()),
605620
..settings.clone()
606621
};

0 commit comments

Comments
 (0)