@@ -21,147 +21,186 @@ var Cmd = &cobra.Command{
2121}
2222
2323var (
24- getCmd = & cobra.Command {
25- Use : "get" ,
26- Short : "获取配置" ,
27- RunE : func (cmd * cobra.Command , args []string ) error {
28- c := client .NewClient ()
29- ctx := context .Background ()
30-
31- resp , err := c .Get (ctx , "/config" )
32- if err != nil {
33- return err
34- }
35-
36- var cfg types.Config
37- if err := json .Unmarshal (resp , & cfg ); err != nil {
38- return err
39- }
40-
41- if config .Get ().JSON {
42- data , _ := json .MarshalIndent (cfg , "" , " " )
43- fmt .Println (string (data ))
44- return nil
45- }
46-
47- fmt .Println ("当前配置:" )
48- fmt .Printf (" 默认模型:%s\n " , cfg .DefaultModel )
49- fmt .Printf (" 主题:%s\n " , cfg .Theme )
50- fmt .Printf (" 语言:%s\n " , cfg .Language )
51- fmt .Printf (" 最大 Token:%d\n " , cfg .MaxTokens )
52- fmt .Printf (" 温度:%.2f\n " , cfg .Temperature )
53- if len (cfg .AutoApprove ) > 0 {
54- fmt .Printf (" 自动批准:%s\n " , strings .Join (cfg .AutoApprove , ", " ))
55- }
56- return nil
57- },
58- }
59-
60- setCmd = & cobra.Command {
61- Use : "set" ,
62- Short : "更新配置" ,
63- RunE : func (cmd * cobra.Command , args []string ) error {
64- c := client .NewClient ()
65- ctx := context .Background ()
66-
67- // 构建更新请求
68- updates := make (map [string ]interface {})
69-
70- if theme != "" {
71- updates ["theme" ] = theme
72- }
73- if language != "" {
74- updates ["language" ] = language
75- }
76- if defaultModel != "" {
77- updates ["defaultModel" ] = defaultModel
78- }
79- if maxTokens > 0 {
80- updates ["maxTokens" ] = maxTokens
81- }
82- if temperature > 0 {
83- updates ["temperature" ] = temperature
84- }
85- if len (autoApprove ) > 0 {
86- updates ["autoApprove" ] = autoApprove
87- }
88-
89- if len (updates ) == 0 {
90- return fmt .Errorf ("请提供至少一个要更新的配置项" )
91- }
92-
93- resp , err := c .Patch (ctx , "/config" , updates )
94- if err != nil {
95- return err
96- }
97-
98- var cfg types.Config
99- if err := json .Unmarshal (resp , & cfg ); err != nil {
100- return err
101- }
102-
103- fmt .Println ("配置已更新" )
104- return nil
105- },
106- }
107-
108- providersCmd = & cobra.Command {
109- Use : "providers" ,
110- Short : "列出提供商和默认模型" ,
111- RunE : func (cmd * cobra.Command , args []string ) error {
112- c := client .NewClient ()
113- ctx := context .Background ()
114-
115- resp , err := c .Get (ctx , "/config/providers" )
116- if err != nil {
117- return err
118- }
119-
120- var result struct {
121- Providers []types.Provider `json:"providers"`
122- Default map [string ]string `json:"default"`
123- }
124- if err := json .Unmarshal (resp , & result ); err != nil {
125- return err
126- }
127-
128- if config .Get ().JSON {
129- data , _ := json .MarshalIndent (result , "" , " " )
130- fmt .Println (string (data ))
131- return nil
132- }
133-
134- fmt .Println ("可用提供商:" )
135- for _ , p := range result .Providers {
136- fmt .Printf (" - %s (%s)\n " , p .Name , p .ID )
137- }
138-
139- fmt .Println ("\n 默认模型:" )
140- for provider , model := range result .Default {
141- fmt .Printf (" %s: %s\n " , provider , model )
142- }
143-
144- return nil
145- },
146- }
147-
148- theme string
149- language string
150- defaultModel string
151- maxTokens int
152- temperature float64
153- autoApprove []string
24+ getCmd = & cobra.Command {
25+ Use : "get" ,
26+ Short : "获取配置" ,
27+ RunE : func (cmd * cobra.Command , args []string ) error {
28+ c := client .NewClient ()
29+ ctx := context .Background ()
30+
31+ resp , err := c .Get (ctx , "/config" )
32+ if err != nil {
33+ return err
34+ }
35+
36+ var cfg types.Config
37+ if err := json .Unmarshal (resp , & cfg ); err != nil {
38+ return fmt .Errorf ("解析配置失败:%w" , err )
39+ }
40+
41+ if config .Get ().JSON {
42+ data , _ := json .MarshalIndent (cfg , "" , " " )
43+ fmt .Println (string (data ))
44+ return nil
45+ }
46+
47+ fmt .Println ("当前配置:" )
48+ fmt .Printf (" 默认模型:%s\n " , cfg .DefaultModel )
49+ fmt .Printf (" 主题:%s\n " , cfg .Theme )
50+ fmt .Printf (" 语言:%s\n " , cfg .Language )
51+ fmt .Printf (" 最大 Token:%d\n " , cfg .MaxTokens )
52+ fmt .Printf (" 温度:%.2f\n " , cfg .Temperature )
53+ if len (cfg .AutoApprove ) > 0 {
54+ fmt .Printf (" 自动批准:%s\n " , strings .Join (cfg .AutoApprove , ", " ))
55+ }
56+ return nil
57+ },
58+ }
59+
60+ setCmd = & cobra.Command {
61+ Use : "set" ,
62+ Short : "更新配置" ,
63+ RunE : func (cmd * cobra.Command , args []string ) error {
64+ c := client .NewClient ()
65+ ctx := context .Background ()
66+
67+ // 构建更新请求
68+ updates := make (map [string ]interface {})
69+
70+ if theme != "" {
71+ updates ["theme" ] = theme
72+ }
73+ if language != "" {
74+ updates ["language" ] = language
75+ }
76+ if defaultModel != "" {
77+ updates ["defaultModel" ] = defaultModel
78+ }
79+ if maxTokens > 0 {
80+ updates ["maxTokens" ] = maxTokens
81+ }
82+ if temperature > 0 {
83+ updates ["temperature" ] = temperature
84+ }
85+ if len (autoApprove ) > 0 {
86+ updates ["autoApprove" ] = autoApprove
87+ }
88+
89+ if len (updates ) == 0 {
90+ return fmt .Errorf ("请提供至少一个要更新的配置项" )
91+ }
92+
93+ resp , err := c .Patch (ctx , "/config" , updates )
94+ if err != nil {
95+ return err
96+ }
97+
98+ var cfg types.Config
99+ if err := json .Unmarshal (resp , & cfg ); err != nil {
100+ return fmt .Errorf ("解析响应失败:%w" , err )
101+ }
102+
103+ fmt .Println ("配置已更新" )
104+ return nil
105+ },
106+ }
107+
108+ providersCmd = & cobra.Command {
109+ Use : "providers" ,
110+ Short : "列出提供商和默认模型" ,
111+ RunE : func (cmd * cobra.Command , args []string ) error {
112+ c := client .NewClient ()
113+ ctx := context .Background ()
114+
115+ resp , err := c .Get (ctx , "/config/providers" )
116+ if err != nil {
117+ return err
118+ }
119+
120+ // 尝试多种 JSON 结构
121+ var providers []types.Provider
122+ var defaultMap map [string ]string
123+
124+ // 尝试解析为完整结构
125+ var result1 struct {
126+ Providers []types.Provider `json:"providers"`
127+ Default map [string ]string `json:"default"`
128+ }
129+ if err := json .Unmarshal (resp , & result1 ); err == nil {
130+ providers = result1 .Providers
131+ defaultMap = result1 .Default
132+ } else {
133+ // 尝试解析为 map
134+ var result2 map [string ]interface {}
135+ if err := json .Unmarshal (resp , & result2 ); err == nil {
136+ if v , ok := result2 ["providers" ].([]interface {}); ok {
137+ for _ , item := range v {
138+ if data , err := json .Marshal (item ); err == nil {
139+ var p types.Provider
140+ if err := json .Unmarshal (data , & p ); err == nil {
141+ providers = append (providers , p )
142+ }
143+ }
144+ }
145+ }
146+ if v , ok := result2 ["default" ].(map [string ]interface {}); ok {
147+ defaultMap = make (map [string ]string )
148+ for k , val := range v {
149+ if s , ok := val .(string ); ok {
150+ defaultMap [k ] = s
151+ }
152+ }
153+ }
154+ } else {
155+ // 尝试直接解析为 providers 数组
156+ if err := json .Unmarshal (resp , & providers ); err != nil {
157+ return fmt .Errorf ("解析提供商列表失败:%w" , err )
158+ }
159+ }
160+ }
161+
162+ if config .Get ().JSON {
163+ data , _ := json .MarshalIndent (map [string ]interface {}{
164+ "providers" : providers ,
165+ "default" : defaultMap ,
166+ }, "" , " " )
167+ fmt .Println (string (data ))
168+ return nil
169+ }
170+
171+ fmt .Println ("可用提供商:" )
172+ for _ , p := range providers {
173+ fmt .Printf (" - %s (%s)\n " , p .Name , p .ID )
174+ }
175+
176+ if len (defaultMap ) > 0 {
177+ fmt .Println ("\n 默认模型:" )
178+ for provider , model := range defaultMap {
179+ fmt .Printf (" %s: %s\n " , provider , model )
180+ }
181+ }
182+
183+ return nil
184+ },
185+ }
186+
187+ theme string
188+ language string
189+ defaultModel string
190+ maxTokens int
191+ temperature float64
192+ autoApprove []string
154193)
155194
156195func init () {
157- Cmd .AddCommand (getCmd )
158- Cmd .AddCommand (setCmd )
159- Cmd .AddCommand (providersCmd )
160-
161- setCmd .Flags ().StringVar (& theme , "theme" , "" , "主题名称" )
162- setCmd .Flags ().StringVar (& language , "language" , "" , "语言设置" )
163- setCmd .Flags ().StringVar (& defaultModel , "model" , "" , "默认模型" )
164- setCmd .Flags ().IntVar (& maxTokens , "max-tokens" , 0 , "最大 Token 数" )
165- setCmd .Flags ().Float64Var (& temperature , "temperature" , 0 , "温度参数" )
166- setCmd .Flags ().StringSliceVar (& autoApprove , "auto-approve" , nil , "自动批准的工具列表" )
196+ Cmd .AddCommand (getCmd )
197+ Cmd .AddCommand (setCmd )
198+ Cmd .AddCommand (providersCmd )
199+
200+ setCmd .Flags ().StringVar (& theme , "theme" , "" , "主题名称" )
201+ setCmd .Flags ().StringVar (& language , "language" , "" , "语言设置" )
202+ setCmd .Flags ().StringVar (& defaultModel , "model" , "" , "默认模型" )
203+ setCmd .Flags ().IntVar (& maxTokens , "max-tokens" , 0 , "最大 Token 数" )
204+ setCmd .Flags ().Float64Var (& temperature , "temperature" , 0 , "温度参数" )
205+ setCmd .Flags ().StringSliceVar (& autoApprove , "auto-approve" , nil , "自动批准的工具列表" )
167206}
0 commit comments