Files
2026-07-13 12:38:34 +08:00

36 lines
1.3 KiB
TypeScript

import { defineTool } from 'eve/tools';
import { z } from 'zod';
import { DEFAULT_SEARCH_LIMIT, searchDocs } from '../lib/docs-search';
/**
* search_docs — find the most relevant Composio docs pages for a query.
*
* This is a local, in-memory lexical retriever. It uses a BM25-style body score
* plus field boosts for title, description, headings, and URL. The top results
* include full page content (bounded per page), so the model gets rich context
* in the same fast tool call instead of doing a serial search -> read round trip.
*/
export default defineTool({
description:
'Search the Composio documentation with a fast BM25-style local retriever. Returns relevant pages and includes full bounded content for the top matches, so you can answer from the returned context. Call read_doc only if you need a page beyond the included content.',
inputSchema: z.object({
query: z
.string()
.min(1)
.describe(
'What to look for, e.g. "authentication", "create a session", "trigger webhook verification".'
),
limit: z
.number()
.int()
.min(1)
.max(12)
.optional()
.describe('How many pages to return. Defaults to 5.'),
}),
async execute({ query, limit = DEFAULT_SEARCH_LIMIT }) {
return searchDocs(query, { limit, invocation: 'tool' });
},
});