55 "fmt"
66 "net/url"
77 "os"
8+ "os/exec"
89 "path/filepath"
910 "runtime"
1011 "strings"
@@ -13,8 +14,8 @@ import (
1314)
1415
1516type ProviderConfig struct {
16- APIKey string `mapstructure:"api_key"`
17- Model string `mapstructure:"model"`
17+ APIKey string `mapstructure:"api_key"`
18+ Model string `mapstructure:"model"`
1819 EndpointURL string `mapstructure:"endpoint_url"`
1920}
2021
@@ -37,7 +38,7 @@ func InitConfig() {
3738 viper .SetDefault ("providers.copilot.model" , "openai/gpt-5-mini" )
3839 } else {
3940 viper .SetDefault ("active_provider" , "openai" )
40- viper .SetDefault ("providers.openai.model" , "gpt-5-mini" )
41+ viper .SetDefault ("providers.openai.model" , "openai/ gpt-5-mini" )
4142 }
4243
4344 viper .AutomaticEnv ()
@@ -90,9 +91,6 @@ func GetAPIKey() (string, error) {
9091 if cfg == nil {
9192 InitConfig ()
9293 }
93- if cfg .ActiveProvider == "copilot" {
94- return LoadGitHubToken ()
95- }
9694
9795 providerConfig , err := GetActiveProviderConfig ()
9896 if err != nil {
@@ -213,12 +211,9 @@ func SetEndpoint(provider, endpoint string) error {
213211}
214212
215213func LoadGitHubToken () (string , error ) {
216- if token := os .Getenv ("GITHUB_TOKEN" ); token != "" {
217- return token , nil
218- }
219-
220- if token := os .Getenv ("GITHUB_MODELS_TOKEN" ); token != "" {
221- return token , nil
214+ tok , err := tryGetTokenFromGHCLI ()
215+ if err == nil && tok != "" {
216+ return tok , nil
222217 }
223218
224219 configDir := getConfigDir ()
@@ -248,20 +243,30 @@ func LoadGitHubToken() (string, error) {
248243 }
249244 }
250245
251- return "" , fmt .Errorf ("GitHub token not found. Please set GITHUB_TOKEN or GITHUB_MODELS_TOKEN environment variable with a Personal Access Token that has 'models' scope" )
246+ return "" , fmt .Errorf ("GitHub token not found via 'gh auth token'; run 'gh auth login' to authenticate the GitHub CLI" )
247+ }
248+ func tryGetTokenFromGHCLI () (string , error ) {
249+ out , err := exec .Command ("gh" , "auth" , "token" ).Output ()
250+ if err != nil {
251+ return "" , err
252+ }
253+ tok := strings .TrimSpace (string (out ))
254+ if tok == "" {
255+ return "" , fmt .Errorf ("gh returned empty token" )
256+ }
257+ return tok , nil
252258}
253259
254260func getConfigDir () string {
255261 if xdgConfig := os .Getenv ("XDG_CONFIG_HOME" ); xdgConfig != "" {
256262 return xdgConfig
257-
258- // WARNING: The code is not woking
259263 } else if runtime .GOOS == "windows" {
260- if localAppData := os .Getenv ( "LOCALAPPDATA" ); localAppData != "" {
261- return localAppData
262- } else {
263- return filepath . Join ( os .Getenv ( "HOME" ), "AppData" , "Local" )
264+ homeDir , err := os .UserHomeDir ()
265+ if err != nil {
266+ fmt . Println ( "Error getting user home directory:" , err )
267+ os .Exit ( 1 )
264268 }
269+ return filepath .Join (homeDir , "AppData" , "Local" )
265270 } else {
266271 return filepath .Join (os .Getenv ("HOME" ), ".config" )
267272 }
0 commit comments