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