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