[{"data":1,"prerenderedAt":286},["ShallowReactive",2],{"navigation_docs":3,"-guide-explorer":96,"-guide-explorer-surround":281},[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":95},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91],{"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","i-lucide-library",{"id":97,"title":40,"body":98,"description":273,"extension":274,"links":275,"meta":276,"navigation":278,"path":41,"seo":279,"stem":42,"__hash__":280},"docs\u002F1.guide\u002F9.explorer.md",{"type":99,"value":100,"toc":267},"minimark",[101,135,211,218,223,226,237,243,247],[102,103,104,105,109,110,114,115,118,119,122,123,126,127,130,131,134],"p",{},"The ",[106,107,40],"a",{"href":108},"\u002Fexplorer"," calls the docs worker, the worker calls the library: ",[111,112,113],"code",{},"searchProviderDetailed"," or ",[111,116,117],{},"searchWithFallback"," for a search, ",[111,120,121],{},"searchAllDetailed"," for a fan-out, ",[111,124,125],{},"readUrlDetailed"," for a page, ",[111,128,129],{},"listProviders"," for the matrix. Exactly what a script would do. Nothing on the page is a mock, a slow answer is the engine being slow and a ",[111,132,133],{},"503"," means the worker has no key for what you asked.",[136,137,138,154],"table",{},[139,140,141],"thead",{},[142,143,144,148,151],"tr",{},[145,146,147],"th",{},"Operation",[145,149,150],{},"What it answers",[145,152,153],{},"CLI equivalent",[155,156,157,171,183,196],"tbody",{},[142,158,159,163,166],{},[160,161,162],"td",{},"Search",[160,164,165],{},"up to ten results from one provider, or the first configured one with its fallback chain, plus ignored filters and the pagination status",[160,167,168],{},[111,169,170],{},"web search --provider \u003Cname> --json",[142,172,173,175,178],{},[160,174,16],{},[160,176,177],{},"every provider the worker has a key for, deduplicated, with the providers behind each URL and the failures kept",[160,179,180],{},[111,181,182],{},"web search --provider all --json",[142,184,185,188,191],{},[160,186,187],{},"Read",[160,189,190],{},"one page as Markdown, bounded to 500, 2 000 or 8 000 characters, with the reader that answered and the readers tried",[160,192,193],{},[111,194,195],{},"web read --max-chars \u003Cn> --json",[142,197,198,200,206],{},[160,199,45],{},[160,201,202,205],{},[111,203,204],{},"listProviders()"," on the worker: capabilities, and whether the worker holds a key",[160,207,208],{},[111,209,210],{},"web providers --json",[102,212,213,214,217],{},"Every query is a deep link. ",[111,215,216],{},"\u002Fexplorer?op=search&q=nitro&provider=brave"," opens the page on that answer.",[219,220,222],"h2",{"id":221},"caching-and-manners","Caching and manners",[102,224,225],{},"Answers are cached on the worker, in KV in production: fifteen minutes for a search or a fan-out, an hour for a page. An answer with a provider failure inside is kept for five minutes only, a thrown failure is never cached, so a typo or an outage does not stick. One address can start twenty new provider queries a minute, cache hits are free.",[102,227,228,229,232,233,236],{},"Each operation gets one budget of 25 seconds through ",[111,230,231],{},"deadline",", fan-out runs three providers at a time, and a ",[111,234,235],{},"429"," is not retried. A rate limit from the engine comes back as a rate limit from the worker, retrying it into a ban would help nobody. Continuation tokens stay on the worker, so nobody pages through a provider's quota from a demo page.",[102,238,239,240,242],{},"The worker holds keys for some providers, not all. The Providers tab says which. A search against a provider without a key is a ",[111,241,133],{},", not a bug in your code.",[219,244,246],{"id":245},"the-landing","The landing",[102,248,249,250,254,255,258,259,262,263,266],{},"The panels on the ",[106,251,253],{"href":252},"\u002F","home page"," start from answers recorded through the library and labelled ",[111,256,257],{},"sample",". As the page walks through its four queries, each one is replaced by the worker's live answer and relabelled ",[111,260,261],{},"live",". The recorded answers live in ",[111,264,265],{},"docs\u002Fapp\u002Futils\u002Flanding-fixtures.ts"," and are regenerated with the library, never edited by hand.",{"title":268,"searchDepth":269,"depth":269,"links":270},"",2,[271,272],{"id":221,"depth":269,"text":222},{"id":245,"depth":269,"text":246},"The explorer page behind web.agntn.dev that runs the library live, and what it does to be a good citizen.","md",null,{"icon":277},"i-lucide-globe",true,{"title":40,"description":273},"Im0bKJGHnGY-OQx_peqaQeQ05ZwOvmmd5CosKNaqccE",[282,284],{"title":36,"path":37,"stem":38,"description":283,"children":-1},"Extend the base class, implement the capabilities you have, register it, and every helper, tool and CLI picks it up.",{"title":50,"path":46,"stem":47,"description":285,"children":-1},"Eleven providers, one class shape. Pick one to see its endpoints, the filters it honours, the fields it fills and the traps.",1788509442866]