diff --git a/pkg/workflow/mcp_config_serena_renderer.go b/pkg/workflow/mcp_config_serena_renderer.go index 69507781f2..bb523c60b1 100644 --- a/pkg/workflow/mcp_config_serena_renderer.go +++ b/pkg/workflow/mcp_config_serena_renderer.go @@ -15,9 +15,22 @@ func selectSerenaContainer(serenaTool any) string { // Extract languages from the serena tool configuration var requestedLanguages []string - if toolMap, ok := serenaTool.(map[string]any); ok { + // Handle different input formats + switch tool := serenaTool.(type) { + case []any: + // Direct array format (from ToMap conversion of short syntax) + for _, lang := range tool { + if langStr, ok := lang.(string); ok { + requestedLanguages = append(requestedLanguages, langStr) + } + } + case []string: + // String array format (another possible array representation) + requestedLanguages = append(requestedLanguages, tool...) + case map[string]any: + // Map format with language configuration // Check for short syntax (array of language names) - if langs, ok := toolMap["langs"].([]any); ok { + if langs, ok := tool["langs"].([]any); ok { for _, lang := range langs { if langStr, ok := lang.(string); ok { requestedLanguages = append(requestedLanguages, langStr) @@ -26,18 +39,16 @@ func selectSerenaContainer(serenaTool any) string { } // Check for detailed language configuration - if langs, ok := toolMap["languages"].(map[string]any); ok { + if langs, ok := tool["languages"].(map[string]any); ok { for langName := range langs { requestedLanguages = append(requestedLanguages, langName) } } - } - - // If we parsed serena from SerenaToolConfig - if serenaConfig, ok := serenaTool.(*SerenaToolConfig); ok { - requestedLanguages = append(requestedLanguages, serenaConfig.ShortSyntax...) - if serenaConfig.Languages != nil { - for langName := range serenaConfig.Languages { + case *SerenaToolConfig: + // SerenaToolConfig struct format + requestedLanguages = append(requestedLanguages, tool.ShortSyntax...) + if tool.Languages != nil { + for langName := range tool.Languages { requestedLanguages = append(requestedLanguages, langName) } } diff --git a/pkg/workflow/serena_container_selection_test.go b/pkg/workflow/serena_container_selection_test.go index 78da04d2ec..f95ebb9b01 100644 --- a/pkg/workflow/serena_container_selection_test.go +++ b/pkg/workflow/serena_container_selection_test.go @@ -63,6 +63,26 @@ func TestSelectSerenaContainer(t *testing.T) { }, expectedContainer: constants.DefaultSerenaMCPServerContainer, }, + { + name: "array format with go - uses default", + serenaTool: []any{"go"}, + expectedContainer: constants.DefaultSerenaMCPServerContainer, + }, + { + name: "string array format with go - uses default", + serenaTool: []string{"go"}, + expectedContainer: constants.DefaultSerenaMCPServerContainer, + }, + { + name: "array with mixed types - only extracts strings", + serenaTool: []any{"go", 123, nil, "typescript"}, + expectedContainer: constants.DefaultSerenaMCPServerContainer, + }, + { + name: "array with only non-strings - uses default", + serenaTool: []any{123, nil, true}, + expectedContainer: constants.DefaultSerenaMCPServerContainer, + }, } for _, tt := range tests {