diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-19 23:28:03 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-19 23:28:03 +0300 |
| commit | 507b84f2442eecf7422738b66dc29417870cda52 (patch) | |
| tree | 4daa19839a4cf237f1eb3254889dd20246519180 | |
| parent | fd8e2fe8177305c9271d12c90cc6ad2ed73a1673 (diff) | |
config: apply HEXAI_* env even without config file; docs: clarify Copilot key; prefer HEXAI_COPILOT_API_KEY in builders
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | internal/appconfig/config.go | 22 | ||||
| -rw-r--r-- | internal/hexaicli/run.go | 6 | ||||
| -rw-r--r-- | internal/hexailsp/run.go | 6 |
4 files changed, 22 insertions, 14 deletions
@@ -60,7 +60,7 @@ Ensure `HEXAI_OPENAI_API_KEY` (or `OPENAI_API_KEY`) or `COPILOT_API_KEY` is set - `HEXAI_OLLAMA_MODEL`, `HEXAI_OLLAMA_BASE_URL`, `HEXAI_OLLAMA_TEMPERATURE` - API keys: - OpenAI: prefer `HEXAI_OPENAI_API_KEY`, falling back to `OPENAI_API_KEY`. - - Copilot: use `COPILOT_API_KEY`. + - Copilot: prefer `HEXAI_COPILOT_API_KEY`, falling back to `COPILOT_API_KEY`. ### Selecting a provider diff --git a/internal/appconfig/config.go b/internal/appconfig/config.go index 58bcc3a..6d95da2 100644 --- a/internal/appconfig/config.go +++ b/internal/appconfig/config.go @@ -66,18 +66,18 @@ func Load(logger *log.Logger) App { return cfg // Return defaults if no logger is provided (e.g. in tests) } - configPath, err := getConfigPath() - if err != nil { - logger.Printf("%v", err) - return cfg - } - - fileCfg, err := loadFromFile(configPath, logger) - if err != nil { - return cfg - } + configPath, err := getConfigPath() + if err != nil { + logger.Printf("%v", err) + // Even if config path cannot be resolved, still allow env overrides below. + } else { + if fileCfg, err := loadFromFile(configPath, logger); err == nil && fileCfg != nil { + cfg.mergeWith(fileCfg) + } + // When the config file is missing or invalid, we keep defaults and still + // apply any environment overrides below. + } - cfg.mergeWith(fileCfg) // Environment overrides (take precedence over file) if envCfg := loadFromEnv(logger); envCfg != nil { cfg.mergeWith(envCfg) diff --git a/internal/hexaicli/run.go b/internal/hexaicli/run.go index 8cd5c82..14eff4f 100644 --- a/internal/hexaicli/run.go +++ b/internal/hexaicli/run.go @@ -88,7 +88,11 @@ func newClientFromConfig(cfg appconfig.App) (llm.Client, error) { if strings.TrimSpace(oaKey) == "" { oaKey = os.Getenv("OPENAI_API_KEY") } - cpKey := os.Getenv("COPILOT_API_KEY") + // Prefer HEXAI_COPILOT_API_KEY; fall back to COPILOT_API_KEY + cpKey := os.Getenv("HEXAI_COPILOT_API_KEY") + if strings.TrimSpace(cpKey) == "" { + cpKey = os.Getenv("COPILOT_API_KEY") + } return llm.NewFromConfig(llmCfg, oaKey, cpKey) } diff --git a/internal/hexailsp/run.go b/internal/hexailsp/run.go index 0d488f0..366d71c 100644 --- a/internal/hexailsp/run.go +++ b/internal/hexailsp/run.go @@ -82,7 +82,11 @@ func buildClientIfNil(cfg appconfig.App, client llm.Client) llm.Client { if strings.TrimSpace(oaKey) == "" { oaKey = os.Getenv("OPENAI_API_KEY") } - cpKey := os.Getenv("COPILOT_API_KEY") + // Prefer HEXAI_COPILOT_API_KEY; fall back to COPILOT_API_KEY + cpKey := os.Getenv("HEXAI_COPILOT_API_KEY") + if strings.TrimSpace(cpKey) == "" { + cpKey = os.Getenv("COPILOT_API_KEY") + } if c, err := llm.NewFromConfig(llmCfg, oaKey, cpKey); err != nil { logging.Logf("lsp ", "llm disabled: %v", err) return nil |
