// src/agents/brave-tools.ts:17-89
export function createBraveTools() {
return {
webSearch: tool({
description: "Search the web using Brave Search API for real-time information",
inputSchema: z.object({
query: z.string(),
numResults: z.number().min(1).max(20).default(5),
category: z.enum(["web", "news", "research", "documentation"]).default("web"),
}),
execute: async ({ query, numResults, category }) => {
const results = await braveWebSearch({
query,
count: Math.min(numResults, 20),
freshness: mapCategoryToFreshness(category),
});
return JSON.stringify({
query,
results: results.map(r => ({
url: r.url,
title: r.title,
snippet: r.snippet,
content: r.content,
})),
count: results.length,
});
},
}),
lookupDocumentation: tool({
description: "Look up official documentation and API references",
inputSchema: z.object({
library: z.string(),
topic: z.string(),
numResults: z.number().min(1).max(10).default(3),
}),
execute: async ({ library, topic, numResults }) => {
const results = await braveDocumentationSearch(library, topic, numResults);
return JSON.stringify({ library, topic, results });
},
}),
searchCodeExamples: tool({
description: "Search for code examples from GitHub and developer resources",
inputSchema: z.object({
query: z.string(),
language: z.string().optional(),
numResults: z.number().min(1).max(10).default(3),
}),
execute: async ({ query, language, numResults }) => {
const results = await braveCodeSearch(query, language, numResults);
return JSON.stringify({ query, language, results });
},
}),
};
}