mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-05 02:30:26 +08:00
- Move all source files to internal/{app,backend,config,executor,logger,parser,utils}
- Integrate third-party libraries: zerolog, goccy/go-json, gopsutil, cobra/viper
- Add comprehensive unit tests for utils package (94.3% coverage)
- Add performance benchmarks for string operations
- Fix error display: cleanup warnings no longer pollute Recent Errors
- Add GitHub Actions CI workflow
- Add Makefile for build automation
- Add README documentation
Generated with SWE-Agent.ai
Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
48 lines
1011 B
Go
48 lines
1011 B
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// NewViper returns a viper instance configured for CODEAGENT_* environment
|
|
// variables and an optional config file.
|
|
//
|
|
// Search order when configFile is empty:
|
|
// - $HOME/.codeagent/config.(yaml|yml|json|toml|...)
|
|
func NewViper(configFile string) (*viper.Viper, error) {
|
|
v := viper.New()
|
|
v.SetEnvPrefix("CODEAGENT")
|
|
v.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
|
|
v.AutomaticEnv()
|
|
|
|
if strings.TrimSpace(configFile) != "" {
|
|
v.SetConfigFile(configFile)
|
|
if err := v.ReadInConfig(); err != nil {
|
|
return nil, err
|
|
}
|
|
return v, nil
|
|
}
|
|
|
|
home, err := os.UserHomeDir()
|
|
if err != nil || strings.TrimSpace(home) == "" {
|
|
return v, nil
|
|
}
|
|
|
|
v.SetConfigName("config")
|
|
v.AddConfigPath(filepath.Join(home, ".codeagent"))
|
|
if err := v.ReadInConfig(); err != nil {
|
|
var notFound viper.ConfigFileNotFoundError
|
|
if errors.As(err, ¬Found) {
|
|
return v, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return v, nil
|
|
}
|