diff --git a/pkg/channels/base_test.go b/pkg/channels/base_test.go
index f82b04c46..78c6d1d66 100644
--- a/pkg/channels/base_test.go
+++ b/pkg/channels/base_test.go
@@ -50,4 +50,3 @@ func TestBaseChannelIsAllowed(t *testing.T) {
})
}
}
-
diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go
index 0a5e7b56f..9320ce0f2 100644
--- a/pkg/config/config_test.go
+++ b/pkg/config/config_test.go
@@ -136,11 +136,11 @@ func TestDefaultConfig_WebTools(t *testing.T) {
cfg := DefaultConfig()
// Verify web tools defaults
- if cfg.Tools.Web.Search.MaxResults != 5 {
- t.Error("Expected MaxResults 5, got ", cfg.Tools.Web.Search.MaxResults)
+ if cfg.Tools.Web.Brave.MaxResults != 5 {
+ t.Error("Expected Brave MaxResults 5, got ", cfg.Tools.Web.Brave.MaxResults)
}
- if cfg.Tools.Web.Search.APIKey != "" {
- t.Error("Search API key should be empty by default")
+ if cfg.Tools.Web.Brave.APIKey != "" {
+ t.Error("Brave API key should be empty by default")
}
}
diff --git a/pkg/tools/web.go b/pkg/tools/web.go
index 6fc89c95b..804d9d168 100644
--- a/pkg/tools/web.go
+++ b/pkg/tools/web.go
@@ -114,7 +114,7 @@ func (p *DuckDuckGoSearchProvider) Search(ctx context.Context, query string, cou
func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query string) (string, error) {
// Simple regex based extraction for DDG HTML
// Strategy: Find all result containers or key anchors directly
-
+
// Try finding the result links directly first, as they are the most critical
// Pattern: Title
// The previous regex was a bit strict. Let's make it more flexible for attributes order/content
@@ -133,14 +133,14 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query
// But simple global search for snippets might mismatch order.
// Since we only have the raw HTML string, let's just extract snippets globally and assume order matches (risky but simple for regex)
// Or better: Let's assume the snippet follows the link in the HTML
-
+
// A better regex approach: iterate through text and find matches in order
// But for now, let's grab all snippets too
reSnippet := regexp.MustCompile(`([\s\S]*?)`)
snippetMatches := reSnippet.FindAllStringSubmatch(html, count+5)
maxItems := min(len(matches), count)
-
+
for i := 0; i < maxItems; i++ {
urlStr := matches[i][1]
title := stripTags(matches[i][2])
@@ -157,7 +157,7 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query
}
lines = append(lines, fmt.Sprintf("%d. %s\n %s", i+1, title, urlStr))
-
+
// Attempt to attach snippet if available and index aligns
if i < len(snippetMatches) {
snippet := stripTags(snippetMatches[i][1])
diff --git a/pkg/tools/web_test.go b/pkg/tools/web_test.go
index 30bc7d991..a526ea34a 100644
--- a/pkg/tools/web_test.go
+++ b/pkg/tools/web_test.go
@@ -173,30 +173,23 @@ func TestWebTool_WebFetch_Truncation(t *testing.T) {
}
}
-// TestWebTool_WebSearch_NoApiKey verifies error handling when API key is missing
+// TestWebTool_WebSearch_NoApiKey verifies that no tool is created when API key is missing
func TestWebTool_WebSearch_NoApiKey(t *testing.T) {
- tool := NewWebSearchTool("", 5)
- ctx := context.Background()
- args := map[string]interface{}{
- "query": "test",
+ tool := NewWebSearchTool(WebSearchToolOptions{BraveEnabled: true, BraveAPIKey: ""})
+ if tool != nil {
+ t.Errorf("Expected nil tool when Brave API key is empty")
}
- result := tool.Execute(ctx, args)
-
- // Should return error result
- if !result.IsError {
- t.Errorf("Expected error when API key is missing")
- }
-
- // Should mention missing API key
- if !strings.Contains(result.ForLLM, "BRAVE_API_KEY") && !strings.Contains(result.ForUser, "BRAVE_API_KEY") {
- t.Errorf("Expected API key error message, got ForLLM: %s", result.ForLLM)
+ // Also nil when nothing is enabled
+ tool = NewWebSearchTool(WebSearchToolOptions{})
+ if tool != nil {
+ t.Errorf("Expected nil tool when no provider is enabled")
}
}
// TestWebTool_WebSearch_MissingQuery verifies error handling for missing query
func TestWebTool_WebSearch_MissingQuery(t *testing.T) {
- tool := NewWebSearchTool("test-key", 5)
+ tool := NewWebSearchTool(WebSearchToolOptions{BraveEnabled: true, BraveAPIKey: "test-key", BraveMaxResults: 5})
ctx := context.Background()
args := map[string]interface{}{}