[{"data":1,"prerenderedAt":1580},["ShallowReactive",2],{"navigation_docs":3,"-guide-search":100,"-guide-search-surround":1575},[4,44],{"title":5,"path":6,"stem":7,"children":8,"icon":43},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35,39],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Searching","\u002Fguide\u002Fsearch","1.guide\u002F2.search",{"title":16,"path":17,"stem":18},"Fan-out","\u002Fguide\u002Ffanout","1.guide\u002F3.fanout",{"title":20,"path":21,"stem":22},"Reading","\u002Fguide\u002Fread","1.guide\u002F4.read",{"title":24,"path":25,"stem":26},"Reverse Image Search","\u002Fguide\u002Fimage","1.guide\u002F5.image",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F6.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F7.agents",{"title":36,"path":37,"stem":38},"Custom Providers","\u002Fguide\u002Fcustom","1.guide\u002F8.custom",{"title":40,"path":41,"stem":42},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F9.explorer","i-lucide-book-open",{"title":45,"path":46,"stem":47,"children":48,"icon":99},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91,95],{"title":50,"path":46,"stem":47},"Overview",{"title":52,"path":53,"stem":54},"Brave","\u002Fproviders\u002Fbrave","2.providers\u002F01.brave",{"title":56,"path":57,"stem":58},"Context.dev","\u002Fproviders\u002Fcontext","2.providers\u002F02.context",{"title":60,"path":61,"stem":62},"Exa","\u002Fproviders\u002Fexa","2.providers\u002F03.exa",{"title":64,"path":65,"stem":66},"Firecrawl","\u002Fproviders\u002Ffirecrawl","2.providers\u002F04.firecrawl",{"title":68,"path":69,"stem":70},"Jina","\u002Fproviders\u002Fjina","2.providers\u002F05.jina",{"title":72,"path":73,"stem":74},"Mojeek","\u002Fproviders\u002Fmojeek","2.providers\u002F06.mojeek",{"title":76,"path":77,"stem":78},"SearXNG","\u002Fproviders\u002Fsearxng","2.providers\u002F07.searxng",{"title":80,"path":81,"stem":82},"SerpAPI","\u002Fproviders\u002Fserpapi","2.providers\u002F08.serpapi",{"title":84,"path":85,"stem":86},"SerpBase","\u002Fproviders\u002Fserpbase","2.providers\u002F09.serpbase",{"title":88,"path":89,"stem":90},"Tavily","\u002Fproviders\u002Ftavily","2.providers\u002F10.tavily",{"title":92,"path":93,"stem":94},"TinyFish","\u002Fproviders\u002Ftinyfish","2.providers\u002F11.tinyfish",{"title":96,"path":97,"stem":98},"OpenAI Codex","\u002Fproviders\u002Fopenai-codex","2.providers\u002F12.openai-codex","i-lucide-library",{"id":101,"title":12,"body":102,"description":1568,"extension":1569,"links":1570,"meta":1571,"navigation":254,"path":13,"seo":1573,"stem":14,"__hash__":1574},"docs\u002F1.guide\u002F2.search.md",{"type":103,"value":104,"toc":1560},"minimark",[105,110,193,205,358,361,538,556,559,787,793,797,803,989,1007,1017,1020,1023,1150,1299,1314,1318,1375,1408,1411,1550,1556],[106,107,109],"h2",{"id":108},"the-contract","The contract",[111,112,117],"pre",{"className":113,"code":114,"language":115,"meta":116,"style":116},"language-ts shiki shiki-themes github-light github-light poimandres","interface SearchProvider {\n  search(query: string, options?: SearchRequestOptions): Promise\u003CSearchResult[]>;\n}\n","ts","",[118,119,120,137,187],"code",{"__ignoreMap":116},[121,122,125,129,133],"span",{"class":123,"line":124},"line",1,[121,126,128],{"class":127},"s1TYA","interface",[121,130,132],{"class":131},"sCrqT"," SearchProvider",[121,134,136],{"class":135},"sKlNE"," {\n",[121,138,140,144,147,151,154,158,161,164,167,170,173,175,178,181,184],{"class":123,"line":139},2,[121,141,143],{"class":142},"scZRh","  search",[121,145,146],{"class":135},"(",[121,148,150],{"class":149},"s1jWp","query",[121,152,153],{"class":127},":",[121,155,157],{"class":156},"s8yaW"," string",[121,159,160],{"class":135},", ",[121,162,163],{"class":149},"options",[121,165,166],{"class":127},"?:",[121,168,169],{"class":131}," SearchRequestOptions",[121,171,172],{"class":135},")",[121,174,153],{"class":127},[121,176,177],{"class":131}," Promise",[121,179,180],{"class":135},"\u003C",[121,182,183],{"class":131},"SearchResult",[121,185,186],{"class":135},"[]>;\n",[121,188,190],{"class":123,"line":189},3,[121,191,192],{"class":135},"}\n",[194,195,196,197,200,201,204],"p",{},"Every search adapter has this one method. ",[118,198,199],{},"create(name)"," imports that adapter on its first call and gives you the provider, ",[118,202,203],{},"isSearchProvider(provider)"," is the type guard when you hold something you did not create yourself.",[111,206,208],{"className":113,"code":207,"language":115,"meta":116,"style":116},"import { create, isSearchProvider } from \"@agntn\u002Fweb\";\n\nconst provider = await create(\"brave\");\nif (isSearchProvider(provider)) {\n  const results = await provider.search(\"typescript runtimes\", { maxResults: 5 });\n}\n",[118,209,210,250,256,287,308,353],{"__ignoreMap":116},[121,211,212,216,219,223,226,229,232,236,240,244,247],{"class":123,"line":124},[121,213,215],{"class":214},"sP0CR","import",[121,217,218],{"class":135}," {",[121,220,222],{"class":221},"snHMy"," create",[121,224,225],{"class":135},",",[121,227,228],{"class":221}," isSearchProvider",[121,230,231],{"class":135}," }",[121,233,235],{"class":234},"stCPd"," from",[121,237,239],{"class":238},"scVjq"," \"",[121,241,243],{"class":242},"sQ7BG","@agntn\u002Fweb",[121,245,246],{"class":238},"\"",[121,248,249],{"class":135},";\n",[121,251,252],{"class":123,"line":139},[121,253,255],{"emptyLinePlaceholder":254},true,"\n",[121,257,258,261,265,268,272,275,277,279,282,284],{"class":123,"line":189},[121,259,260],{"class":127},"const",[121,262,264],{"class":263},"saoiD"," provider",[121,266,267],{"class":127}," =",[121,269,271],{"class":270},"sZW6a"," await",[121,273,222],{"class":274},"sULi6",[121,276,146],{"class":135},[121,278,246],{"class":238},[121,280,281],{"class":242},"brave",[121,283,246],{"class":238},[121,285,286],{"class":135},");\n",[121,288,290,293,296,299,301,305],{"class":123,"line":289},4,[121,291,292],{"class":234},"if",[121,294,295],{"class":135}," (",[121,297,298],{"class":274},"isSearchProvider",[121,300,146],{"class":135},[121,302,304],{"class":303},"spVlQ","provider",[121,306,307],{"class":135},")) {\n",[121,309,311,314,317,319,321,323,326,329,331,333,336,338,341,344,346,350],{"class":123,"line":310},5,[121,312,313],{"class":127},"  const",[121,315,316],{"class":263}," results",[121,318,267],{"class":127},[121,320,271],{"class":270},[121,322,264],{"class":303},[121,324,325],{"class":135},".",[121,327,328],{"class":274},"search",[121,330,146],{"class":135},[121,332,246],{"class":238},[121,334,335],{"class":242},"typescript runtimes",[121,337,246],{"class":238},[121,339,340],{"class":135},", {",[121,342,343],{"class":221}," maxResults",[121,345,153],{"class":135},[121,347,349],{"class":348},"siHFe"," 5",[121,351,352],{"class":135}," });\n",[121,354,356],{"class":123,"line":355},6,[121,357,192],{"class":135},[106,359,360],{"id":163},"Options",[111,362,364],{"className":113,"code":363,"language":115,"meta":116,"style":116},"interface SearchRequestOptions extends ExecutionOptions {\n  maxResults?: number; \u002F\u002F default 10\n  highlights?: boolean; \u002F\u002F default true\n  summary?: boolean; \u002F\u002F default false\n  fullText?: boolean; \u002F\u002F default false\n  includeDomains?: readonly string[];\n  excludeDomains?: readonly string[];\n  sources?: readonly string[];\n  categories?: readonly string[];\n  startPublishedDate?: string;\n  endPublishedDate?: string;\n  category?: string;\n}\n",[118,365,366,380,398,413,427,440,455,469,483,497,509,521,533],{"__ignoreMap":116},[121,367,368,370,372,375,378],{"class":123,"line":124},[121,369,128],{"class":127},[121,371,169],{"class":131},[121,373,374],{"class":214}," extends",[121,376,377],{"class":142}," ExecutionOptions",[121,379,136],{"class":135},[121,381,382,386,388,391,394],{"class":123,"line":139},[121,383,385],{"class":384},"s0VbO","  maxResults",[121,387,166],{"class":127},[121,389,390],{"class":156}," number",[121,392,393],{"class":135},"; ",[121,395,397],{"class":396},"sjhu3","\u002F\u002F default 10\n",[121,399,400,403,405,408,410],{"class":123,"line":189},[121,401,402],{"class":384},"  highlights",[121,404,166],{"class":127},[121,406,407],{"class":156}," boolean",[121,409,393],{"class":135},[121,411,412],{"class":396},"\u002F\u002F default true\n",[121,414,415,418,420,422,424],{"class":123,"line":289},[121,416,417],{"class":384},"  summary",[121,419,166],{"class":127},[121,421,407],{"class":156},[121,423,393],{"class":135},[121,425,426],{"class":396},"\u002F\u002F default false\n",[121,428,429,432,434,436,438],{"class":123,"line":310},[121,430,431],{"class":384},"  fullText",[121,433,166],{"class":127},[121,435,407],{"class":156},[121,437,393],{"class":135},[121,439,426],{"class":396},[121,441,442,445,447,450,452],{"class":123,"line":355},[121,443,444],{"class":384},"  includeDomains",[121,446,166],{"class":127},[121,448,449],{"class":214}," readonly",[121,451,157],{"class":156},[121,453,454],{"class":135},"[];\n",[121,456,458,461,463,465,467],{"class":123,"line":457},7,[121,459,460],{"class":384},"  excludeDomains",[121,462,166],{"class":127},[121,464,449],{"class":214},[121,466,157],{"class":156},[121,468,454],{"class":135},[121,470,472,475,477,479,481],{"class":123,"line":471},8,[121,473,474],{"class":384},"  sources",[121,476,166],{"class":127},[121,478,449],{"class":214},[121,480,157],{"class":156},[121,482,454],{"class":135},[121,484,486,489,491,493,495],{"class":123,"line":485},9,[121,487,488],{"class":384},"  categories",[121,490,166],{"class":127},[121,492,449],{"class":214},[121,494,157],{"class":156},[121,496,454],{"class":135},[121,498,500,503,505,507],{"class":123,"line":499},10,[121,501,502],{"class":384},"  startPublishedDate",[121,504,166],{"class":127},[121,506,157],{"class":156},[121,508,249],{"class":135},[121,510,512,515,517,519],{"class":123,"line":511},11,[121,513,514],{"class":384},"  endPublishedDate",[121,516,166],{"class":127},[121,518,157],{"class":156},[121,520,249],{"class":135},[121,522,524,527,529,531],{"class":123,"line":523},12,[121,525,526],{"class":384},"  category",[121,528,166],{"class":127},[121,530,157],{"class":156},[121,532,249],{"class":135},[121,534,536],{"class":123,"line":535},13,[121,537,192],{"class":135},[194,539,540,543,544,547,548,551,552,555],{},[118,541,542],{},"maxResults"," goes to the provider as the requested count and is applied again to what comes back, so an engine that pages by ten still gives you five. ",[118,545,546],{},"highlights"," asks for passages relevant to the query where the engine has them (Exa, Firecrawl). ",[118,549,550],{},"summary"," asks Exa for a summary of each result or Tavily and OpenAI Codex for an answer to the query. ",[118,553,554],{},"fullText"," asks for the whole page text, which is a lot of tokens, so think before you turn it on.",[194,557,558],{},"The filters are per provider. A provider that cannot do one does not fail, it just tells you through the detailed helpers:",[560,561,562,584],"table",{},[563,564,565],"thead",{},[566,567,568,572,575,578,581],"tr",{},[569,570,571],"th",{},"Provider",[569,573,574],{},"Domain filters",[569,576,577],{},"Source values",[569,579,580],{},"Category values",[569,582,583],{},"Date bounds",[585,586,587,602,615,628,658,677,689,701,713,725,750,770],"tbody",{},[566,588,589,592,595,597,599],{},[590,591,52],"td",{},[590,593,594],{},"none",[590,596,594],{},[590,598,594],{},[590,600,601],{},"start, end",[566,603,604,606,609,611,613],{},[590,605,56],{},[590,607,608],{},"include, exclude",[590,610,594],{},[590,612,594],{},[590,614,594],{},[566,616,617,619,621,623,626],{},[590,618,60],{},[590,620,608],{},[590,622,594],{},[590,624,625],{},"forwarded as given",[590,627,601],{},[566,629,630,632,634,645,656],{},[590,631,64],{},[590,633,608],{},[590,635,636,160,639,160,642],{},[118,637,638],{},"web",[118,640,641],{},"news",[118,643,644],{},"images",[590,646,647,160,650,160,653],{},[118,648,649],{},"research",[118,651,652],{},"pdf",[118,654,655],{},"developer",[590,657,594],{},[566,659,660,662,665,667,675],{},[590,661,68],{},[590,663,664],{},"include",[590,666,594],{},[590,668,669,160,671,160,673],{},[118,670,638],{},[118,672,644],{},[118,674,641],{},[590,676,594],{},[566,678,679,681,683,685,687],{},[590,680,72],{},[590,682,608],{},[590,684,594],{},[590,686,594],{},[590,688,601],{},[566,690,691,693,695,697,699],{},[590,692,96],{},[590,694,594],{},[590,696,594],{},[590,698,594],{},[590,700,594],{},[566,702,703,705,707,709,711],{},[590,704,76],{},[590,706,594],{},[590,708,594],{},[590,710,625],{},[590,712,594],{},[566,714,715,717,719,721,723],{},[590,716,80],{},[590,718,594],{},[590,720,594],{},[590,722,594],{},[590,724,601],{},[566,726,727,729,731,733,748],{},[590,728,84],{},[590,730,594],{},[590,732,594],{},[590,734,735,160,738,160,740,160,742,160,745],{},[118,736,737],{},"image",[118,739,644],{},[118,741,641],{},[118,743,744],{},"video",[118,746,747],{},"videos",[590,749,594],{},[566,751,752,754,756,758,768],{},[590,753,88],{},[590,755,608],{},[590,757,594],{},[590,759,760,160,763,160,765],{},[118,761,762],{},"general",[118,764,641],{},[118,766,767],{},"finance",[590,769,601],{},[566,771,772,774,776,778,785],{},[590,773,92],{},[590,775,608],{},[590,777,594],{},[590,779,780,160,782],{},[118,781,641],{},[118,783,784],{},"research_paper",[590,786,601],{},[194,788,789,792],{},[118,790,791],{},"getSearchFilterCapabilities(name)"," gives you the same table for one provider at runtime.",[106,794,796],{"id":795},"diagnostics","Diagnostics",[194,798,799,802],{},[118,800,801],{},"search()"," is a list API. When you want to know what the provider actually did with your options, ask for the detailed answer:",[111,804,806],{"className":113,"code":805,"language":115,"meta":116,"style":116},"import { searchProviderDetailed } from \"@agntn\u002Fweb\";\n\nconst answer = await searchProviderDetailed(\"brave\", \"typescript runtimes\", {\n  maxResults: 10,\n  includeDomains: [\"github.com\"],\n});\n\nanswer.provider; \u002F\u002F \"brave\"\nanswer.results; \u002F\u002F SearchResult[]\nanswer.ignoredFilters; \u002F\u002F [\"includeDomains\"], Brave has no domain filter\nanswer.undeclaredFilters; \u002F\u002F [] on built-ins, custom providers without capability metadata land here\nanswer.pagination; \u002F\u002F { status: \"next\", continuation: \"…\" }\nanswer.metadata; \u002F\u002F metadata for the whole response when the provider has it\n",[118,807,808,829,833,865,877,896,901,905,919,933,947,961,975],{"__ignoreMap":116},[121,809,810,812,814,817,819,821,823,825,827],{"class":123,"line":124},[121,811,215],{"class":214},[121,813,218],{"class":135},[121,815,816],{"class":221}," searchProviderDetailed",[121,818,231],{"class":135},[121,820,235],{"class":234},[121,822,239],{"class":238},[121,824,243],{"class":242},[121,826,246],{"class":238},[121,828,249],{"class":135},[121,830,831],{"class":123,"line":139},[121,832,255],{"emptyLinePlaceholder":254},[121,834,835,837,840,842,844,846,848,850,852,854,856,858,860,862],{"class":123,"line":189},[121,836,260],{"class":127},[121,838,839],{"class":263}," answer",[121,841,267],{"class":127},[121,843,271],{"class":270},[121,845,816],{"class":274},[121,847,146],{"class":135},[121,849,246],{"class":238},[121,851,281],{"class":242},[121,853,246],{"class":238},[121,855,160],{"class":135},[121,857,246],{"class":238},[121,859,335],{"class":242},[121,861,246],{"class":238},[121,863,864],{"class":135},", {\n",[121,866,867,869,871,874],{"class":123,"line":289},[121,868,385],{"class":221},[121,870,153],{"class":135},[121,872,873],{"class":348}," 10",[121,875,876],{"class":135},",\n",[121,878,879,881,883,886,888,891,893],{"class":123,"line":310},[121,880,444],{"class":221},[121,882,153],{"class":135},[121,884,885],{"class":135}," [",[121,887,246],{"class":238},[121,889,890],{"class":242},"github.com",[121,892,246],{"class":238},[121,894,895],{"class":135},"],\n",[121,897,898],{"class":123,"line":355},[121,899,900],{"class":135},"});\n",[121,902,903],{"class":123,"line":457},[121,904,255],{"emptyLinePlaceholder":254},[121,906,907,910,912,914,916],{"class":123,"line":471},[121,908,909],{"class":303},"answer",[121,911,325],{"class":135},[121,913,304],{"class":303},[121,915,393],{"class":135},[121,917,918],{"class":396},"\u002F\u002F \"brave\"\n",[121,920,921,923,925,928,930],{"class":123,"line":485},[121,922,909],{"class":303},[121,924,325],{"class":135},[121,926,927],{"class":303},"results",[121,929,393],{"class":135},[121,931,932],{"class":396},"\u002F\u002F SearchResult[]\n",[121,934,935,937,939,942,944],{"class":123,"line":499},[121,936,909],{"class":303},[121,938,325],{"class":135},[121,940,941],{"class":303},"ignoredFilters",[121,943,393],{"class":135},[121,945,946],{"class":396},"\u002F\u002F [\"includeDomains\"], Brave has no domain filter\n",[121,948,949,951,953,956,958],{"class":123,"line":511},[121,950,909],{"class":303},[121,952,325],{"class":135},[121,954,955],{"class":303},"undeclaredFilters",[121,957,393],{"class":135},[121,959,960],{"class":396},"\u002F\u002F [] on built-ins, custom providers without capability metadata land here\n",[121,962,963,965,967,970,972],{"class":123,"line":523},[121,964,909],{"class":303},[121,966,325],{"class":135},[121,968,969],{"class":303},"pagination",[121,971,393],{"class":135},[121,973,974],{"class":396},"\u002F\u002F { status: \"next\", continuation: \"…\" }\n",[121,976,977,979,981,984,986],{"class":123,"line":535},[121,978,909],{"class":303},[121,980,325],{"class":135},[121,982,983],{"class":303},"metadata",[121,985,393],{"class":135},[121,987,988],{"class":396},"\u002F\u002F metadata for the whole response when the provider has it\n",[194,990,991,992,994,995,998,999,1002,1003,1006],{},"Silently dropping a filter is the worst thing a wrapper can do, you end up trusting results that were never filtered. So the ignored ones are always listed. Firecrawl puts its request id, warnings and credits used in ",[118,993,983],{},", Tavily puts the generated answer in ",[118,996,997],{},"metadata.answer",". ",[118,1000,1001],{},"isDetailedSearchProvider(provider)"," tells you whether a provider exposes ",[118,1004,1005],{},"searchDetailed()"," directly.",[194,1008,1009,1010,1013,1014,1016],{},"The detailed helpers also take ",[118,1011,1012],{},"favicon: false",", which drops the favicon URL from every result and every fan-out evidence record before it reaches you. Brave's run about 280 bytes each and SerpAPI's about 400, so the agent surfaces pass it unless the model asks. ",[118,1015,801],{}," on a provider has no such switch, it hands over what the engine mapped.",[106,1018,1019],{"id":969},"Pagination",[194,1021,1022],{},"Brave, Mojeek, SearXNG, SerpAPI, SerpBase and TinyFish have deeper pages. The detailed helpers normalize the state:",[111,1024,1026],{"className":113,"code":1025,"language":115,"meta":116,"style":116},"type SearchPagination =\n  | { status: \"next\"; continuation: string } \u002F\u002F the provider said there is more\n  | { status: \"unknown\"; continuation: string } \u002F\u002F another page must be probed\n  | { status: \"end\" } \u002F\u002F no further page\n  | { status: \"unsupported\" }; \u002F\u002F the provider does not page\n",[118,1027,1028,1040,1075,1105,1127],{"__ignoreMap":116},[121,1029,1030,1033,1037],{"class":123,"line":124},[121,1031,1032],{"class":127},"type",[121,1034,1036],{"class":1035},"s3-Zl"," SearchPagination",[121,1038,1039],{"class":127}," =\n",[121,1041,1042,1045,1047,1051,1053,1055,1058,1060,1063,1066,1068,1070,1072],{"class":123,"line":139},[121,1043,1044],{"class":127},"  |",[121,1046,218],{"class":135},[121,1048,1050],{"class":1049},"stSEH"," status",[121,1052,153],{"class":127},[121,1054,239],{"class":238},[121,1056,1057],{"class":242},"next",[121,1059,246],{"class":238},[121,1061,1062],{"class":135},";",[121,1064,1065],{"class":1049}," continuation",[121,1067,153],{"class":127},[121,1069,157],{"class":156},[121,1071,231],{"class":135},[121,1073,1074],{"class":396}," \u002F\u002F the provider said there is more\n",[121,1076,1077,1079,1081,1083,1085,1087,1090,1092,1094,1096,1098,1100,1102],{"class":123,"line":189},[121,1078,1044],{"class":127},[121,1080,218],{"class":135},[121,1082,1050],{"class":1049},[121,1084,153],{"class":127},[121,1086,239],{"class":238},[121,1088,1089],{"class":242},"unknown",[121,1091,246],{"class":238},[121,1093,1062],{"class":135},[121,1095,1065],{"class":1049},[121,1097,153],{"class":127},[121,1099,157],{"class":156},[121,1101,231],{"class":135},[121,1103,1104],{"class":396}," \u002F\u002F another page must be probed\n",[121,1106,1107,1109,1111,1113,1115,1117,1120,1122,1124],{"class":123,"line":289},[121,1108,1044],{"class":127},[121,1110,218],{"class":135},[121,1112,1050],{"class":1049},[121,1114,153],{"class":127},[121,1116,239],{"class":238},[121,1118,1119],{"class":242},"end",[121,1121,246],{"class":238},[121,1123,231],{"class":135},[121,1125,1126],{"class":396}," \u002F\u002F no further page\n",[121,1128,1129,1131,1133,1135,1137,1139,1142,1144,1147],{"class":123,"line":310},[121,1130,1044],{"class":127},[121,1132,218],{"class":135},[121,1134,1050],{"class":1049},[121,1136,153],{"class":127},[121,1138,239],{"class":238},[121,1140,1141],{"class":242},"unsupported",[121,1143,246],{"class":238},[121,1145,1146],{"class":135}," }; ",[121,1148,1149],{"class":396},"\u002F\u002F the provider does not page\n",[111,1151,1153],{"className":113,"code":1152,"language":115,"meta":116,"style":116},"const first = await searchProviderDetailed(\"brave\", \"typescript runtimes\", { maxResults: 10 });\n\nif (first.pagination.status === \"next\") {\n  const second = await searchProviderDetailed(\"brave\", \"typescript runtimes\", {\n    maxResults: 10,\n    continuation: first.pagination.continuation,\n  });\n}\n",[118,1154,1155,1194,1198,1228,1259,1270,1290,1295],{"__ignoreMap":116},[121,1156,1157,1159,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192],{"class":123,"line":124},[121,1158,260],{"class":127},[121,1160,1161],{"class":263}," first",[121,1163,267],{"class":127},[121,1165,271],{"class":270},[121,1167,816],{"class":274},[121,1169,146],{"class":135},[121,1171,246],{"class":238},[121,1173,281],{"class":242},[121,1175,246],{"class":238},[121,1177,160],{"class":135},[121,1179,246],{"class":238},[121,1181,335],{"class":242},[121,1183,246],{"class":238},[121,1185,340],{"class":135},[121,1187,343],{"class":221},[121,1189,153],{"class":135},[121,1191,873],{"class":348},[121,1193,352],{"class":135},[121,1195,1196],{"class":123,"line":139},[121,1197,255],{"emptyLinePlaceholder":254},[121,1199,1200,1202,1204,1207,1209,1211,1213,1216,1219,1221,1223,1225],{"class":123,"line":189},[121,1201,292],{"class":234},[121,1203,295],{"class":135},[121,1205,1206],{"class":303},"first",[121,1208,325],{"class":135},[121,1210,969],{"class":303},[121,1212,325],{"class":135},[121,1214,1215],{"class":303},"status",[121,1217,1218],{"class":127}," ===",[121,1220,239],{"class":238},[121,1222,1057],{"class":242},[121,1224,246],{"class":238},[121,1226,1227],{"class":135},") {\n",[121,1229,1230,1232,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257],{"class":123,"line":289},[121,1231,313],{"class":127},[121,1233,1234],{"class":263}," second",[121,1236,267],{"class":127},[121,1238,271],{"class":270},[121,1240,816],{"class":274},[121,1242,146],{"class":135},[121,1244,246],{"class":238},[121,1246,281],{"class":242},[121,1248,246],{"class":238},[121,1250,160],{"class":135},[121,1252,246],{"class":238},[121,1254,335],{"class":242},[121,1256,246],{"class":238},[121,1258,864],{"class":135},[121,1260,1261,1264,1266,1268],{"class":123,"line":310},[121,1262,1263],{"class":221},"    maxResults",[121,1265,153],{"class":135},[121,1267,873],{"class":348},[121,1269,876],{"class":135},[121,1271,1272,1275,1277,1279,1281,1283,1285,1288],{"class":123,"line":355},[121,1273,1274],{"class":221},"    continuation",[121,1276,153],{"class":135},[121,1278,1161],{"class":303},[121,1280,325],{"class":135},[121,1282,969],{"class":303},[121,1284,325],{"class":135},[121,1286,1287],{"class":303},"continuation",[121,1289,876],{"class":135},[121,1291,1292],{"class":123,"line":457},[121,1293,1294],{"class":135},"  });\n",[121,1296,1297],{"class":123,"line":471},[121,1298,192],{"class":135},[194,1300,1301,1302,1305,1306,1309,1310,1313],{},"The token is opaque and bound to the provider, the query and every option that changes the page. Change any of them and you get ",[118,1303,1304],{},"InvalidSearchContinuationError"," before another request leaves. But opaque does not mean signed. A token you did not produce yourself is untrusted input, treat it like one. Tokens are at most ",[118,1307,1308],{},"MAX_SEARCH_CONTINUATION_LENGTH"," (4 096) characters, the provider's own state inside at most ",[118,1311,1312],{},"MAX_PROVIDER_SEARCH_CONTINUATION_LENGTH"," (2 048).",[106,1315,1317],{"id":1316},"execution-controls","Execution controls",[111,1319,1321],{"className":113,"code":1320,"language":115,"meta":116,"style":116},"interface ExecutionOptions {\n  signal?: AbortSignal;\n  deadline?: number; \u002F\u002F absolute Unix timestamp in milliseconds\n  concurrency?: number; \u002F\u002F batch and fan-out only; default 3, maximum 10\n}\n",[118,1322,1323,1331,1343,1357,1371],{"__ignoreMap":116},[121,1324,1325,1327,1329],{"class":123,"line":124},[121,1326,128],{"class":127},[121,1328,377],{"class":131},[121,1330,136],{"class":135},[121,1332,1333,1336,1338,1341],{"class":123,"line":139},[121,1334,1335],{"class":384},"  signal",[121,1337,166],{"class":127},[121,1339,1340],{"class":131}," AbortSignal",[121,1342,249],{"class":135},[121,1344,1345,1348,1350,1352,1354],{"class":123,"line":189},[121,1346,1347],{"class":384},"  deadline",[121,1349,166],{"class":127},[121,1351,390],{"class":156},[121,1353,393],{"class":135},[121,1355,1356],{"class":396},"\u002F\u002F absolute Unix timestamp in milliseconds\n",[121,1358,1359,1362,1364,1366,1368],{"class":123,"line":289},[121,1360,1361],{"class":384},"  concurrency",[121,1363,166],{"class":127},[121,1365,390],{"class":156},[121,1367,393],{"class":135},[121,1369,1370],{"class":396},"\u002F\u002F batch and fan-out only; default 3, maximum 10\n",[121,1372,1373],{"class":123,"line":310},[121,1374,192],{"class":135},[194,1376,1377,1378,1381,1382,1385,1386,1389,1390,1393,1394,1397,1398,1400,1401,1404,1405,325],{},"Every network call takes them. ",[118,1379,1380],{},"signal"," cancels the request in flight. ",[118,1383,1384],{},"deadline"," is one budget for the whole operation, fallback and fan-out included, so waiting on a slow first provider does not reset the clock for the second. ",[118,1387,1388],{},"concurrency"," bounds how many requests the batch and fan-out helpers start at once. None of them change a continuation token. When the deadline cuts a fan-out, ",[118,1391,1392],{},"searchAllDetailed"," returns the providers that finished and lists the rest in ",[118,1395,1396],{},"errors",", a batch does the same per item, and a cancelled ",[118,1399,1380],{}," still rejects. ",[118,1402,1403],{},"deadlineAfterSeconds(30)"," turns a budget into that timestamp, the agent tools use it for ",[118,1406,1407],{},"timeoutSeconds",[106,1409,1410],{"id":1396},"Errors",[560,1412,1413,1423],{},[563,1414,1415],{},[566,1416,1417,1420],{},[569,1418,1419],{},"Error",[569,1421,1422],{},"When",[585,1424,1425,1435,1445,1457,1467,1476,1486,1504,1518],{},[566,1426,1427,1432],{},[590,1428,1429],{},[118,1430,1431],{},"EmptyQueryError",[590,1433,1434],{},"the query is blank",[566,1436,1437,1442],{},[590,1438,1439],{},[118,1440,1441],{},"UnknownProviderError",[590,1443,1444],{},"the name is not registered",[566,1446,1447,1452],{},[590,1448,1449],{},[118,1450,1451],{},"SearchNotSupportedError",[590,1453,1454,1455],{},"the provider has no ",[118,1456,801],{},[566,1458,1459,1464],{},[590,1460,1461],{},[118,1462,1463],{},"InvalidDateFilterError",[590,1465,1466],{},"a date bound is not an ISO date, or the end is before the start",[566,1468,1469,1473],{},[590,1470,1471],{},[118,1472,1304],{},[590,1474,1475],{},"the token does not belong to this provider, query and options",[566,1477,1478,1483],{},[590,1479,1480],{},[118,1481,1482],{},"AuthError",[590,1484,1485],{},"the provider rejected the key with 401, or the key is missing",[566,1487,1488,1493],{},[590,1489,1490],{},[118,1491,1492],{},"PaymentError",[590,1494,1495,1496,1499,1500,1503],{},"spent credits, however the provider spells them: Context.dev 401 with ",[118,1497,1498],{},"USAGE_EXCEEDED",", Tavily 432 or 433, SerpBase ",[118,1501,1502],{},"status: 1020",". Automatic fallback keeps going",[566,1505,1506,1511],{},[590,1507,1508],{},[118,1509,1510],{},"RateLimitError",[590,1512,1513,1514,1517],{},"the provider answered 429, ",[118,1515,1516],{},"retryAfter"," in seconds",[566,1519,1520,1525],{},[590,1521,1522],{},[118,1523,1524],{},"HTTPError",[590,1526,1527,1528,1531,1532,1535,1536,1539,1540,1542,1543,1545,1546,1549],{},"any other non-2xx, with ",[118,1529,1530],{},"statusCode",", redacted ",[118,1533,1534],{},"url"," and ",[118,1537,1538],{},"body","; no response at all is ",[118,1541,1530],{}," 0, ",[118,1544,1538],{}," names the transport cause and ",[118,1547,1548],{},"cause"," keeps the original error",[194,1551,1552,1555],{},[118,1553,1554],{},"normalizeError(error, provider)"," is what the adapters use to map a raw HTTP failure onto this list. It is exported, custom providers should use it too.",[1557,1558,1559],"style",{},"html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .scZRh, html code.shiki .scZRh{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#ADD7FF}html pre.shiki code .s1jWp, html code.shiki .s1jWp{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#E4F0FB}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .s3-Zl, html code.shiki .s3-Zl{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCD}html pre.shiki code .stSEH, html code.shiki .stSEH{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#ADD7FF}",{"title":116,"searchDepth":139,"depth":139,"links":1561},[1562,1563,1564,1565,1566,1567],{"id":108,"depth":139,"text":109},{"id":163,"depth":139,"text":360},{"id":795,"depth":139,"text":796},{"id":969,"depth":139,"text":1019},{"id":1316,"depth":139,"text":1317},{"id":1396,"depth":139,"text":1410},"One provider, one query, the options every adapter takes, the filters each one honours, and the diagnostics that come back.","md",null,{"icon":1572},"i-lucide-search",{"title":12,"description":1568},"Th3c_7bikEuVuOmjD_E2jktDB-BeiAQhLJJbyDfpS8w",[1576,1578],{"title":10,"path":6,"stem":7,"description":1577,"children":-1},"Install the package, run one search, and get the same result shape from twelve providers.",{"title":16,"path":17,"stem":18,"description":1579,"children":-1},"Every configured provider at once with deduplicated results and evidence, automatic fallback for one query, and batches of queries.",1790163162696]