package cmd import ( "context" "fmt" "strings" "github.com/router-for-me/CLIProxyAPI/v6/internal/config" sdkAuth "github.com/router-for-me/CLIProxyAPI/v6/sdk/auth" ) // DoKiloLogin handles the Kilo device flow using the shared authentication manager. // It initiates the device-based authentication process for Kilo AI services and saves // the authentication tokens to the configured auth directory. // // Parameters: // - cfg: The application configuration // - options: Login options including browser behavior and prompts func DoKiloLogin(cfg *config.Config, options *LoginOptions) { if options == nil { options = &LoginOptions{} } manager := newAuthManager() promptFn := options.Prompt if promptFn == nil { promptFn = func(prompt string) (string, error) { fmt.Print(prompt) var value string fmt.Scanln(&value) return strings.TrimSpace(value), nil } } authOpts := &sdkAuth.LoginOptions{ NoBrowser: options.NoBrowser, CallbackPort: options.CallbackPort, Metadata: map[string]string{}, Prompt: promptFn, } _, savedPath, err := manager.Login(context.Background(), "kilo", cfg, authOpts) if err != nil { fmt.Printf("Kilo authentication failed: %v\n", err) return } if savedPath != "" { fmt.Printf("Authentication saved to %s\n", savedPath) } fmt.Println("Kilo authentication successful!") }