@@ -12,6 +12,7 @@ import (
1212 "github.com/clovapi/switcher/internal/apistyle"
1313 "github.com/clovapi/switcher/internal/apply"
1414 "github.com/clovapi/switcher/internal/cliswitch"
15+ "github.com/clovapi/switcher/internal/desktop"
1516 "github.com/clovapi/switcher/internal/profile"
1617 "github.com/clovapi/switcher/internal/syslog"
1718)
@@ -27,14 +28,11 @@ func runSwitch(sc *bufio.Scanner, s *profile.Store, kind agentkind.Kind, resetFl
2728 if strings .TrimSpace (providerFlag ) != "" || strings .TrimSpace (vendorFlag ) != "" || strings .TrimSpace (modelFlag ) != "" {
2829 return fmt .Errorf ("cannot use --reset with --provider, --vendor or --model" )
2930 }
30- if err := apply . ResetDefault (kind ); err != nil {
31+ if err := desktop . ResetCLIToDefault (kind ); err != nil {
3132 return err
3233 }
3334 syslog .LogCLIReset (kind )
34- if err := clearActiveBinding (kind ); err != nil {
35- return err
36- }
37- fmt .Printf ("Reset %s to default (cleared clovapi relay bindings).\n " , kind )
35+ fmt .Printf ("Reset %s to default (restored backup when available; otherwise cleared clovapi relay bindings).\n " , kind )
3836 return nil
3937 }
4038
@@ -57,13 +55,10 @@ func runSwitch(sc *bufio.Scanner, s *profile.Store, kind agentkind.Kind, resetFl
5755 return err
5856 } else if ok {
5957 if picked .reset {
60- if err := apply .ResetDefault (kind ); err != nil {
61- return err
62- }
63- if err := clearActiveBinding (kind ); err != nil {
58+ if err := desktop .ResetCLIToDefault (kind ); err != nil {
6459 return err
6560 }
66- fmt .Printf ("Reset %s to default (cleared clovapi relay bindings).\n " , kind )
61+ fmt .Printf ("Reset %s to default (restored backup when available; otherwise cleared clovapi relay bindings).\n " , kind )
6762 return nil
6863 }
6964 return applyProviderModelSwitch (kind , picked .selection .ProviderID , picked .selection .ModelID )
@@ -76,40 +71,23 @@ func runSwitch(sc *bufio.Scanner, s *profile.Store, kind agentkind.Kind, resetFl
7671 }
7772
7873 if ! switchNeedsInteractive (sc , s , kind , bindingFlag , providerFlag , vendorFlag , modelFlag , directBaseURL , positional ) {
79- return fmt .Errorf ("no model selected for %s — pass Vendor/model, or --vendor with --model, or --binding" , kind )
74+ return fmt .Errorf ("no model selected for %s - pass Vendor/model, or --vendor with --model, or --binding" , kind )
8075 }
8176
8277 picked , err := promptSwitchForCLI (sc , kind , s )
8378 if err != nil {
8479 return err
8580 }
8681 if picked .reset {
87- if err := apply .ResetDefault (kind ); err != nil {
88- return err
89- }
90- if err := clearActiveBinding (kind ); err != nil {
82+ if err := desktop .ResetCLIToDefault (kind ); err != nil {
9183 return err
9284 }
93- fmt .Printf ("Reset %s to default (cleared clovapi relay bindings).\n " , kind )
85+ fmt .Printf ("Reset %s to default (restored backup when available; otherwise cleared clovapi relay bindings).\n " , kind )
9486 return nil
9587 }
9688 return applyProviderModelSwitch (kind , picked .selection .ProviderID , picked .selection .ModelID )
9789}
9890
99- func clearActiveBinding (kind agentkind.Kind ) error {
100- _ , err := profile .WithLockedStore (func (s * profile.Store ) (bool , error ) {
101- if s .Active == nil {
102- return false , nil
103- }
104- if _ , ok := s .Active [string (kind )]; ! ok {
105- return false , nil
106- }
107- s .ClearActive (string (kind ))
108- return true , nil
109- })
110- return err
111- }
112-
11391type switchPick struct {
11492 selection profile.ActiveSelection
11593 reset bool
@@ -118,7 +96,7 @@ type switchPick struct {
11896func promptSwitchForCLI (sc * bufio.Scanner , kind agentkind.Kind , s * profile.Store ) (switchPick , error ) {
11997 vendors := cliswitch .VendorsForCLI (s , kind )
12098 if len (vendors ) == 0 {
121- return switchPick {}, fmt .Errorf ("no compatible vendors for %s — configure providers in the desktop app or profiles.json" , kind )
99+ return switchPick {}, fmt .Errorf ("no compatible vendors for %s - configure providers in the desktop app or profiles.json" , kind )
122100 }
123101
124102 fmt .Println ()
@@ -154,7 +132,7 @@ func promptSwitchForCLI(sc *bufio.Scanner, kind agentkind.Kind, s *profile.Store
154132 return switchPick {reset : true }, nil
155133 }
156134 if n < 1 || n > len (vendorPicks ) {
157- return switchPick {}, fmt .Errorf ("choose 0– %d" , len (vendorPicks ))
135+ return switchPick {}, fmt .Errorf ("choose 0- %d" , len (vendorPicks ))
158136 }
159137 return promptModelForVendor (sc , kind , s , vendorPicks [n - 1 ], activeProvider , activeModel , hasActive )
160138 }
@@ -218,7 +196,7 @@ func promptModelForVendor(sc *bufio.Scanner, kind agentkind.Kind, s *profile.Sto
218196 }
219197 if n , err := strconv .Atoi (line ); err == nil {
220198 if n < 1 || n > len (modelPicks ) {
221- return switchPick {}, fmt .Errorf ("choose 1– %d" , len (modelPicks ))
199+ return switchPick {}, fmt .Errorf ("choose 1- %d" , len (modelPicks ))
222200 }
223201 modelID := strings .TrimSpace (modelPicks [n - 1 ].ID )
224202 selection , err := cliswitch .ResolveSelection (s , kind , vendorName , modelID )
@@ -253,7 +231,7 @@ func modelStyleShow(m profile.Model) string {
253231 if strings .TrimSpace (string (m .APIStyle )) != "" {
254232 return string (m .APIStyle )
255233 }
256- return "— "
234+ return "- "
257235}
258236
259237func resolveSwitchSelectionOrError (s * profile.Store , kind agentkind.Kind , providerFlag , vendorFlag , modelFlag , bindingFlag , positional string ) (profile.ActiveSelection , error ) {
@@ -349,6 +327,9 @@ func applyDirectToCLI(kind agentkind.Kind, baseURL, apiKey, model, styleStr stri
349327 if ! apply .KindSupportsStyle (kind , p .APIStyle ) {
350328 return fmt .Errorf ("cli %q does not support api_style %q (supported here: %s)" , kind , p .APIStyle , styleChoices (kind ))
351329 }
330+ if err := desktop .EnsureCLIBackup (kind ); err != nil {
331+ return err
332+ }
352333 if err := apply .Apply (p ); err != nil {
353334 return err
354335 }
0 commit comments