@@ -30,6 +30,7 @@ var UpdateTrayMenu func(string)
3030
3131type ModelConfig struct {
3232 ModelName string `json:"model_name"`
33+ ModelId string `json:"model_id"`
3334 ModelUrl string `json:"model_url"`
3435 ApiKey string `json:"api_key"`
3536 IsCustom bool `json:"is_custom"`
@@ -271,38 +272,35 @@ func (a *App) syncToClaudeSettings(config AppConfig) error {
271272 switch strings .ToLower (selectedModel .ModelName ) {
272273 case "kimi" :
273274 env ["ANTHROPIC_BASE_URL" ] = "https://api.kimi.com/coding"
274- env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = "kimi-k2-thinking"
275- env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = "kimi-k2-thinking"
276- env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = "kimi-k2-thinking"
277- env ["ANTHROPIC_MODEL" ] = "kimi-k2-thinking"
275+ env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = selectedModel . ModelId
276+ env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = selectedModel . ModelId
277+ env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = selectedModel . ModelId
278+ env ["ANTHROPIC_MODEL" ] = selectedModel . ModelId
278279 case "glm" , "glm-4.7" :
279280 env ["ANTHROPIC_BASE_URL" ] = "https://open.bigmodel.cn/api/anthropic"
280- env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = "glm-4.7"
281- env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = "glm-4.7"
282- env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = "glm-4.7"
283- env ["ANTHROPIC_MODEL" ] = "glm-4.7"
281+ env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = selectedModel . ModelId
282+ env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = selectedModel . ModelId
283+ env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = selectedModel . ModelId
284+ env ["ANTHROPIC_MODEL" ] = selectedModel . ModelId
284285 settings ["permissions" ] = map [string ]string {"defaultMode" : "dontAsk" }
285286 case "doubao" :
286287 env ["ANTHROPIC_BASE_URL" ] = "https://ark.cn-beijing.volces.com/api/coding"
287- env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = "doubao-seed-code-preview-latest"
288- env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = "doubao-seed-code-preview-latest"
289- env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = "doubao-seed-code-preview-latest"
290- env ["ANTHROPIC_MODEL" ] = "doubao-seed-code-preview-latest"
288+ env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = selectedModel . ModelId
289+ env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = selectedModel . ModelId
290+ env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = selectedModel . ModelId
291+ env ["ANTHROPIC_MODEL" ] = selectedModel . ModelId
291292 case "minimax" :
292293 env ["ANTHROPIC_BASE_URL" ] = "https://api.minimaxi.com/anthropic"
293- env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = "MiniMax-M2.1"
294- env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = "MiniMax-M2.1"
295- env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = "MiniMax-M2.1"
296- env ["ANTHROPIC_MODEL" ] = "MiniMax-M2.1"
297- env ["ANTHROPIC_SMALL_FAST_MODEL" ] = "MiniMax-M2.1"
294+ env ["ANTHROPIC_DEFAULT_HAIKU_MODEL" ] = selectedModel . ModelId
295+ env ["ANTHROPIC_DEFAULT_OPUS_MODEL" ] = selectedModel . ModelId
296+ env ["ANTHROPIC_DEFAULT_SONNET_MODEL" ] = selectedModel . ModelId
297+ env ["ANTHROPIC_MODEL" ] = selectedModel . ModelId
298+ env ["ANTHROPIC_SMALL_FAST_MODEL" ] = selectedModel . ModelId
298299 env ["API_TIMEOUT_MS" ] = "3000000"
299300 env ["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC" ] = "1"
300- case "aicodemirror" , "aicodemirror-claude" :
301- env ["ANTHROPIC_BASE_URL" ] = selectedModel .ModelUrl
302- env ["ANTHROPIC_MODEL" ] = "Haiku"
303301 default :
304302 env ["ANTHROPIC_BASE_URL" ] = selectedModel .ModelUrl
305- env ["ANTHROPIC_MODEL" ] = selectedModel .ModelName
303+ env ["ANTHROPIC_MODEL" ] = selectedModel .ModelId
306304 }
307305
308306 settings ["env" ] = env
@@ -410,7 +408,7 @@ writeConfigToml:
410408 }
411409
412410 configToml := fmt .Sprintf (`model_provider = "aicodemirror"
413- model = "gpt-5.2-codex "
411+ model = "%s "
414412model_reasoning_effort = "xhigh"
415413disable_response_storage = true
416414preferred_auth_method = "apikey"
@@ -419,7 +417,7 @@ preferred_auth_method = "apikey"
419417name = "aicodemirror"
420418base_url = "%s"
421419wire_api = "responses"
422- ` , baseUrl )
420+ ` , selectedModel . ModelId , baseUrl )
423421
424422 configBytes := []byte (configToml )
425423
@@ -566,6 +564,21 @@ func (a *App) LaunchTool(toolName string, yoloMode bool, projectDir string) {
566564 os .Setenv (envBaseUrl , selectedModel .ModelUrl )
567565 env [envBaseUrl ] = selectedModel .ModelUrl
568566 }
567+
568+ // Set generic model name env var if applicable
569+ if selectedModel .ModelId != "" {
570+ switch strings .ToLower (toolName ) {
571+ case "claude" :
572+ os .Setenv ("ANTHROPIC_MODEL" , selectedModel .ModelId )
573+ env ["ANTHROPIC_MODEL" ] = selectedModel .ModelId
574+ case "gemini" :
575+ os .Setenv ("GOOGLE_GEMINI_MODEL" , selectedModel .ModelId )
576+ env ["GOOGLE_GEMINI_MODEL" ] = selectedModel .ModelId
577+ case "codex" :
578+ os .Setenv ("OPENAI_MODEL" , selectedModel .ModelId )
579+ env ["OPENAI_MODEL" ] = selectedModel .ModelId
580+ }
581+ }
569582
570583 // Tool-specific configurations
571584 switch strings .ToLower (toolName ) {
@@ -638,23 +651,23 @@ func (a *App) LoadConfig() (AppConfig, error) {
638651
639652 // Helper for default models
640653 defaultClaudeModels := []ModelConfig {
641- {ModelName : "Original" , ModelUrl : "" , ApiKey : "" },
642- {ModelName : "GLM" , ModelUrl : "https://open.bigmodel.cn/api/anthropic" , ApiKey : "" },
643- {ModelName : "kimi" , ModelUrl : "https://api.kimi.com/coding" , ApiKey : "" },
644- {ModelName : "doubao" , ModelUrl : "https://ark.cn-beijing.volces.com/api/coding" , ApiKey : "" },
645- {ModelName : "MiniMax" , ModelUrl : "https://api.minimaxi.com/anthropic" , ApiKey : "" },
646- {ModelName : "AICodeMirror" , ModelUrl : "https://api.aicodemirror.com/api/claudecode" , ApiKey : "" },
647- {ModelName : "Custom" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
654+ {ModelName : "Original" , ModelId : "" , ModelUrl : "" , ApiKey : "" },
655+ {ModelName : "GLM" , ModelId : "glm-4.7" , ModelUrl : "https://open.bigmodel.cn/api/anthropic" , ApiKey : "" },
656+ {ModelName : "kimi" , ModelId : "kimi-k2-thinking" , ModelUrl : "https://api.kimi.com/coding" , ApiKey : "" },
657+ {ModelName : "doubao" , ModelId : "doubao-seed-code-preview-latest" , ModelUrl : "https://ark.cn-beijing.volces.com/api/coding" , ApiKey : "" },
658+ {ModelName : "MiniMax" , ModelId : "MiniMax-M2.1" , ModelUrl : "https://api.minimaxi.com/anthropic" , ApiKey : "" },
659+ {ModelName : "AICodeMirror" , ModelId : "Haiku" , ModelUrl : "https://api.aicodemirror.com/api/claudecode" , ApiKey : "" },
660+ {ModelName : "Custom" , ModelId : "" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
648661 }
649662 defaultGeminiModels := []ModelConfig {
650- {ModelName : "Original" , ModelUrl : "" , ApiKey : "" },
651- {ModelName : "AiCodeMirror" , ModelUrl : "https://api.aicodemirror.com/api/gemini" , ApiKey : "" },
652- {ModelName : "Custom" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
663+ {ModelName : "Original" , ModelId : "" , ModelUrl : "" , ApiKey : "" },
664+ {ModelName : "AiCodeMirror" , ModelId : "gemini-2.0-flash-exp" , ModelUrl : "https://api.aicodemirror.com/api/gemini" , ApiKey : "" },
665+ {ModelName : "Custom" , ModelId : "" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
653666 }
654667 defaultCodexModels := []ModelConfig {
655- {ModelName : "Original" , ModelUrl : "" , ApiKey : "" },
656- {ModelName : "AiCodeMirror" , ModelUrl : "https://api.aicodemirror.com/api/codex/backend-api/codex" , ApiKey : "" },
657- {ModelName : "Custom" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
668+ {ModelName : "Original" , ModelId : "" , ModelUrl : "" , ApiKey : "" },
669+ {ModelName : "AiCodeMirror" , ModelId : "gpt-5.2-codex" , ModelUrl : "https://api.aicodemirror.com/api/codex/backend-api/codex" , ApiKey : "" },
670+ {ModelName : "Custom" , ModelId : "" , ModelUrl : "" , ApiKey : "" , IsCustom : true },
658671 }
659672
660673 if _ , err := os .Stat (path ); os .IsNotExist (err ) {
@@ -1080,6 +1093,26 @@ func (a *App) ShowMessage(title, message string) {
10801093 })
10811094}
10821095
1096+ func (a * App ) ClipboardGetText () (string , error ) {
1097+ // Try Wails runtime first
1098+ if a .ctx != nil {
1099+ text , err := runtime .ClipboardGetText (a .ctx )
1100+ if err == nil && text != "" {
1101+ return text , nil
1102+ }
1103+ }
1104+
1105+ // Fallback for macOS: use pbpaste command
1106+ cmd := exec .Command ("pbpaste" )
1107+ var out bytes.Buffer
1108+ cmd .Stdout = & out
1109+ if err := cmd .Run (); err == nil {
1110+ return out .String (), nil
1111+ }
1112+
1113+ return "" , nil
1114+ }
1115+
10831116func (a * App ) ReadBBS () (string , error ) {
10841117 url := "https://raw.githubusercontent.com/RapidAI/cceasy/main/bbs.md"
10851118
0 commit comments