{"version":3,"file":"ai.mjs","names":[],"sources":["../src/ai.ts"],"sourcesContent":["import { tool } from 'ai'\nimport { z } from 'zod'\nimport { builtinProviders } from './core/providers.ts'\nimport { create } from './core/registry.ts'\nimport { searchAll } from './core/all.ts'\nimport { readProviderNames, readUrl } from './core/read.ts'\nimport { EmptyQueryError, EmptyUrlError } from './core/errors.ts'\nimport { resolveDefaultProvider, listProviders } from './core/resolve.ts'\nimport './providers/index.ts'\n\nconst providerNames = [...builtinProviders, 'all'] as const\n\nexport const searchTool = tool({\n  description: 'Search the web using multiple search engines (Brave, Exa, Jina, Tavily, SerpAPI, SerpBase, SearXNG). Returns relevant web pages with titles, URLs, snippets, and optional metadata. Use provider \"all\" to query all available providers in parallel and get deduplicated results.',\n  inputSchema: z.object({\n    query: z.string().describe('Search query'),\n    provider: z.enum(providerNames).optional().describe('Provider to use. Defaults to first available from env. Use \"all\" for parallel search.'),\n    maxResults: z.number().min(1).max(20).optional().describe('Max results (default: 10)'),\n    includeDomains: z.array(z.string()).optional().describe('Only return results from these domains (e.g. [\"github.com\", \"stackoverflow.com\"])'),\n    excludeDomains: z.array(z.string()).optional().describe('Exclude results from these domains'),\n    category: z.string().optional().describe('Search category (e.g. \"news\", \"general\"). Provider support varies.'),\n    startPublishedDate: z.string().optional().describe('Filter results published after this date (ISO 8601, e.g. \"2024-01-01\")'),\n    endPublishedDate: z.string().optional().describe('Filter results published before this date (ISO 8601)'),\n  }),\n  execute: async ({ query, provider: providerName, maxResults, includeDomains, excludeDomains, category, startPublishedDate, endPublishedDate }) => {\n    if (!query.trim()) {\n      throw new EmptyQueryError()\n    }\n\n    const searchOptions = { maxResults, includeDomains, excludeDomains, category, startPublishedDate, endPublishedDate }\n\n    if (providerName === 'all') {\n      return searchAll(query, searchOptions)\n    }\n\n    const name = providerName ?? resolveDefaultProvider()\n    return create(name).search(query, searchOptions)\n  },\n})\n\nexport const readTool = tool({\n  description: 'Read a URL into normalized content using a read-capable provider. Defaults to Jina Reader (r.jina.ai). Returns URL, title/description when available, canonical content, and optional text/html/images/metadata.',\n  inputSchema: z.object({\n    url: z.string().describe('URL to read'),\n    provider: z.enum(readProviderNames).optional().describe('Read provider to use. Defaults to Jina.'),\n    format: z.enum(['markdown', 'text', 'html']).optional().describe('Preferred content format.'),\n    maxTokens: z.number().min(1).optional().describe('Maximum tokens to return when supported by the provider.'),\n    targetSelector: z.string().optional().describe('CSS selector to target when supported by the provider.'),\n    removeSelector: z.string().optional().describe('CSS selector to remove when supported by the provider.'),\n    timeout: z.number().min(1).optional().describe('Provider timeout in seconds when supported.'),\n    noCache: z.boolean().optional().describe('Bypass provider cache when supported.'),\n  }),\n  execute: async ({ url, provider, format, maxTokens, targetSelector, removeSelector, timeout, noCache }) => {\n    if (!url.trim()) {\n      throw new EmptyUrlError()\n    }\n\n    return readUrl(url, { provider, format, maxTokens, targetSelector, removeSelector, timeout, noCache })\n  },\n})\n\nexport const providersTool = tool({\n  description: 'List available web search providers and their configuration status.',\n  inputSchema: z.object({}),\n  execute: async () => listProviders(),\n})\n"],"mappings":";;;;;;;;;;;AAUA,MAAM,gBAAgB,CAAC,GAAG,kBAAkB,MAAM;AAElD,MAAa,aAAa,KAAK;CAC7B,aAAa;CACb,aAAa,EAAE,OAAO;EACpB,OAAO,EAAE,QAAQ,CAAC,SAAS,eAAe;EAC1C,UAAU,EAAE,KAAK,cAAc,CAAC,UAAU,CAAC,SAAS,0FAAwF;EAC5I,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,4BAA4B;EACtF,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,SAAS,wFAAoF;EAC5I,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,SAAS,qCAAqC;EAC7F,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,yEAAqE;EAC9G,oBAAoB,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,2EAAyE;EAC5H,kBAAkB,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,uDAAA;EAClD,CAAC;CACF,SAAS,OAAO,EAAE,OAAO,UAAU,cAAc,YAAY,gBAAgB,gBAAgB,UAAU,oBAAoB,uBAAuB;AAChJ,MAAI,CAAC,MAAM,MAAM,CACf,OAAM,IAAI,iBAAiB;EAG7B,MAAM,gBAAgB;GAAE;GAAY;GAAgB;GAAgB;GAAU;GAAoB;GAAkB;AAEpH,MAAI,iBAAiB,MACnB,QAAO,UAAU,OAAO,cAAc;AAIxC,SAAO,OADM,gBAAgB,wBAAwB,CAClC,CAAC,OAAO,OAAO,cAAc;;CAEnD,CAAC;AAEF,MAAa,WAAW,KAAK;CAC3B,aAAa;CACb,aAAa,EAAE,OAAO;EACpB,KAAK,EAAE,QAAQ,CAAC,SAAS,cAAc;EACvC,UAAU,EAAE,KAAK,kBAAkB,CAAC,UAAU,CAAC,SAAS,0CAA0C;EAClG,QAAQ,EAAE,KAAK;GAAC;GAAY;GAAQ;GAAO,CAAC,CAAC,UAAU,CAAC,SAAS,4BAA4B;EAC7F,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,2DAA2D;EAC5G,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,yDAAyD;EACxG,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,yDAAyD;EACxG,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,8CAA8C;EAC7F,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,wCAAA;EAC1C,CAAC;CACF,SAAS,OAAO,EAAE,KAAK,UAAU,QAAQ,WAAW,gBAAgB,gBAAgB,SAAS,cAAc;AACzG,MAAI,CAAC,IAAI,MAAM,CACb,OAAM,IAAI,eAAe;AAG3B,SAAO,QAAQ,KAAK;GAAE;GAAU;GAAQ;GAAW;GAAgB;GAAgB;GAAS;GAAS,CAAC;;CAEzG,CAAC;AAEF,MAAa,gBAAgB,KAAK;CAChC,aAAa;CACb,aAAa,EAAE,OAAO,EAAE,CAAC;CACzB,SAAS,YAAY,eAAA;CACtB,CAAC"}