Skip to content

Commit 6f94d53

Browse files
idoubiclaude
andcommitted
fix: config priority — settings.json > env vars > defaults
Previously env vars (CODEANY_MODEL, CODEANY_BASE_URL, etc.) always overrode settings.json, which meant /login config was ignored. Now the priority is: 1. settings.json / config.yaml (user's explicit config — highest) 2. Project .codeany/settings.json 3. Environment variables (CODEANY_*, ANTHROPIC_*) 4. Defaults (sonnet-4-6) Also added CODEANY_PROVIDER env var support. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9374d06 commit 6f94d53

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

internal/config/config.go

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -262,35 +262,50 @@ func mergeConfig(dst, src *Config) {
262262
}
263263
}
264264

265+
// applyEnvOverrides fills in values from environment variables,
266+
// but ONLY if the config file didn't already set them.
267+
// Priority: settings.json > project config > env vars > defaults
265268
func applyEnvOverrides(cfg *Config) {
266-
envKeys := []string{"CODEANY_API_KEY", "ANTHROPIC_API_KEY"}
267-
for _, key := range envKeys {
268-
if v := os.Getenv(key); v != "" {
269-
cfg.APIKey = v
270-
break
269+
if cfg.APIKey == "" {
270+
for _, key := range []string{"CODEANY_API_KEY", "ANTHROPIC_API_KEY"} {
271+
if v := os.Getenv(key); v != "" {
272+
cfg.APIKey = v
273+
break
274+
}
271275
}
272276
}
273277

274-
envURLs := []string{"CODEANY_BASE_URL", "ANTHROPIC_BASE_URL"}
275-
for _, key := range envURLs {
276-
if v := os.Getenv(key); v != "" {
277-
cfg.BaseURL = v
278-
break
278+
if cfg.BaseURL == "" {
279+
for _, key := range []string{"CODEANY_BASE_URL", "ANTHROPIC_BASE_URL"} {
280+
if v := os.Getenv(key); v != "" {
281+
cfg.BaseURL = v
282+
break
283+
}
279284
}
280285
}
281286

282-
envModels := []string{"CODEANY_MODEL", "ANTHROPIC_MODEL"}
283-
for _, key := range envModels {
284-
if v := os.Getenv(key); v != "" {
285-
cfg.Model = v
286-
break
287+
// Model: only use env if config didn't set one (or it's still the default)
288+
if cfg.Model == "" || cfg.Model == "sonnet-4-6" {
289+
for _, key := range []string{"CODEANY_MODEL", "ANTHROPIC_MODEL"} {
290+
if v := os.Getenv(key); v != "" {
291+
cfg.Model = v
292+
break
293+
}
287294
}
288295
}
289296

290-
if v := os.Getenv("HTTPS_PROXY"); v != "" {
291-
cfg.ProxyURL = v
292-
} else if v := os.Getenv("HTTP_PROXY"); v != "" {
293-
cfg.ProxyURL = v
297+
if cfg.Provider == "" {
298+
if v := os.Getenv("CODEANY_PROVIDER"); v != "" {
299+
cfg.Provider = v
300+
}
301+
}
302+
303+
if cfg.ProxyURL == "" {
304+
if v := os.Getenv("HTTPS_PROXY"); v != "" {
305+
cfg.ProxyURL = v
306+
} else if v := os.Getenv("HTTP_PROXY"); v != "" {
307+
cfg.ProxyURL = v
308+
}
294309
}
295310
}
296311

0 commit comments

Comments
 (0)