[{"data":1,"prerenderedAt":1917},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-tanstack-ai":141,"-frameworks-tanstack-ai-surround":1912},[4,26,53,85,121,133],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Getting Started","\u002Fgetting-started","docs",[9,13,17,21],{"title":10,"path":11,"stem":12},"Introduction","\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Installation","\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":18,"path":19,"stem":20},"Quick Start","\u002Fgetting-started\u002Fquick-start","docs\u002F1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","docs\u002F1.getting-started\u002F4.agent-skills",false,{"title":27,"path":28,"stem":7,"children":29,"page":25},"Frameworks","\u002Fframeworks",[30,35,40,44,49],{"title":31,"path":32,"stem":33,"icon":34},"eve extension","\u002Fframeworks\u002Feve-extension","docs\u002F2.frameworks\u002F1.eve-extension","i-custom:eve",{"title":36,"path":37,"stem":38,"icon":39},"AI SDK","\u002Fframeworks\u002Fai-sdk","docs\u002F2.frameworks\u002F2.ai-sdk","i-simple-icons-vercel",{"title":41,"path":42,"stem":43,"icon":39},"Vercel Workflow","\u002Fframeworks\u002Fvercel-workflow","docs\u002F2.frameworks\u002F3.vercel-workflow",{"title":45,"path":46,"stem":47,"icon":48},"Chat SDK","\u002Fframeworks\u002Fchat-sdk","docs\u002F2.frameworks\u002F4.chat-sdk","i-lucide-message-square",{"title":50,"path":51,"stem":52},"TanStack AI","\u002Fframeworks\u002Ftanstack-ai","docs\u002F2.frameworks\u002F5.tanstack-ai",{"title":54,"path":55,"stem":7,"children":56,"page":25},"Examples","\u002Fexamples",[57,61,65,69,73,77,81],{"title":58,"path":59,"stem":60},"Overview","\u002Fexamples\u002Foverview","docs\u002F3.examples\u002F1.overview",{"title":62,"path":63,"stem":64,"icon":34},"Stale issue triager","\u002Fexamples\u002Feve-stale-issue-triager","docs\u002F3.examples\u002F2.eve-stale-issue-triager",{"title":66,"path":67,"stem":68,"icon":39},"Release notes generator","\u002Fexamples\u002Fai-sdk-release-notes-generator","docs\u002F3.examples\u002F3.ai-sdk-release-notes-generator",{"title":70,"path":71,"stem":72,"icon":39},"CI failure bot","\u002Fexamples\u002Fvercel-workflow-ci-failure-bot","docs\u002F3.examples\u002F4.vercel-workflow-ci-failure-bot",{"title":74,"path":75,"stem":76,"icon":48},"Issue triage bot","\u002Fexamples\u002Fchat-sdk-issue-triage-bot","docs\u002F3.examples\u002F5.chat-sdk-issue-triage-bot",{"title":78,"path":79,"stem":80,"icon":34},"Manager & sub-agents","\u002Fexamples\u002Fmanager-agent-with-subagents","docs\u002F3.examples\u002F6.manager-agent-with-subagents",{"title":82,"path":83,"stem":84},"Recipes","\u002Fexamples\u002Frecipes","docs\u002F3.examples\u002F7.recipes",{"title":86,"path":87,"stem":7,"children":88,"page":25},"Guide","\u002Fguide",[89,93,97,101,105,109,113,117],{"title":90,"path":91,"stem":92},"Scope with Presets","\u002Fguide\u002Fpresets","docs\u002F4.guide\u002F1.presets",{"title":94,"path":95,"stem":96},"Control Write Safety","\u002Fguide\u002Fapproval-control","docs\u002F4.guide\u002F2.approval-control",{"title":98,"path":99,"stem":100},"Commit Attribution","\u002Fguide\u002Fcommit-attribution","docs\u002F4.guide\u002F3.commit-attribution",{"title":102,"path":103,"stem":104},"Tokens & Auth","\u002Fguide\u002Ftokens-and-auth","docs\u002F4.guide\u002F4.tokens-and-auth",{"title":106,"path":107,"stem":108},"Vercel Connect","\u002Fguide\u002Fvercel-connect","docs\u002F4.guide\u002F5.vercel-connect",{"title":110,"path":111,"stem":112},"Working context","\u002Fguide\u002Fworking-context","docs\u002F4.guide\u002F6.working-context",{"title":114,"path":115,"stem":116},"Errors","\u002Fguide\u002Ferrors","docs\u002F4.guide\u002F7.errors",{"title":118,"path":119,"stem":120},"Jev from TypeSafe AI","\u002Fguide\u002Fjev-typesafe-ai","docs\u002F4.guide\u002F8.jev-typesafe-ai",{"title":122,"path":123,"stem":7,"children":124,"page":25},"Api","\u002Fapi",[125,129],{"title":126,"path":127,"stem":128},"Tools Catalog","\u002Fapi\u002Ftools-catalog","docs\u002F5.api\u002F1.tools-catalog",{"title":130,"path":131,"stem":132},"API Reference","\u002Fapi\u002Freference","docs\u002F5.api\u002F2.reference",{"title":134,"path":135,"stem":7,"children":136,"page":25},"Deprecated","\u002Fdeprecated",[137],{"title":138,"path":139,"stem":140,"icon":34},"eve (direct import)","\u002Fdeprecated\u002Feve","docs\u002F6.deprecated\u002F1.eve",{"id":142,"title":50,"body":143,"description":1899,"extension":1900,"links":1901,"meta":1909,"navigation":386,"path":51,"seo":1910,"stem":52,"__hash__":1911},"docs\u002Fdocs\u002F2.frameworks\u002F5.tanstack-ai.md",{"type":144,"value":145,"toc":1890},"minimark",[146,170,175,178,285,302,321,325,571,579,659,689,717,721,966,973,1082,1102,1106,1254,1282,1299,1304,1311,1624,1634,1638,1657,1688,1691,1694,1886],[147,148,149,150,154,155,161,162,165,166,169],"p",{},"Import from ",[151,152,153],"code",{},"@github-tools\u002Fsdk\u002Ftanstack"," to use GitHub tools with ",[156,157,50],"a",{"href":158,"rel":159},"https:\u002F\u002Ftanstack.com\u002Fai\u002Flatest\u002Fdocs\u002Ftools\u002Ftools",[160],"nofollow",". The entry point exports native server-tool arrays, individual tool factories, and a prebuilt agent with ",[151,163,164],{},"generate()"," and ",[151,167,168],{},"stream()",".",[171,172,174],"h2",{"id":173},"install","Install",[147,176,177],{},"These examples use Vercel AI Gateway for chat and Jev evaluation:",[179,180,181,218,241,263],"code-group",{},[182,183,189],"pre",{"className":184,"code":185,"filename":186,"language":187,"meta":188,"style":188},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @github-tools\u002Fsdk @tanstack\u002Fai@0.64 @tanstack\u002Fai-vercel-gateway@0.3 ai zod\n","pnpm","bash","",[151,190,191],{"__ignoreMap":188},[192,193,196,199,203,206,209,212,215],"span",{"class":194,"line":195},"line",1,[192,197,186],{"class":198},"sBMFI",[192,200,202],{"class":201},"sfazB"," add",[192,204,205],{"class":201}," @github-tools\u002Fsdk",[192,207,208],{"class":201}," @tanstack\u002Fai@0.64",[192,210,211],{"class":201}," @tanstack\u002Fai-vercel-gateway@0.3",[192,213,214],{"class":201}," ai",[192,216,217],{"class":201}," zod\n",[182,219,222],{"className":184,"code":220,"filename":221,"language":187,"meta":188,"style":188},"npm install @github-tools\u002Fsdk @tanstack\u002Fai@0.64 @tanstack\u002Fai-vercel-gateway@0.3 ai zod\n","npm",[151,223,224],{"__ignoreMap":188},[192,225,226,228,231,233,235,237,239],{"class":194,"line":195},[192,227,221],{"class":198},[192,229,230],{"class":201}," install",[192,232,205],{"class":201},[192,234,208],{"class":201},[192,236,211],{"class":201},[192,238,214],{"class":201},[192,240,217],{"class":201},[182,242,245],{"className":184,"code":243,"filename":244,"language":187,"meta":188,"style":188},"yarn add @github-tools\u002Fsdk @tanstack\u002Fai@0.64 @tanstack\u002Fai-vercel-gateway@0.3 ai zod\n","yarn",[151,246,247],{"__ignoreMap":188},[192,248,249,251,253,255,257,259,261],{"class":194,"line":195},[192,250,244],{"class":198},[192,252,202],{"class":201},[192,254,205],{"class":201},[192,256,208],{"class":201},[192,258,211],{"class":201},[192,260,214],{"class":201},[192,262,217],{"class":201},[182,264,267],{"className":184,"code":265,"filename":266,"language":187,"meta":188,"style":188},"bun add @github-tools\u002Fsdk @tanstack\u002Fai@0.64 @tanstack\u002Fai-vercel-gateway@0.3 ai zod\n","bun",[151,268,269],{"__ignoreMap":188},[192,270,271,273,275,277,279,281,283],{"class":194,"line":195},[192,272,266],{"class":198},[192,274,202],{"class":201},[192,276,205],{"class":201},[192,278,208],{"class":201},[192,280,211],{"class":201},[192,282,214],{"class":201},[192,284,217],{"class":201},[147,286,287,288,165,291,294,295,298,299,169],{},"The SDK retains ",[151,289,290],{},"ai",[151,292,293],{},"zod"," as package peers. The TanStack entry point uses TanStack's execution loop. ",[151,296,297],{},"@tanstack\u002Fai-vercel-gateway"," is optional when you supply another chat adapter and, for auto modes, your own ",[151,300,301],{},"evaluation.adapter",[147,303,304,305,308,309,312,313,316,317,320],{},"Set ",[151,306,307],{},"GITHUB_TOKEN"," on the server with the ",[156,310,311],{"href":103},"permissions your tools need",". For Gateway, set ",[151,314,315],{},"AI_GATEWAY_API_KEY"," or use Vercel OIDC authentication. Enable ",[151,318,319],{},"typesafe-ai\u002Fjev"," for auto evaluation. Keep these credentials on the server.",[171,322,324],{"id":323},"use-the-prebuilt-agent","Use the prebuilt agent",[182,326,331],{"className":327,"code":328,"filename":329,"language":330,"meta":188,"style":188},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createGithubAgent } from '@github-tools\u002Fsdk\u002Ftanstack'\nimport { vercelGatewayText } from '@tanstack\u002Fai-vercel-gateway'\n\nconst agent = createGithubAgent({\n  adapter: vercelGatewayText('anthropic\u002Fclaude-opus-5'),\n  preset: 'repo-explorer',\n  context: { owner: 'vercel', repo: 'ai' },\n})\n\nconst text = await agent.generate({\n  prompt: 'Summarize the open pull requests.',\n})\nconsole.log(text)\n","agent.ts","ts",[151,332,333,361,381,388,410,438,455,494,503,508,533,550,557],{"__ignoreMap":188},[192,334,335,339,343,347,350,353,356,358],{"class":194,"line":195},[192,336,338],{"class":337},"s7zQu","import",[192,340,342],{"class":341},"sMK4o"," {",[192,344,346],{"class":345},"sTEyZ"," createGithubAgent",[192,348,349],{"class":341}," }",[192,351,352],{"class":337}," from",[192,354,355],{"class":341}," '",[192,357,153],{"class":201},[192,359,360],{"class":341},"'\n",[192,362,364,366,368,371,373,375,377,379],{"class":194,"line":363},2,[192,365,338],{"class":337},[192,367,342],{"class":341},[192,369,370],{"class":345}," vercelGatewayText",[192,372,349],{"class":341},[192,374,352],{"class":337},[192,376,355],{"class":341},[192,378,297],{"class":201},[192,380,360],{"class":341},[192,382,384],{"class":194,"line":383},3,[192,385,387],{"emptyLinePlaceholder":386},true,"\n",[192,389,391,395,398,401,404,407],{"class":194,"line":390},4,[192,392,394],{"class":393},"spNyl","const",[192,396,397],{"class":345}," agent ",[192,399,400],{"class":341},"=",[192,402,346],{"class":403},"s2Zo4",[192,405,406],{"class":345},"(",[192,408,409],{"class":341},"{\n",[192,411,413,417,420,422,424,427,430,432,435],{"class":194,"line":412},5,[192,414,416],{"class":415},"swJcz","  adapter",[192,418,419],{"class":341},":",[192,421,370],{"class":403},[192,423,406],{"class":345},[192,425,426],{"class":341},"'",[192,428,429],{"class":201},"anthropic\u002Fclaude-opus-5",[192,431,426],{"class":341},[192,433,434],{"class":345},")",[192,436,437],{"class":341},",\n",[192,439,441,444,446,448,451,453],{"class":194,"line":440},6,[192,442,443],{"class":415},"  preset",[192,445,419],{"class":341},[192,447,355],{"class":341},[192,449,450],{"class":201},"repo-explorer",[192,452,426],{"class":341},[192,454,437],{"class":341},[192,456,458,461,463,465,468,470,472,475,477,480,483,485,487,489,491],{"class":194,"line":457},7,[192,459,460],{"class":415},"  context",[192,462,419],{"class":341},[192,464,342],{"class":341},[192,466,467],{"class":415}," owner",[192,469,419],{"class":341},[192,471,355],{"class":341},[192,473,474],{"class":201},"vercel",[192,476,426],{"class":341},[192,478,479],{"class":341},",",[192,481,482],{"class":415}," repo",[192,484,419],{"class":341},[192,486,355],{"class":341},[192,488,290],{"class":201},[192,490,426],{"class":341},[192,492,493],{"class":341}," },\n",[192,495,497,500],{"class":194,"line":496},8,[192,498,499],{"class":341},"}",[192,501,502],{"class":345},")\n",[192,504,506],{"class":194,"line":505},9,[192,507,387],{"emptyLinePlaceholder":386},[192,509,511,513,516,518,521,524,526,529,531],{"class":194,"line":510},10,[192,512,394],{"class":393},[192,514,515],{"class":345}," text ",[192,517,400],{"class":341},[192,519,520],{"class":337}," await",[192,522,523],{"class":345}," agent",[192,525,169],{"class":341},[192,527,528],{"class":403},"generate",[192,530,406],{"class":345},[192,532,409],{"class":341},[192,534,536,539,541,543,546,548],{"class":194,"line":535},11,[192,537,538],{"class":415},"  prompt",[192,540,419],{"class":341},[192,542,355],{"class":341},[192,544,545],{"class":201},"Summarize the open pull requests.",[192,547,426],{"class":341},[192,549,437],{"class":341},[192,551,553,555],{"class":194,"line":552},12,[192,554,499],{"class":341},[192,556,502],{"class":345},[192,558,560,563,565,568],{"class":194,"line":559},13,[192,561,562],{"class":345},"console",[192,564,169],{"class":341},[192,566,567],{"class":403},"log",[192,569,570],{"class":345},"(text)\n",[147,572,573,575,576,578],{},[151,574,164],{}," returns a string and throws if the run requires human review. ",[151,577,168],{}," returns TanStack's native event stream, which you can pass to its transport helpers:",[182,580,583],{"className":327,"code":581,"filename":582,"language":330,"meta":188,"style":188},"import { toServerSentEventsResponse } from '@tanstack\u002Fai'\n\n\u002F\u002F Use the agent defined above in your server route.\nconst response = toServerSentEventsResponse(agent.stream({\n  prompt: 'Summarize the open pull requests.',\n}))\n","stream.ts",[151,584,585,605,609,615,638,652],{"__ignoreMap":188},[192,586,587,589,591,594,596,598,600,603],{"class":194,"line":195},[192,588,338],{"class":337},[192,590,342],{"class":341},[192,592,593],{"class":345}," toServerSentEventsResponse",[192,595,349],{"class":341},[192,597,352],{"class":337},[192,599,355],{"class":341},[192,601,602],{"class":201},"@tanstack\u002Fai",[192,604,360],{"class":341},[192,606,607],{"class":194,"line":363},[192,608,387],{"emptyLinePlaceholder":386},[192,610,611],{"class":194,"line":383},[192,612,614],{"class":613},"sHwdD","\u002F\u002F Use the agent defined above in your server route.\n",[192,616,617,619,622,624,626,629,631,634,636],{"class":194,"line":390},[192,618,394],{"class":393},[192,620,621],{"class":345}," response ",[192,623,400],{"class":341},[192,625,593],{"class":403},[192,627,628],{"class":345},"(agent",[192,630,169],{"class":341},[192,632,633],{"class":403},"stream",[192,635,406],{"class":345},[192,637,409],{"class":341},[192,639,640,642,644,646,648,650],{"class":194,"line":412},[192,641,538],{"class":415},[192,643,419],{"class":341},[192,645,355],{"class":341},[192,647,545],{"class":201},[192,649,426],{"class":341},[192,651,437],{"class":341},[192,653,654,656],{"class":194,"line":440},[192,655,499],{"class":341},[192,657,658],{"class":345},"))\n",[147,660,661,662,665,666,669,670,673,674,673,677,680,681,684,685,688],{},"Use ",[151,663,664],{},"messages"," instead of ",[151,667,668],{},"prompt"," for conversation history. The agent keeps no conversation state between calls. Pass TanStack continuation fields, including ",[151,671,672],{},"threadId",", ",[151,675,676],{},"runId",[151,678,679],{},"parentRunId",", and ",[151,682,683],{},"resume",", with the message history when resuming an interrupted call. Pass an ",[151,686,687],{},"abortController"," to cancel a call.",[147,690,691,692,695,696,699,700,703,704,706,707,709,710,713,714,169],{},"Presets, working context, token providers, and commit attribution follow the ",[156,693,694],{"href":131},"shared SDK options",". Set ",[151,697,698],{},"instructions"," to replace the preset prompt or ",[151,701,702],{},"additionalInstructions"," to append guidance to the preset prompt. When ",[151,705,698],{}," is supplied, ",[151,708,702],{}," is ignored. Pass provider settings through ",[151,711,712],{},"modelOptions"," and a TanStack loop strategy through ",[151,715,716],{},"agentLoopStrategy",[171,718,720],{"id":719},"use-tools-in-an-existing-chat","Use tools in an existing chat",[182,722,725],{"className":327,"code":723,"filename":724,"language":330,"meta":188,"style":188},"import { chat } from '@tanstack\u002Fai'\nimport { vercelGatewayText } from '@tanstack\u002Fai-vercel-gateway'\nimport { createGithubTools } from '@github-tools\u002Fsdk\u002Ftanstack'\n\nconst tools = createGithubTools({\n  preset: ['repo-explorer', 'code-review'],\n  context: { owner: 'vercel', repo: 'ai' },\n})\n\nconst stream = chat({\n  adapter: vercelGatewayText('anthropic\u002Fclaude-opus-5'),\n  tools,\n  messages: [{ role: 'user', content: 'Review pull request #42.' }],\n})\n","tools.ts",[151,726,727,746,764,783,787,802,831,863,869,873,888,908,915,959],{"__ignoreMap":188},[192,728,729,731,733,736,738,740,742,744],{"class":194,"line":195},[192,730,338],{"class":337},[192,732,342],{"class":341},[192,734,735],{"class":345}," chat",[192,737,349],{"class":341},[192,739,352],{"class":337},[192,741,355],{"class":341},[192,743,602],{"class":201},[192,745,360],{"class":341},[192,747,748,750,752,754,756,758,760,762],{"class":194,"line":363},[192,749,338],{"class":337},[192,751,342],{"class":341},[192,753,370],{"class":345},[192,755,349],{"class":341},[192,757,352],{"class":337},[192,759,355],{"class":341},[192,761,297],{"class":201},[192,763,360],{"class":341},[192,765,766,768,770,773,775,777,779,781],{"class":194,"line":383},[192,767,338],{"class":337},[192,769,342],{"class":341},[192,771,772],{"class":345}," createGithubTools",[192,774,349],{"class":341},[192,776,352],{"class":337},[192,778,355],{"class":341},[192,780,153],{"class":201},[192,782,360],{"class":341},[192,784,785],{"class":194,"line":390},[192,786,387],{"emptyLinePlaceholder":386},[192,788,789,791,794,796,798,800],{"class":194,"line":412},[192,790,394],{"class":393},[192,792,793],{"class":345}," tools ",[192,795,400],{"class":341},[192,797,772],{"class":403},[192,799,406],{"class":345},[192,801,409],{"class":341},[192,803,804,806,808,811,813,815,817,819,821,824,826,829],{"class":194,"line":440},[192,805,443],{"class":415},[192,807,419],{"class":341},[192,809,810],{"class":345}," [",[192,812,426],{"class":341},[192,814,450],{"class":201},[192,816,426],{"class":341},[192,818,479],{"class":341},[192,820,355],{"class":341},[192,822,823],{"class":201},"code-review",[192,825,426],{"class":341},[192,827,828],{"class":345},"]",[192,830,437],{"class":341},[192,832,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861],{"class":194,"line":457},[192,834,460],{"class":415},[192,836,419],{"class":341},[192,838,342],{"class":341},[192,840,467],{"class":415},[192,842,419],{"class":341},[192,844,355],{"class":341},[192,846,474],{"class":201},[192,848,426],{"class":341},[192,850,479],{"class":341},[192,852,482],{"class":415},[192,854,419],{"class":341},[192,856,355],{"class":341},[192,858,290],{"class":201},[192,860,426],{"class":341},[192,862,493],{"class":341},[192,864,865,867],{"class":194,"line":496},[192,866,499],{"class":341},[192,868,502],{"class":345},[192,870,871],{"class":194,"line":505},[192,872,387],{"emptyLinePlaceholder":386},[192,874,875,877,880,882,884,886],{"class":194,"line":510},[192,876,394],{"class":393},[192,878,879],{"class":345}," stream ",[192,881,400],{"class":341},[192,883,735],{"class":403},[192,885,406],{"class":345},[192,887,409],{"class":341},[192,889,890,892,894,896,898,900,902,904,906],{"class":194,"line":535},[192,891,416],{"class":415},[192,893,419],{"class":341},[192,895,370],{"class":403},[192,897,406],{"class":345},[192,899,426],{"class":341},[192,901,429],{"class":201},[192,903,426],{"class":341},[192,905,434],{"class":345},[192,907,437],{"class":341},[192,909,910,913],{"class":194,"line":552},[192,911,912],{"class":345},"  tools",[192,914,437],{"class":341},[192,916,917,920,922,924,927,930,932,934,937,939,941,944,946,948,951,953,955,957],{"class":194,"line":559},[192,918,919],{"class":415},"  messages",[192,921,419],{"class":341},[192,923,810],{"class":345},[192,925,926],{"class":341},"{",[192,928,929],{"class":415}," role",[192,931,419],{"class":341},[192,933,355],{"class":341},[192,935,936],{"class":201},"user",[192,938,426],{"class":341},[192,940,479],{"class":341},[192,942,943],{"class":415}," content",[192,945,419],{"class":341},[192,947,355],{"class":341},[192,949,950],{"class":201},"Review pull request #42.",[192,952,426],{"class":341},[192,954,349],{"class":341},[192,956,828],{"class":345},[192,958,437],{"class":341},[192,960,962,964],{"class":194,"line":961},14,[192,963,499],{"class":341},[192,965,502],{"class":345},[147,967,968,969,972],{},"Tools are an array, so combine them with other TanStack tools using ",[151,970,971],{},"[...tools, yourTool]",". Each tool is also available as a named factory:",[182,974,977],{"className":327,"code":975,"filename":976,"language":330,"meta":188,"style":188},"import { getRepository, addIssueComment } from '@github-tools\u002Fsdk\u002Ftanstack'\n\nconst tools = [\n  getRepository(process.env.GITHUB_TOKEN!),\n  addIssueComment(process.env.GITHUB_TOKEN!, { needsApproval: true }),\n]\n","individual-tools.ts",[151,978,979,1003,1007,1018,1042,1077],{"__ignoreMap":188},[192,980,981,983,985,988,990,993,995,997,999,1001],{"class":194,"line":195},[192,982,338],{"class":337},[192,984,342],{"class":341},[192,986,987],{"class":345}," getRepository",[192,989,479],{"class":341},[192,991,992],{"class":345}," addIssueComment",[192,994,349],{"class":341},[192,996,352],{"class":337},[192,998,355],{"class":341},[192,1000,153],{"class":201},[192,1002,360],{"class":341},[192,1004,1005],{"class":194,"line":363},[192,1006,387],{"emptyLinePlaceholder":386},[192,1008,1009,1011,1013,1015],{"class":194,"line":383},[192,1010,394],{"class":393},[192,1012,793],{"class":345},[192,1014,400],{"class":341},[192,1016,1017],{"class":345}," [\n",[192,1019,1020,1023,1026,1028,1031,1033,1035,1038,1040],{"class":194,"line":390},[192,1021,1022],{"class":403},"  getRepository",[192,1024,1025],{"class":345},"(process",[192,1027,169],{"class":341},[192,1029,1030],{"class":345},"env",[192,1032,169],{"class":341},[192,1034,307],{"class":345},[192,1036,1037],{"class":341},"!",[192,1039,434],{"class":345},[192,1041,437],{"class":341},[192,1043,1044,1047,1049,1051,1053,1055,1057,1060,1062,1065,1067,1071,1073,1075],{"class":194,"line":412},[192,1045,1046],{"class":403},"  addIssueComment",[192,1048,1025],{"class":345},[192,1050,169],{"class":341},[192,1052,1030],{"class":345},[192,1054,169],{"class":341},[192,1056,307],{"class":345},[192,1058,1059],{"class":341},"!,",[192,1061,342],{"class":341},[192,1063,1064],{"class":415}," needsApproval",[192,1066,419],{"class":341},[192,1068,1070],{"class":1069},"sfNiH"," true",[192,1072,349],{"class":341},[192,1074,434],{"class":345},[192,1076,437],{"class":341},[192,1078,1079],{"class":194,"line":440},[192,1080,1081],{"class":345},"]\n",[147,1083,1084,1085,695,1090,1093,1094,1097,1098,1101],{},"Writes require approval by default. Static boolean policies use ",[156,1086,1089],{"href":1087,"rel":1088},"https:\u002F\u002Ftanstack.com\u002Fai\u002Flatest\u002Fdocs\u002Ftools\u002Ftool-approval",[160],"TanStack's native tool approval flow",[151,1091,1092],{},"requireApproval"," globally or per tool, or use ",[151,1095,1096],{},"overrides"," to change a tool's description or ",[151,1099,1100],{},"needsApproval"," policy. Execution functions and schemas cannot be overridden.",[171,1103,1105],{"id":1104},"enable-jev-auto-modes","Enable Jev auto modes",[182,1107,1110],{"className":327,"code":1108,"filename":1109,"language":330,"meta":188,"style":188},"import { createGithubAgent } from '@github-tools\u002Fsdk\u002Ftanstack'\nimport { vercelGatewayText } from '@tanstack\u002Fai-vercel-gateway'\n\nconst agent = createGithubAgent({\n  adapter: vercelGatewayText('anthropic\u002Fclaude-opus-5'),\n  context: { owner: 'vercel', repo: 'ai' },\n  preset: 'auto',\n  requireApproval: 'auto',\n})\n","auto-agent.ts",[151,1111,1112,1130,1148,1152,1166,1186,1218,1233,1248],{"__ignoreMap":188},[192,1113,1114,1116,1118,1120,1122,1124,1126,1128],{"class":194,"line":195},[192,1115,338],{"class":337},[192,1117,342],{"class":341},[192,1119,346],{"class":345},[192,1121,349],{"class":341},[192,1123,352],{"class":337},[192,1125,355],{"class":341},[192,1127,153],{"class":201},[192,1129,360],{"class":341},[192,1131,1132,1134,1136,1138,1140,1142,1144,1146],{"class":194,"line":363},[192,1133,338],{"class":337},[192,1135,342],{"class":341},[192,1137,370],{"class":345},[192,1139,349],{"class":341},[192,1141,352],{"class":337},[192,1143,355],{"class":341},[192,1145,297],{"class":201},[192,1147,360],{"class":341},[192,1149,1150],{"class":194,"line":383},[192,1151,387],{"emptyLinePlaceholder":386},[192,1153,1154,1156,1158,1160,1162,1164],{"class":194,"line":390},[192,1155,394],{"class":393},[192,1157,397],{"class":345},[192,1159,400],{"class":341},[192,1161,346],{"class":403},[192,1163,406],{"class":345},[192,1165,409],{"class":341},[192,1167,1168,1170,1172,1174,1176,1178,1180,1182,1184],{"class":194,"line":412},[192,1169,416],{"class":415},[192,1171,419],{"class":341},[192,1173,370],{"class":403},[192,1175,406],{"class":345},[192,1177,426],{"class":341},[192,1179,429],{"class":201},[192,1181,426],{"class":341},[192,1183,434],{"class":345},[192,1185,437],{"class":341},[192,1187,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216],{"class":194,"line":440},[192,1189,460],{"class":415},[192,1191,419],{"class":341},[192,1193,342],{"class":341},[192,1195,467],{"class":415},[192,1197,419],{"class":341},[192,1199,355],{"class":341},[192,1201,474],{"class":201},[192,1203,426],{"class":341},[192,1205,479],{"class":341},[192,1207,482],{"class":415},[192,1209,419],{"class":341},[192,1211,355],{"class":341},[192,1213,290],{"class":201},[192,1215,426],{"class":341},[192,1217,493],{"class":341},[192,1219,1220,1222,1224,1226,1229,1231],{"class":194,"line":457},[192,1221,443],{"class":415},[192,1223,419],{"class":341},[192,1225,355],{"class":341},[192,1227,1228],{"class":201},"auto",[192,1230,426],{"class":341},[192,1232,437],{"class":341},[192,1234,1235,1238,1240,1242,1244,1246],{"class":194,"line":496},[192,1236,1237],{"class":415},"  requireApproval",[192,1239,419],{"class":341},[192,1241,355],{"class":341},[192,1243,1228],{"class":201},[192,1245,426],{"class":341},[192,1247,437],{"class":341},[192,1249,1250,1252],{"class":194,"line":505},[192,1251,499],{"class":341},[192,1253,502],{"class":345},[147,1255,1256,1257,1264,1265,1268,1269,1272,1273,1275,1276,1278,1279,1281],{},"The agent uses TanStack's ",[156,1258,1261],{"href":1259,"rel":1260},"https:\u002F\u002Ftanstack.com\u002Fai\u002Flatest\u002Fdocs\u002Fevaluate\u002Fevaluate",[160],[151,1262,1263],{},"decide()"," with ",[151,1266,1267],{},"vercelGatewayDecider('typesafe-ai\u002Fjev')",". It selects presets from the latest user message once per new invocation and checks eligible writes before execution. The same ",[156,1270,1271],{"href":119},"risk, intent, and preset thresholds"," apply across integrations. Evaluation failures log a warning, require human approval for writes, and select ",[151,1274,450],{}," for routing. Cancellation stops the call. When ",[151,1277,683],{}," contains continuation data, auto routing is skipped: the agent exposes ",[151,1280,450],{}," plus the GitHub tools named in pending calls.",[147,1283,661,1284,1286,1287,673,1290,673,1293,680,1296,169],{},[151,1285,301],{}," to supply a TanStack evaluation adapter. The remaining evaluation options are ",[151,1288,1289],{},"maxRisk",[151,1291,1292],{},"minIntent",[151,1294,1295],{},"minPresetProbability",[151,1297,1298],{},"maxPresets",[1300,1301,1303],"h3",{"id":1302},"direct-tools-with-auto-approval","Direct tools with auto approval",[147,1305,1306,1307,1310],{},"When using ",[151,1308,1309],{},"chat()"," directly, install the approval middleware and register the shared interrupt definition:",[182,1312,1315],{"className":327,"code":1313,"filename":1314,"language":330,"meta":188,"style":188},"import { chat } from '@tanstack\u002Fai'\nimport { vercelGatewayText } from '@tanstack\u002Fai-vercel-gateway'\nimport {\n  createGithubApprovalMiddleware,\n  createGithubTools,\n} from '@github-tools\u002Fsdk\u002Ftanstack'\nimport { githubToolApproval } from '@github-tools\u002Fsdk\u002Ftanstack\u002Finterrupts'\n\nconst tools = createGithubTools({\n  preset: 'issue-triage',\n  requireApproval: 'auto',\n  context: { owner: 'vercel', repo: 'ai' },\n})\n\nconst stream = chat({\n  adapter: vercelGatewayText('anthropic\u002Fclaude-opus-5'),\n  tools,\n  middleware: [createGithubApprovalMiddleware({ tools })],\n  interrupts: [githubToolApproval],\n  messages: [{ role: 'user', content: 'Add the bug label to issue #42.' }],\n})\n","auto-tools.ts",[151,1316,1317,1335,1353,1360,1367,1374,1386,1406,1410,1424,1439,1453,1485,1491,1495,1510,1531,1538,1564,1577,1617],{"__ignoreMap":188},[192,1318,1319,1321,1323,1325,1327,1329,1331,1333],{"class":194,"line":195},[192,1320,338],{"class":337},[192,1322,342],{"class":341},[192,1324,735],{"class":345},[192,1326,349],{"class":341},[192,1328,352],{"class":337},[192,1330,355],{"class":341},[192,1332,602],{"class":201},[192,1334,360],{"class":341},[192,1336,1337,1339,1341,1343,1345,1347,1349,1351],{"class":194,"line":363},[192,1338,338],{"class":337},[192,1340,342],{"class":341},[192,1342,370],{"class":345},[192,1344,349],{"class":341},[192,1346,352],{"class":337},[192,1348,355],{"class":341},[192,1350,297],{"class":201},[192,1352,360],{"class":341},[192,1354,1355,1357],{"class":194,"line":383},[192,1356,338],{"class":337},[192,1358,1359],{"class":341}," {\n",[192,1361,1362,1365],{"class":194,"line":390},[192,1363,1364],{"class":345},"  createGithubApprovalMiddleware",[192,1366,437],{"class":341},[192,1368,1369,1372],{"class":194,"line":412},[192,1370,1371],{"class":345},"  createGithubTools",[192,1373,437],{"class":341},[192,1375,1376,1378,1380,1382,1384],{"class":194,"line":440},[192,1377,499],{"class":341},[192,1379,352],{"class":337},[192,1381,355],{"class":341},[192,1383,153],{"class":201},[192,1385,360],{"class":341},[192,1387,1388,1390,1392,1395,1397,1399,1401,1404],{"class":194,"line":457},[192,1389,338],{"class":337},[192,1391,342],{"class":341},[192,1393,1394],{"class":345}," githubToolApproval",[192,1396,349],{"class":341},[192,1398,352],{"class":337},[192,1400,355],{"class":341},[192,1402,1403],{"class":201},"@github-tools\u002Fsdk\u002Ftanstack\u002Finterrupts",[192,1405,360],{"class":341},[192,1407,1408],{"class":194,"line":496},[192,1409,387],{"emptyLinePlaceholder":386},[192,1411,1412,1414,1416,1418,1420,1422],{"class":194,"line":505},[192,1413,394],{"class":393},[192,1415,793],{"class":345},[192,1417,400],{"class":341},[192,1419,772],{"class":403},[192,1421,406],{"class":345},[192,1423,409],{"class":341},[192,1425,1426,1428,1430,1432,1435,1437],{"class":194,"line":510},[192,1427,443],{"class":415},[192,1429,419],{"class":341},[192,1431,355],{"class":341},[192,1433,1434],{"class":201},"issue-triage",[192,1436,426],{"class":341},[192,1438,437],{"class":341},[192,1440,1441,1443,1445,1447,1449,1451],{"class":194,"line":535},[192,1442,1237],{"class":415},[192,1444,419],{"class":341},[192,1446,355],{"class":341},[192,1448,1228],{"class":201},[192,1450,426],{"class":341},[192,1452,437],{"class":341},[192,1454,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483],{"class":194,"line":552},[192,1456,460],{"class":415},[192,1458,419],{"class":341},[192,1460,342],{"class":341},[192,1462,467],{"class":415},[192,1464,419],{"class":341},[192,1466,355],{"class":341},[192,1468,474],{"class":201},[192,1470,426],{"class":341},[192,1472,479],{"class":341},[192,1474,482],{"class":415},[192,1476,419],{"class":341},[192,1478,355],{"class":341},[192,1480,290],{"class":201},[192,1482,426],{"class":341},[192,1484,493],{"class":341},[192,1486,1487,1489],{"class":194,"line":559},[192,1488,499],{"class":341},[192,1490,502],{"class":345},[192,1492,1493],{"class":194,"line":961},[192,1494,387],{"emptyLinePlaceholder":386},[192,1496,1498,1500,1502,1504,1506,1508],{"class":194,"line":1497},15,[192,1499,394],{"class":393},[192,1501,879],{"class":345},[192,1503,400],{"class":341},[192,1505,735],{"class":403},[192,1507,406],{"class":345},[192,1509,409],{"class":341},[192,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529],{"class":194,"line":1512},16,[192,1514,416],{"class":415},[192,1516,419],{"class":341},[192,1518,370],{"class":403},[192,1520,406],{"class":345},[192,1522,426],{"class":341},[192,1524,429],{"class":201},[192,1526,426],{"class":341},[192,1528,434],{"class":345},[192,1530,437],{"class":341},[192,1532,1534,1536],{"class":194,"line":1533},17,[192,1535,912],{"class":345},[192,1537,437],{"class":341},[192,1539,1541,1544,1546,1548,1551,1553,1555,1557,1559,1562],{"class":194,"line":1540},18,[192,1542,1543],{"class":415},"  middleware",[192,1545,419],{"class":341},[192,1547,810],{"class":345},[192,1549,1550],{"class":403},"createGithubApprovalMiddleware",[192,1552,406],{"class":345},[192,1554,926],{"class":341},[192,1556,793],{"class":345},[192,1558,499],{"class":341},[192,1560,1561],{"class":345},")]",[192,1563,437],{"class":341},[192,1565,1567,1570,1572,1575],{"class":194,"line":1566},19,[192,1568,1569],{"class":415},"  interrupts",[192,1571,419],{"class":341},[192,1573,1574],{"class":345}," [githubToolApproval]",[192,1576,437],{"class":341},[192,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1609,1611,1613,1615],{"class":194,"line":1579},20,[192,1581,919],{"class":415},[192,1583,419],{"class":341},[192,1585,810],{"class":345},[192,1587,926],{"class":341},[192,1589,929],{"class":415},[192,1591,419],{"class":341},[192,1593,355],{"class":341},[192,1595,936],{"class":201},[192,1597,426],{"class":341},[192,1599,479],{"class":341},[192,1601,943],{"class":415},[192,1603,419],{"class":341},[192,1605,355],{"class":341},[192,1607,1608],{"class":201},"Add the bug label to issue #42.",[192,1610,426],{"class":341},[192,1612,349],{"class":341},[192,1614,828],{"class":345},[192,1616,437],{"class":341},[192,1618,1620,1622],{"class":194,"line":1619},21,[192,1621,499],{"class":341},[192,1623,502],{"class":345},[147,1625,1626,1627,1630,1631,1633],{},"Pass ",[151,1628,1629],{},"evaluation"," to ",[151,1632,1550],{}," to customize its evaluator or thresholds. The prebuilt agent installs this middleware and server interrupt definition automatically. Without the middleware, auto tools still require approval.",[1300,1635,1637],{"id":1636},"continue-after-human-review","Continue after human review",[147,1639,661,1640,1642,1643,1645,1646,1649,1650,1653,1654,1656],{},[151,1641,168],{}," for approval UIs: ",[151,1644,164],{}," throws when the run ends on an interrupt. Auto approval uses a generic GitHub interrupt when a call needs review. Register ",[151,1647,1648],{},"githubToolApproval"," in your TanStack client's ",[151,1651,1652],{},"interrupts"," array as well as on the server. Import it from the browser-safe ",[151,1655,1403],{}," entry point.",[147,1658,1659,1660,673,1663,1666,1667,1670,1671,1264,1674,1677,1678,1681,1682,1687],{},"The interrupt payload contains ",[151,1661,1662],{},"toolCallId",[151,1664,1665],{},"toolName",", and the resolved ",[151,1668,1669],{},"input",". Display that action to the user, then use TanStack's ",[151,1672,1673],{},"resolveInterrupt",[151,1675,1676],{},"{ approved: true }"," or ",[151,1679,1680],{},"{ approved: false }",". Preserve the client-generated resume data and message history in the next server request. See TanStack's ",[156,1683,1686],{"href":1684,"rel":1685},"https:\u002F\u002Ftanstack.com\u002Fai\u002Flatest\u002Fdocs\u002Finterrupts\u002Fgeneric",[160],"generic interrupt client flow"," for wiring the UI and transport.",[147,1689,1690],{},"Approval applies to the specific call and its arguments. Rejected calls return a denial result without executing the write. New calls or changed arguments require a new decision. Boolean approval policies continue to use TanStack's native tool-approval UI.",[147,1692,1693],{},"Forward TanStack's validated request fields to the agent on your server:",[182,1695,1698],{"className":327,"code":1696,"filename":1697,"language":330,"meta":188,"style":188},"import { chatParamsFromRequestBody, toServerSentEventsResponse } from '@tanstack\u002Fai'\n\n\u002F\u002F Use the auto agent defined above in your server route.\nexport async function POST(request: Request) {\n  const { messages, threadId, runId, parentRunId, resume } =\n    await chatParamsFromRequestBody(await request.json())\n  return toServerSentEventsResponse(agent.stream({\n    messages,\n    threadId,\n    runId,\n    parentRunId,\n    resume,\n  }))\n}\n","continue.ts",[151,1699,1700,1723,1727,1732,1761,1796,1819,1839,1846,1853,1860,1867,1874,1881],{"__ignoreMap":188},[192,1701,1702,1704,1706,1709,1711,1713,1715,1717,1719,1721],{"class":194,"line":195},[192,1703,338],{"class":337},[192,1705,342],{"class":341},[192,1707,1708],{"class":345}," chatParamsFromRequestBody",[192,1710,479],{"class":341},[192,1712,593],{"class":345},[192,1714,349],{"class":341},[192,1716,352],{"class":337},[192,1718,355],{"class":341},[192,1720,602],{"class":201},[192,1722,360],{"class":341},[192,1724,1725],{"class":194,"line":363},[192,1726,387],{"emptyLinePlaceholder":386},[192,1728,1729],{"class":194,"line":383},[192,1730,1731],{"class":613},"\u002F\u002F Use the auto agent defined above in your server route.\n",[192,1733,1734,1737,1740,1743,1746,1748,1752,1754,1757,1759],{"class":194,"line":390},[192,1735,1736],{"class":337},"export",[192,1738,1739],{"class":393}," async",[192,1741,1742],{"class":393}," function",[192,1744,1745],{"class":403}," POST",[192,1747,406],{"class":341},[192,1749,1751],{"class":1750},"sHdIc","request",[192,1753,419],{"class":341},[192,1755,1756],{"class":198}," Request",[192,1758,434],{"class":341},[192,1760,1359],{"class":341},[192,1762,1763,1766,1768,1771,1773,1776,1778,1781,1783,1786,1788,1791,1793],{"class":194,"line":412},[192,1764,1765],{"class":393},"  const",[192,1767,342],{"class":341},[192,1769,1770],{"class":345}," messages",[192,1772,479],{"class":341},[192,1774,1775],{"class":345}," threadId",[192,1777,479],{"class":341},[192,1779,1780],{"class":345}," runId",[192,1782,479],{"class":341},[192,1784,1785],{"class":345}," parentRunId",[192,1787,479],{"class":341},[192,1789,1790],{"class":345}," resume",[192,1792,349],{"class":341},[192,1794,1795],{"class":341}," =\n",[192,1797,1798,1801,1803,1805,1808,1811,1813,1816],{"class":194,"line":440},[192,1799,1800],{"class":337},"    await",[192,1802,1708],{"class":403},[192,1804,406],{"class":415},[192,1806,1807],{"class":337},"await",[192,1809,1810],{"class":345}," request",[192,1812,169],{"class":341},[192,1814,1815],{"class":403},"json",[192,1817,1818],{"class":415},"())\n",[192,1820,1821,1824,1826,1828,1831,1833,1835,1837],{"class":194,"line":457},[192,1822,1823],{"class":337},"  return",[192,1825,593],{"class":403},[192,1827,406],{"class":415},[192,1829,1830],{"class":345},"agent",[192,1832,169],{"class":341},[192,1834,633],{"class":403},[192,1836,406],{"class":415},[192,1838,409],{"class":341},[192,1840,1841,1844],{"class":194,"line":496},[192,1842,1843],{"class":345},"    messages",[192,1845,437],{"class":341},[192,1847,1848,1851],{"class":194,"line":505},[192,1849,1850],{"class":345},"    threadId",[192,1852,437],{"class":341},[192,1854,1855,1858],{"class":194,"line":510},[192,1856,1857],{"class":345},"    runId",[192,1859,437],{"class":341},[192,1861,1862,1865],{"class":194,"line":535},[192,1863,1864],{"class":345},"    parentRunId",[192,1866,437],{"class":341},[192,1868,1869,1872],{"class":194,"line":552},[192,1870,1871],{"class":345},"    resume",[192,1873,437],{"class":341},[192,1875,1876,1879],{"class":194,"line":559},[192,1877,1878],{"class":341},"  }",[192,1880,658],{"class":415},[192,1882,1883],{"class":194,"line":961},[192,1884,1885],{"class":341},"}\n",[1887,1888,1889],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":188,"searchDepth":363,"depth":363,"links":1891},[1892,1893,1894,1895],{"id":173,"depth":363,"text":174},{"id":323,"depth":363,"text":324},{"id":719,"depth":363,"text":720},{"id":1104,"depth":363,"text":1105,"children":1896},[1897,1898],{"id":1302,"depth":383,"text":1303},{"id":1636,"depth":383,"text":1637},"Use native TanStack AI tools and a prebuilt GitHub agent with Jev preset routing and write approval.","md",[1902,1905],{"label":1903,"icon":1904,"to":119},"Auto presets and approval","i-lucide-shield-check",{"label":1906,"icon":1907,"to":1908},"API reference","i-lucide-braces","\u002Fapi\u002Freference#tanstack-ai",{},{"title":50,"description":1899},"SHhPRi8cqrPVNR6txpVeGyPC-knMeDTmupRE5rZ-vKQ",[1913,1915],{"title":45,"path":46,"stem":47,"description":1914,"icon":48,"children":-1},"Connect GitHub tools to Chat SDK for durable GitHub, Slack, and Discord bots, a complete PR review agent in about 60 lines of code.",{"title":58,"path":59,"stem":60,"description":1916,"children":-1},"Complete, copy-pasteable GitHub agents for every framework, eve, the AI SDK, Vercel Workflow, and Chat SDK, plus a manager agent that delegates to scoped sub-agents.",1791360992676]