[{"data":1,"prerenderedAt":757},["ShallowReactive",2],{"navigation":3,"-guide-options":48,"-guide-options-surround":752},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":47},"Guide","\u002Fguide","1.guide\u002F1.index",[9,12,17,22,27,32,37,42],{"title":10,"path":6,"stem":7,"icon":11},"Getting started","i-lucide-rocket",{"title":13,"path":14,"stem":15,"icon":16},"Nuxt","\u002Fguide\u002Fnuxt","1.guide\u002F2.nuxt","i-logos-nuxt-icon",{"title":18,"path":19,"stem":20,"icon":21},"Next.js","\u002Fguide\u002Fnext","1.guide\u002F3.next","i-logos-nextjs-icon",{"title":23,"path":24,"stem":25,"icon":26},"How it works","\u002Fguide\u002Fhow-it-works","1.guide\u002F4.how-it-works","i-lucide-workflow",{"title":28,"path":29,"stem":30,"icon":31},"Options","\u002Fguide\u002Foptions","1.guide\u002F5.options","i-lucide-settings",{"title":33,"path":34,"stem":35,"icon":36},"API","\u002Fguide\u002Fapi","1.guide\u002F6.api","i-lucide-code",{"title":38,"path":39,"stem":40,"icon":41},"Privacy","\u002Fguide\u002Fprivacy","1.guide\u002F7.privacy","i-lucide-lock",{"title":43,"path":44,"stem":45,"icon":46},"Benchmarks","\u002Fguide\u002Fbenchmarks","1.guide\u002F8.benchmarks","i-lucide-gauge","i-lucide-book-open",{"id":49,"title":28,"body":50,"description":746,"extension":747,"meta":748,"navigation":749,"path":29,"seo":750,"stem":30,"__hash__":751},"content\u002F1.guide\u002F5.options.md",{"type":51,"value":52,"toc":738,"icon":31},"minimark",[53,513,518,522,525,589,596,600,614,636,640,648,717,722,728,731],[54,55,56,72],"table",{},[57,58,59],"thead",{},[60,61,62,66,69],"tr",{},[63,64,65],"th",{},"Option",[63,67,68],{},"Default",[63,70,71],{},"What it does",[73,74,75,92,107,126,145,157,180,195,210,225,240,255,270,285,300,315,340,355,370,385,400,414,428,445,466,484,498],"tbody",{},[60,76,77,84,89],{},[78,79,80],"td",{},[81,82,83],"code",{},"enabled",[78,85,86],{},[81,87,88],{},"true",[78,90,91],{},"Turn the whole module off without removing it.",[60,93,94,99,104],{},[78,95,96],{},[81,97,98],{},"endpoint",[78,100,101],{},[81,102,103],{},"'\u002F_precog\u002Fpredict'",[78,105,106],{},"Path of the Nitro route that talks to Jev.",[60,108,109,114,117],{},[78,110,111],{},[81,112,113],{},"model",[78,115,116],{},"unset",[78,118,119,120,125],{},"Leave it unset. See ",[121,122,124],"a",{"href":123},"#the-model-name-is-a-trap","the model name is a trap",".",[60,127,128,133,135],{},[78,129,130],{},[81,131,132],{},"provider",[78,134,116],{},[78,136,137,140,141,144],{},[81,138,139],{},"'typesafe'"," or ",[81,142,143],{},"'vercel'",". Unset, the key decides.",[60,146,147,152,154],{},[78,148,149],{},[81,150,151],{},"baseURL",[78,153,116],{},[78,155,156],{},"TypeSafe base URL. Point it at a mock in tests.",[60,158,159,164,169],{},[78,160,161],{},[81,162,163],{},"mode",[78,165,166],{},[81,167,168],{},"'prefetch'",[78,170,171,173,174,140,177,125],{},[81,172,168],{},", ",[81,175,176],{},"'prerender'",[81,178,179],{},"'auto'",[60,181,182,187,192],{},[78,183,184],{},[81,185,186],{},"thresholds.prefetch",[78,188,189],{},[81,190,191],{},"0.25",[78,193,194],{},"Lowest click probability worth a prefetch.",[60,196,197,202,207],{},[78,198,199],{},[81,200,201],{},"thresholds.prerender",[78,203,204],{},[81,205,206],{},"0.6",[78,208,209],{},"Lowest click probability worth a prerender.",[60,211,212,217,222],{},[78,213,214],{},[81,215,216],{},"budget.maxPrefetch",[78,218,219],{},[81,220,221],{},"3",[78,223,224],{},"Most URLs prefetched at once.",[60,226,227,232,237],{},[78,228,229],{},[81,230,231],{},"budget.maxPrerender",[78,233,234],{},[81,235,236],{},"1",[78,238,239],{},"Most URLs prerendered at once.",[60,241,242,247,252],{},[78,243,244],{},[81,245,246],{},"budget.maxCallsPerMinute",[78,248,249],{},[81,250,251],{},"20",[78,253,254],{},"Enforced on the client and on the server.",[60,256,257,262,267],{},[78,258,259],{},[81,260,261],{},"budget.maxCallsPerSession",[78,263,264],{},[81,265,266],{},"200",[78,268,269],{},"Hard stop for one visitor.",[60,271,272,277,282],{},[78,273,274],{},[81,275,276],{},"maxCandidates",[78,278,279],{},[81,280,281],{},"30",[78,283,284],{},"Links sent per request. Capped at 254 by Jev's choice limit.",[60,286,287,292,297],{},[78,288,289],{},[81,290,291],{},"timeoutMs",[78,293,294],{},[81,295,296],{},"1500",[78,298,299],{},"Client deadline. Measured round trips are 340 to 500 ms.",[60,301,302,307,312],{},[78,303,304],{},[81,305,306],{},"minIntervalMs",[78,308,309],{},[81,310,311],{},"1200",[78,313,314],{},"Shortest gap between two predictions.",[60,316,317,322,327],{},[78,318,319],{},[81,320,321],{},"fallback",[78,323,324],{},[81,325,326],{},"'native'",[78,328,329,330,332,333,336,337,125],{},"On failure: ",[81,331,326],{}," document rules at ",[81,334,335],{},"moderate",", or ",[81,338,339],{},"'none'",[60,341,342,347,352],{},[78,343,344],{},[81,345,346],{},"include",[78,348,349],{},[81,350,351],{},"[]",[78,353,354],{},"Only these path globs may be speculated. Empty means all.",[60,356,357,362,367],{},[78,358,359],{},[81,360,361],{},"exclude",[78,363,364],{},[81,365,366],{},"['\u002Flogout', '\u002Fsignout', '\u002Fapi\u002F**', '\u002Fauth\u002F**', '\u002Fcart\u002F**']",[78,368,369],{},"Never speculated.",[60,371,372,377,382],{},[78,373,374],{},[81,375,376],{},"cache.ttlSeconds",[78,378,379],{},[81,380,381],{},"60",[78,383,384],{},"How long a prediction stays reusable on the server.",[60,386,387,392,397],{},[78,388,389],{},[81,390,391],{},"privacy.sendQuery",[78,393,394],{},[81,395,396],{},"false",[78,398,399],{},"Send query strings. Off because they carry tokens.",[60,401,402,407,411],{},[78,403,404],{},[81,405,406],{},"privacy.sendAnchorText",[78,408,409],{},[81,410,88],{},[78,412,413],{},"Send link text.",[60,415,416,421,425],{},[78,417,418],{},[81,419,420],{},"privacy.sendHistory",[78,422,423],{},[81,424,88],{},[78,426,427],{},"Send the last five paths.",[60,429,430,435,439],{},[78,431,432],{},[81,433,434],{},"privacy.requireConsent",[78,436,437],{},[81,438,396],{},[78,440,441,442,125],{},"Nothing runs until ",[81,443,444],{},"grantConsent()",[60,446,447,452,457],{},[78,448,449],{},[81,450,451],{},"overlay",[78,453,454],{},[81,455,456],{},"'dev'",[78,458,459,173,461,140,463,465],{},[81,460,88],{},[81,462,396],{},[81,464,456],{},". When false, nothing ships.",[60,467,468,473,477],{},[78,469,470],{},[81,471,472],{},"takeOverNuxtLinkPrefetch",[78,474,475],{},[81,476,396],{},[78,478,479,480,483],{},"Turn off ",[81,481,482],{},"NuxtLink","'s viewport prefetch, keep interaction.",[60,485,486,491,495],{},[78,487,488],{},[81,489,490],{},"documentNavigation",[78,492,493],{},[81,494,396],{},[78,496,497],{},"Experimental, see below.",[60,499,500,505,507],{},[78,501,502],{},[81,503,504],{},"pricing",[78,506,116],{},[78,508,509,512],{},[81,510,511],{},"{ inputPerMillion, outputPerMillion }"," for the overlay's cost line.",[514,515,517],"h2",{"id":516},"the-api-key","The API key",[519,520,521],"p",{},"It never reaches the browser, and there is an e2e test that fails if it ever appears in\nanything the browser receives.",[519,523,524],{},"There are two kinds of key and they are not interchangeable:",[54,526,527,540],{},[57,528,529],{},[60,530,531,534,537],{},[63,532,533],{},"Variable",[63,535,536],{},"Kind of key",[63,538,539],{},"Goes to",[73,541,542,557,573],{},[60,543,544,549,552],{},[78,545,546],{},[81,547,548],{},"TYPESAFE_API_KEY",[78,550,551],{},"TypeSafe",[78,553,554],{},[81,555,556],{},"api.typesafe.ai",[60,558,559,564,567],{},[78,560,561],{},[81,562,563],{},"AI_GATEWAY_API_KEY",[78,565,566],{},"Vercel AI Gateway",[78,568,569,572],{},[81,570,571],{},"ai-gateway.vercel.sh",", selected automatically",[60,574,575,580,583],{},[78,576,577],{},[81,578,579],{},"NUXT_PRECOG_API_KEY",[78,581,582],{},"either",[78,584,585,586,588],{},"set ",[81,587,132],{}," to say which",[519,590,591,592,595],{},"A gateway key sent to TypeSafe directly answers ",[81,593,594],{},"401 Cannot authenticate with the server",",\nwhich reads like a bad key rather than the wrong door. If you see that, check which kind you\nhave before regenerating anything.",[514,597,599],{"id":598},"the-model-name-is-a-trap","The model name is a trap",[519,601,602,603,605,606,609,610,613],{},"Leave ",[81,604,113],{}," unset. advocaat then picks the right one for the service: ",[81,607,608],{},"jev-latest"," against\nTypeSafe, ",[81,611,612],{},"typesafe-ai\u002Fjev"," through the gateway.",[519,615,616,617,619,620,624,625,628,629,632,633,125],{},"Setting it to ",[81,618,608],{}," explicitly works directly and ",[621,622,623],"strong",{},"breaks the gateway",", where a bare\nname gets a ",[81,626,627],{},"typesafe-ai\u002F"," prefix and ",[81,630,631],{},"typesafe-ai\u002Fjev-latest"," does not exist. The error is\n",[81,634,635],{},"404 Model 'typesafe-ai\u002Fjev-latest' not found",[514,637,639],{"id":638},"glob-syntax","Glob syntax",[519,641,642,644,645,647],{},[81,643,346],{}," and ",[81,646,361],{}," take path globs, matched against the path with the query stripped:",[54,649,650,660],{},[57,651,652],{},[60,653,654,657],{},[63,655,656],{},"Glob",[63,658,659],{},"Matches",[73,661,662,674,691,704],{},[60,663,664,669],{},[78,665,666],{},[81,667,668],{},"\u002Flogout",[78,670,671,672],{},"exactly ",[81,673,668],{},[60,675,676,681],{},[78,677,678],{},[81,679,680],{},"\u002Fblog\u002F*",[78,682,683,684,687,688],{},"one segment: ",[81,685,686],{},"\u002Fblog\u002Fhello",", not ",[81,689,690],{},"\u002Fblog\u002F2026\u002Fhello",[60,692,693,698],{},[78,694,695],{},[81,696,697],{},"\u002Fapi\u002F**",[78,699,700,701],{},"any depth: ",[81,702,703],{},"\u002Fapi\u002Fv1\u002Fusers",[60,705,706,711],{},[78,707,708],{},[81,709,710],{},"\u002Fa?",[78,712,713,714],{},"one character: ",[81,715,716],{},"\u002Fa1",[514,718,720],{"id":719},"documentnavigation",[81,721,490],{},[723,724,725],"warning",{},[519,726,727],{},"Experimental.",[519,729,730],{},"With it on, a click on a link the module prerendered bypasses the client router and does a real\ndocument navigation, so the browser can hand over the copy it already has. Good for content\nsites that want an MPA feel; it throws away the SPA's state on every click.",[519,732,733,734,737],{},"Measured behaviour: the click does leave the router out, and the browser serves the document\nfrom whatever it already has. In a test that gives it a couple of seconds, that was the\nprefetch (",[81,735,736],{},"deliveryType: \"navigational-prefetch\"",") rather than a finished prerender. The flag\npromises a real document navigation that uses what is already there, not \"always instant\".",{"title":739,"searchDepth":740,"depth":740,"links":741},"",2,[742,743,744,745],{"id":516,"depth":740,"text":517},{"id":598,"depth":740,"text":599},{"id":638,"depth":740,"text":639},{"id":719,"depth":740,"text":490},"Everything under the precog key in nuxt.config.ts.","md",{"icon":31},{"icon":31},{"title":28,"description":746},"KLp0Y6nGpNKvdFfHyAbvXYnXs6mgf6R9Lm89vhxqb3Q",[753,755],{"title":23,"path":24,"stem":25,"description":754,"icon":26,"children":-1},"From a page full of links to two or three warmed navigations, and what happens at each step.",{"title":33,"path":34,"stem":35,"description":756,"icon":36,"children":-1},"The composable, the hooks, and the page and link attributes.",1789942050301]