import { z } from "zod"; /** * Google SERP query via SerpAPI. Caches responses by `keyword + locale + * language + num` for 24h via `cachedFetch`. The orchestrator typically * calls this when proposing AEO improvements — knowing what currently * ranks for a target query informs whether the page being audited has a * realistic shot at displacing the incumbents. * * SerpAPI key resolution order: explicit `apiKey` arg → `SERPAPI_API_KEY` * env var. Tool returns an error result when no key is available — the * orchestrator should skip this probe rather than retry. */ export declare const querySerpTool: { name: string; description: string; inputSchema: z.ZodType<{ keyword: string; locale?: string | undefined; language?: string | undefined; num?: number | undefined; apiKey?: string | undefined; cacheDir?: string | undefined; }, unknown, z.core.$ZodTypeInternals<{ keyword: string; locale?: string | undefined; language?: string | undefined; num?: number | undefined; apiKey?: string | undefined; cacheDir?: string | undefined; }, unknown>>; outputSchema: z.ZodType<{ keyword: string; locale: string; language: string; resultCount: number; organicResults: { position: number; title: string; url: string; snippet: string | null; source: string | null; }[]; hasAnswerBox: boolean; hasKnowledgeGraph: boolean; fromCache: boolean; apiCostUsd: number; }, unknown, z.core.$ZodTypeInternals<{ keyword: string; locale: string; language: string; resultCount: number; organicResults: { position: number; title: string; url: string; snippet: string | null; source: string | null; }[]; hasAnswerBox: boolean; hasKnowledgeGraph: boolean; fromCache: boolean; apiCostUsd: number; }, unknown>>; toAiTool(): import("ai").Tool<{ keyword: string; locale?: string | undefined; language?: string | undefined; num?: number | undefined; apiKey?: string | undefined; cacheDir?: string | undefined; }, import("./types.js").ToolResult<{ keyword: string; locale: string; language: string; resultCount: number; organicResults: { position: number; title: string; url: string; snippet: string | null; source: string | null; }[]; hasAnswerBox: boolean; hasKnowledgeGraph: boolean; fromCache: boolean; apiCostUsd: number; }>>; run(input: { keyword: string; locale?: string | undefined; language?: string | undefined; num?: number | undefined; apiKey?: string | undefined; cacheDir?: string | undefined; }, ctx?: import("./types.js").ToolExecuteContext): Promise>; }; //# sourceMappingURL=query-serp.d.ts.map