[{"data":1,"prerenderedAt":2034},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-chat-sdk":85,"-frameworks-chat-sdk-surround":2029},[4,26,49,73],{"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],{"title":31,"path":32,"stem":33,"icon":34},"eve","\u002Fframeworks\u002Feve","docs\u002F2.frameworks\u002F1.eve","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":7,"children":52,"page":25},"Guide","\u002Fguide",[53,57,61,65,69],{"title":54,"path":55,"stem":56},"Scope with Presets","\u002Fguide\u002Fpresets","docs\u002F3.guide\u002F1.presets",{"title":58,"path":59,"stem":60},"Control Write Safety","\u002Fguide\u002Fapproval-control","docs\u002F3.guide\u002F2.approval-control",{"title":62,"path":63,"stem":64},"Commit Attribution","\u002Fguide\u002Fcommit-attribution","docs\u002F3.guide\u002F3.commit-attribution",{"title":66,"path":67,"stem":68},"Tokens & Auth","\u002Fguide\u002Ftokens-and-auth","docs\u002F3.guide\u002F4.tokens-and-auth",{"title":70,"path":71,"stem":72},"Examples","\u002Fguide\u002Fexamples","docs\u002F3.guide\u002F5.examples",{"title":74,"path":75,"stem":7,"children":76,"page":25},"Api","\u002Fapi",[77,81],{"title":78,"path":79,"stem":80},"Tools Catalog","\u002Fapi\u002Ftools-catalog","docs\u002F4.api\u002F1.tools-catalog",{"title":82,"path":83,"stem":84},"API Reference","\u002Fapi\u002Freference","docs\u002F4.api\u002F2.reference",{"id":86,"title":87,"body":88,"description":2013,"extension":2014,"links":2015,"meta":2025,"navigation":2026,"path":46,"seo":2027,"stem":47,"__hash__":2028},"docs\u002Fdocs\u002F2.frameworks\u002F4.chat-sdk.md","Build GitHub bots with Chat SDK",{"type":89,"value":90,"toc":2003},"minimark",[91,114,143,148,155,165,175,179,302,306,317,1008,1012,1035,1428,1432,1435,1656,1675,1687,1691,1700,1959,1963,1974,1978,1999],[92,93,94,100,101,105,106,108,109,113],"p",{},[95,96,45],"a",{"href":97,"rel":98},"https:\u002F\u002Fchat-sdk.dev",[99],"nofollow"," is a multi-platform agent framework: one agent definition, adapters for GitHub, Slack, and Discord. Pair it with ",[102,103,104],"code",{},"@github-tools\u002Fsdk"," and ",[95,107,41],{"href":42}," and you get a ",[110,111,112],"strong",{},"durable platform bot"," — @mention it on a PR, it reviews the changes and answers follow-ups, surviving crashes and timeouts along the way.",[115,116,119,122],"prompt",{":actions":117,"description":118,"icon":48},"[\"copy\",\"cursor\",\"windsurf\"]","Build a durable GitHub PR review bot",[92,120,121],{},"Build a durable GitHub PR review bot with @github-tools\u002Fsdk, Chat SDK, and Vercel Workflow.",[123,124,125,129,132,135],"ul",{},[126,127,128],"li",{},"Install chat, @chat-adapter\u002Fgithub, @chat-adapter\u002Fstate-memory, workflow, plus @github-tools\u002Fsdk, ai, zod",[126,130,131],{},"Create a Chat agent with createGitHubAdapter, onNewMention starting a \"use workflow\" review workflow, and onSubscribedMessage resuming it via resumeHook",[126,133,134],{},"Run the agent turn with createGithubAgent({ preset: 'code-review' }) inside a \"use step\" function",[126,136,137,138,142],{},"Use ",[95,139,140],{"href":140,"rel":141},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fgithub-tools\u002Ftree\u002Fmain\u002Fexamples\u002Fpr-review-agent",[99]," as the reference implementation",[144,145,147],"h2",{"id":146},"how-it-works","How it works",[92,149,150,151,154],{},"When someone @mentions the bot on a PR, the GitHub adapter receives the webhook, the agent reacts, and a durable workflow runs the review — reading files, commits, and diffs with GitHub tools — then posts the result as a comment. Follow-up messages resume the ",[110,152,153],{},"same"," workflow via a hook.",[156,157,162],"pre",{"className":158,"code":160,"language":161},[159],"language-text","@my-agent review this PR\n        │\n        ▼\n   Chat SDK receives webhook\n        │\n        ▼\n   Reaction added ──► starts durable workflow\n        │\n        ▼\n   Agent reads PR (files, diffs, commits)\n        │\n        ▼\n   Posts structured review comment\n        │\n        ▼\n   Listens for follow-up messages\n","text",[102,163,160],{"__ignoreMap":164},"",[92,166,167,168,174],{},"The complete implementation is about 60 lines across two files, in ",[95,169,171],{"href":140,"rel":170},[99],[102,172,173],{},"examples\u002Fpr-review-agent\u002F",".",[144,176,178],{"id":177},"install","Install",[180,181,182,223,250,276],"code-group",{},[156,183,188],{"className":184,"code":185,"filename":186,"language":187,"meta":164,"style":164},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @github-tools\u002Fsdk chat @chat-adapter\u002Fgithub @chat-adapter\u002Fstate-memory workflow ai zod\n","pnpm","bash",[102,189,190],{"__ignoreMap":164},[191,192,195,198,202,205,208,211,214,217,220],"span",{"class":193,"line":194},"line",1,[191,196,186],{"class":197},"sBMFI",[191,199,201],{"class":200},"sfazB"," add",[191,203,204],{"class":200}," @github-tools\u002Fsdk",[191,206,207],{"class":200}," chat",[191,209,210],{"class":200}," @chat-adapter\u002Fgithub",[191,212,213],{"class":200}," @chat-adapter\u002Fstate-memory",[191,215,216],{"class":200}," workflow",[191,218,219],{"class":200}," ai",[191,221,222],{"class":200}," zod\n",[156,224,227],{"className":184,"code":225,"filename":226,"language":187,"meta":164,"style":164},"npm install @github-tools\u002Fsdk chat @chat-adapter\u002Fgithub @chat-adapter\u002Fstate-memory workflow ai zod\n","npm",[102,228,229],{"__ignoreMap":164},[191,230,231,233,236,238,240,242,244,246,248],{"class":193,"line":194},[191,232,226],{"class":197},[191,234,235],{"class":200}," install",[191,237,204],{"class":200},[191,239,207],{"class":200},[191,241,210],{"class":200},[191,243,213],{"class":200},[191,245,216],{"class":200},[191,247,219],{"class":200},[191,249,222],{"class":200},[156,251,254],{"className":184,"code":252,"filename":253,"language":187,"meta":164,"style":164},"yarn add @github-tools\u002Fsdk chat @chat-adapter\u002Fgithub @chat-adapter\u002Fstate-memory workflow ai zod\n","yarn",[102,255,256],{"__ignoreMap":164},[191,257,258,260,262,264,266,268,270,272,274],{"class":193,"line":194},[191,259,253],{"class":197},[191,261,201],{"class":200},[191,263,204],{"class":200},[191,265,207],{"class":200},[191,267,210],{"class":200},[191,269,213],{"class":200},[191,271,216],{"class":200},[191,273,219],{"class":200},[191,275,222],{"class":200},[156,277,280],{"className":184,"code":278,"filename":279,"language":187,"meta":164,"style":164},"bun add @github-tools\u002Fsdk chat @chat-adapter\u002Fgithub @chat-adapter\u002Fstate-memory workflow ai zod\n","bun",[102,281,282],{"__ignoreMap":164},[191,283,284,286,288,290,292,294,296,298,300],{"class":193,"line":194},[191,285,279],{"class":197},[191,287,201],{"class":200},[191,289,204],{"class":200},[191,291,207],{"class":200},[191,293,210],{"class":200},[191,295,213],{"class":200},[191,297,216],{"class":200},[191,299,219],{"class":200},[191,301,222],{"class":200},[144,303,305],{"id":304},"the-agent","The agent",[92,307,308,309,312,313,316],{},"Chat SDK handles webhooks, thread state, and @mention detection. ",[102,310,311],{},"onNewMention"," starts a durable workflow; ",[102,314,315],{},"onSubscribedMessage"," resumes it:",[156,318,323],{"className":319,"code":320,"filename":321,"language":322,"meta":164,"style":164},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Chat, emoji, type Message, type Thread } from 'chat'\nimport { createGitHubAdapter } from '@chat-adapter\u002Fgithub'\nimport { createMemoryState } from '@chat-adapter\u002Fstate-memory'\nimport { resumeHook, start } from 'workflow\u002Fapi'\nimport { reviewWorkflow } from '..\u002Fworkflows\u002Freview'\n\nexport interface ThreadState { runId?: string }\nexport type ChatTurnPayload = { text: string }\n\nconst adapters = { github: createGitHubAdapter() }\n\nexport const agent = new Chat\u003Ctypeof adapters, ThreadState>({\n  userName: process.env.GITHUB_AGENT_USERNAME || 'pr-review-agent',\n  adapters,\n  state: createMemoryState(),\n}).registerSingleton()\n\nagent.onNewMention(async (thread: Thread\u003CThreadState>, message: Message) => {\n  const sent = thread.createSentMessageFromMessage(message)\n  await sent.addReaction(emoji.eyes)\n\n  await thread.subscribe()\n  const run = await start(reviewWorkflow, [message.text])\n  await thread.setState({ runId: run.runId })\n})\n\nagent.onSubscribedMessage(async (thread: Thread\u003CThreadState>, message: Message) => {\n  const state = await thread.state\n  if (!state?.runId) return\n  await resumeHook\u003CChatTurnPayload>(state.runId, { text: message.text })\n})\n","server\u002Flib\u002Fagent.ts","ts",[102,324,325,375,396,417,443,464,471,499,524,529,557,562,599,634,642,657,674,679,729,756,781,786,800,834,866,873,878,917,936,961,1001],{"__ignoreMap":164},[191,326,327,331,335,339,342,345,347,350,353,355,357,360,363,366,369,372],{"class":193,"line":194},[191,328,330],{"class":329},"s7zQu","import",[191,332,334],{"class":333},"sMK4o"," {",[191,336,338],{"class":337},"sTEyZ"," Chat",[191,340,341],{"class":333},",",[191,343,344],{"class":337}," emoji",[191,346,341],{"class":333},[191,348,349],{"class":329}," type",[191,351,352],{"class":337}," Message",[191,354,341],{"class":333},[191,356,349],{"class":329},[191,358,359],{"class":337}," Thread",[191,361,362],{"class":333}," }",[191,364,365],{"class":329}," from",[191,367,368],{"class":333}," '",[191,370,371],{"class":200},"chat",[191,373,374],{"class":333},"'\n",[191,376,378,380,382,385,387,389,391,394],{"class":193,"line":377},2,[191,379,330],{"class":329},[191,381,334],{"class":333},[191,383,384],{"class":337}," createGitHubAdapter",[191,386,362],{"class":333},[191,388,365],{"class":329},[191,390,368],{"class":333},[191,392,393],{"class":200},"@chat-adapter\u002Fgithub",[191,395,374],{"class":333},[191,397,399,401,403,406,408,410,412,415],{"class":193,"line":398},3,[191,400,330],{"class":329},[191,402,334],{"class":333},[191,404,405],{"class":337}," createMemoryState",[191,407,362],{"class":333},[191,409,365],{"class":329},[191,411,368],{"class":333},[191,413,414],{"class":200},"@chat-adapter\u002Fstate-memory",[191,416,374],{"class":333},[191,418,420,422,424,427,429,432,434,436,438,441],{"class":193,"line":419},4,[191,421,330],{"class":329},[191,423,334],{"class":333},[191,425,426],{"class":337}," resumeHook",[191,428,341],{"class":333},[191,430,431],{"class":337}," start",[191,433,362],{"class":333},[191,435,365],{"class":329},[191,437,368],{"class":333},[191,439,440],{"class":200},"workflow\u002Fapi",[191,442,374],{"class":333},[191,444,446,448,450,453,455,457,459,462],{"class":193,"line":445},5,[191,447,330],{"class":329},[191,449,334],{"class":333},[191,451,452],{"class":337}," reviewWorkflow",[191,454,362],{"class":333},[191,456,365],{"class":329},[191,458,368],{"class":333},[191,460,461],{"class":200},"..\u002Fworkflows\u002Freview",[191,463,374],{"class":333},[191,465,467],{"class":193,"line":466},6,[191,468,470],{"emptyLinePlaceholder":469},true,"\n",[191,472,474,477,481,484,486,490,493,496],{"class":193,"line":473},7,[191,475,476],{"class":329},"export",[191,478,480],{"class":479},"spNyl"," interface",[191,482,483],{"class":197}," ThreadState",[191,485,334],{"class":333},[191,487,489],{"class":488},"swJcz"," runId",[191,491,492],{"class":333},"?:",[191,494,495],{"class":197}," string",[191,497,498],{"class":333}," }\n",[191,500,502,504,506,509,512,514,517,520,522],{"class":193,"line":501},8,[191,503,476],{"class":329},[191,505,349],{"class":479},[191,507,508],{"class":197}," ChatTurnPayload",[191,510,511],{"class":333}," =",[191,513,334],{"class":333},[191,515,516],{"class":488}," text",[191,518,519],{"class":333},":",[191,521,495],{"class":197},[191,523,498],{"class":333},[191,525,527],{"class":193,"line":526},9,[191,528,470],{"emptyLinePlaceholder":469},[191,530,532,535,538,541,543,546,548,551,554],{"class":193,"line":531},10,[191,533,534],{"class":479},"const",[191,536,537],{"class":337}," adapters ",[191,539,540],{"class":333},"=",[191,542,334],{"class":333},[191,544,545],{"class":488}," github",[191,547,519],{"class":333},[191,549,384],{"class":550},"s2Zo4",[191,552,553],{"class":337},"() ",[191,555,556],{"class":333},"}\n",[191,558,560],{"class":193,"line":559},11,[191,561,470],{"emptyLinePlaceholder":469},[191,563,565,567,570,573,575,578,580,583,586,588,590,593,596],{"class":193,"line":564},12,[191,566,476],{"class":329},[191,568,569],{"class":479}," const",[191,571,572],{"class":337}," agent ",[191,574,540],{"class":333},[191,576,577],{"class":333}," new",[191,579,338],{"class":550},[191,581,582],{"class":333},"\u003Ctypeof",[191,584,585],{"class":337}," adapters",[191,587,341],{"class":333},[191,589,483],{"class":197},[191,591,592],{"class":333},">",[191,594,595],{"class":337},"(",[191,597,598],{"class":333},"{\n",[191,600,602,605,607,610,612,615,617,620,623,625,628,631],{"class":193,"line":601},13,[191,603,604],{"class":488},"  userName",[191,606,519],{"class":333},[191,608,609],{"class":337}," process",[191,611,174],{"class":333},[191,613,614],{"class":337},"env",[191,616,174],{"class":333},[191,618,619],{"class":337},"GITHUB_AGENT_USERNAME ",[191,621,622],{"class":333},"||",[191,624,368],{"class":333},[191,626,627],{"class":200},"pr-review-agent",[191,629,630],{"class":333},"'",[191,632,633],{"class":333},",\n",[191,635,637,640],{"class":193,"line":636},14,[191,638,639],{"class":337},"  adapters",[191,641,633],{"class":333},[191,643,645,648,650,652,655],{"class":193,"line":644},15,[191,646,647],{"class":488},"  state",[191,649,519],{"class":333},[191,651,405],{"class":550},[191,653,654],{"class":337},"()",[191,656,633],{"class":333},[191,658,660,663,666,668,671],{"class":193,"line":659},16,[191,661,662],{"class":333},"}",[191,664,665],{"class":337},")",[191,667,174],{"class":333},[191,669,670],{"class":550},"registerSingleton",[191,672,673],{"class":337},"()\n",[191,675,677],{"class":193,"line":676},17,[191,678,470],{"emptyLinePlaceholder":469},[191,680,682,685,687,689,691,694,697,701,703,705,708,711,714,717,719,721,723,726],{"class":193,"line":681},18,[191,683,684],{"class":337},"agent",[191,686,174],{"class":333},[191,688,311],{"class":550},[191,690,595],{"class":337},[191,692,693],{"class":479},"async",[191,695,696],{"class":333}," (",[191,698,700],{"class":699},"sHdIc","thread",[191,702,519],{"class":333},[191,704,359],{"class":197},[191,706,707],{"class":333},"\u003C",[191,709,710],{"class":197},"ThreadState",[191,712,713],{"class":333},">,",[191,715,716],{"class":699}," message",[191,718,519],{"class":333},[191,720,352],{"class":197},[191,722,665],{"class":333},[191,724,725],{"class":479}," =>",[191,727,728],{"class":333}," {\n",[191,730,732,735,738,740,743,745,748,750,753],{"class":193,"line":731},19,[191,733,734],{"class":479},"  const",[191,736,737],{"class":337}," sent",[191,739,511],{"class":333},[191,741,742],{"class":337}," thread",[191,744,174],{"class":333},[191,746,747],{"class":550},"createSentMessageFromMessage",[191,749,595],{"class":488},[191,751,752],{"class":337},"message",[191,754,755],{"class":488},")\n",[191,757,759,762,764,766,769,771,774,776,779],{"class":193,"line":758},20,[191,760,761],{"class":329},"  await",[191,763,737],{"class":337},[191,765,174],{"class":333},[191,767,768],{"class":550},"addReaction",[191,770,595],{"class":488},[191,772,773],{"class":337},"emoji",[191,775,174],{"class":333},[191,777,778],{"class":337},"eyes",[191,780,755],{"class":488},[191,782,784],{"class":193,"line":783},21,[191,785,470],{"emptyLinePlaceholder":469},[191,787,789,791,793,795,798],{"class":193,"line":788},22,[191,790,761],{"class":329},[191,792,742],{"class":337},[191,794,174],{"class":333},[191,796,797],{"class":550},"subscribe",[191,799,673],{"class":488},[191,801,803,805,808,810,813,815,817,820,822,825,827,829,831],{"class":193,"line":802},23,[191,804,734],{"class":479},[191,806,807],{"class":337}," run",[191,809,511],{"class":333},[191,811,812],{"class":329}," await",[191,814,431],{"class":550},[191,816,595],{"class":488},[191,818,819],{"class":337},"reviewWorkflow",[191,821,341],{"class":333},[191,823,824],{"class":488}," [",[191,826,752],{"class":337},[191,828,174],{"class":333},[191,830,161],{"class":337},[191,832,833],{"class":488},"])\n",[191,835,837,839,841,843,846,848,851,853,855,857,859,862,864],{"class":193,"line":836},24,[191,838,761],{"class":329},[191,840,742],{"class":337},[191,842,174],{"class":333},[191,844,845],{"class":550},"setState",[191,847,595],{"class":488},[191,849,850],{"class":333},"{",[191,852,489],{"class":488},[191,854,519],{"class":333},[191,856,807],{"class":337},[191,858,174],{"class":333},[191,860,861],{"class":337},"runId",[191,863,362],{"class":333},[191,865,755],{"class":488},[191,867,869,871],{"class":193,"line":868},25,[191,870,662],{"class":333},[191,872,755],{"class":337},[191,874,876],{"class":193,"line":875},26,[191,877,470],{"emptyLinePlaceholder":469},[191,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915],{"class":193,"line":880},27,[191,882,684],{"class":337},[191,884,174],{"class":333},[191,886,315],{"class":550},[191,888,595],{"class":337},[191,890,693],{"class":479},[191,892,696],{"class":333},[191,894,700],{"class":699},[191,896,519],{"class":333},[191,898,359],{"class":197},[191,900,707],{"class":333},[191,902,710],{"class":197},[191,904,713],{"class":333},[191,906,716],{"class":699},[191,908,519],{"class":333},[191,910,352],{"class":197},[191,912,665],{"class":333},[191,914,725],{"class":479},[191,916,728],{"class":333},[191,918,920,922,925,927,929,931,933],{"class":193,"line":919},28,[191,921,734],{"class":479},[191,923,924],{"class":337}," state",[191,926,511],{"class":333},[191,928,812],{"class":329},[191,930,742],{"class":337},[191,932,174],{"class":333},[191,934,935],{"class":337},"state\n",[191,937,939,942,944,947,950,953,955,958],{"class":193,"line":938},29,[191,940,941],{"class":329},"  if",[191,943,696],{"class":488},[191,945,946],{"class":333},"!",[191,948,949],{"class":337},"state",[191,951,952],{"class":333},"?.",[191,954,861],{"class":337},[191,956,957],{"class":488},") ",[191,959,960],{"class":329},"return\n",[191,962,964,966,968,970,973,975,977,979,981,983,985,987,989,991,993,995,997,999],{"class":193,"line":963},30,[191,965,761],{"class":329},[191,967,426],{"class":550},[191,969,707],{"class":333},[191,971,972],{"class":197},"ChatTurnPayload",[191,974,592],{"class":333},[191,976,595],{"class":488},[191,978,949],{"class":337},[191,980,174],{"class":333},[191,982,861],{"class":337},[191,984,341],{"class":333},[191,986,334],{"class":333},[191,988,516],{"class":488},[191,990,519],{"class":333},[191,992,716],{"class":337},[191,994,174],{"class":333},[191,996,161],{"class":337},[191,998,362],{"class":333},[191,1000,755],{"class":488},[191,1002,1004,1006],{"class":193,"line":1003},31,[191,1005,662],{"class":333},[191,1007,755],{"class":337},[144,1009,1011],{"id":1010},"the-workflow","The workflow",[92,1013,1014,1015,1018,1019,1022,1023,1026,1027,1030,1031,1034],{},"The review itself is a ",[102,1016,1017],{},"\"use workflow\""," function. Each turn runs ",[102,1020,1021],{},"createGithubAgent"," with the ",[102,1024,1025],{},"code-review"," preset inside a ",[102,1028,1029],{},"\"use step\""," — durable, retryable, observable. A ",[102,1032,1033],{},"createHook"," keeps the workflow alive for follow-up messages:",[156,1036,1039],{"className":319,"code":1037,"filename":1038,"language":322,"meta":164,"style":164},"import { createHook, getWorkflowMetadata } from 'workflow'\nimport { createGithubAgent } from '@github-tools\u002Fsdk'\nimport type { ChatTurnPayload } from '..\u002Flib\u002Fagent'\n\nasync function runAgentTurn(prompt: string) {\n  'use step'\n  const agent = createGithubAgent({\n    model: 'anthropic\u002Fclaude-sonnet-4.6',\n    preset: 'code-review',\n    requireApproval: false,\n    additionalInstructions: 'Always post your review as a comment on the PR.',\n  })\n  const { text } = await agent.generate({ prompt })\n  return text\n}\n\nexport async function reviewWorkflow(prompt: string) {\n  'use workflow'\n  const { workflowRunId } = getWorkflowMetadata()\n\n  using hook = createHook\u003CChatTurnPayload>({ token: workflowRunId })\n\n  await runAgentTurn(prompt)\n\n  for await (const event of hook) {\n    await runAgentTurn(event.text)\n  }\n}\n","server\u002Fworkflows\u002Freview.ts",[102,1040,1041,1066,1085,1106,1110,1132,1142,1157,1173,1188,1201,1217,1224,1256,1264,1268,1272,1295,1304,1321,1325,1358,1362,1374,1378,1401,1419,1424],{"__ignoreMap":164},[191,1042,1043,1045,1047,1050,1052,1055,1057,1059,1061,1064],{"class":193,"line":194},[191,1044,330],{"class":329},[191,1046,334],{"class":333},[191,1048,1049],{"class":337}," createHook",[191,1051,341],{"class":333},[191,1053,1054],{"class":337}," getWorkflowMetadata",[191,1056,362],{"class":333},[191,1058,365],{"class":329},[191,1060,368],{"class":333},[191,1062,1063],{"class":200},"workflow",[191,1065,374],{"class":333},[191,1067,1068,1070,1072,1075,1077,1079,1081,1083],{"class":193,"line":377},[191,1069,330],{"class":329},[191,1071,334],{"class":333},[191,1073,1074],{"class":337}," createGithubAgent",[191,1076,362],{"class":333},[191,1078,365],{"class":329},[191,1080,368],{"class":333},[191,1082,104],{"class":200},[191,1084,374],{"class":333},[191,1086,1087,1089,1091,1093,1095,1097,1099,1101,1104],{"class":193,"line":398},[191,1088,330],{"class":329},[191,1090,349],{"class":329},[191,1092,334],{"class":333},[191,1094,508],{"class":337},[191,1096,362],{"class":333},[191,1098,365],{"class":329},[191,1100,368],{"class":333},[191,1102,1103],{"class":200},"..\u002Flib\u002Fagent",[191,1105,374],{"class":333},[191,1107,1108],{"class":193,"line":419},[191,1109,470],{"emptyLinePlaceholder":469},[191,1111,1112,1114,1117,1120,1122,1124,1126,1128,1130],{"class":193,"line":445},[191,1113,693],{"class":479},[191,1115,1116],{"class":479}," function",[191,1118,1119],{"class":550}," runAgentTurn",[191,1121,595],{"class":333},[191,1123,115],{"class":699},[191,1125,519],{"class":333},[191,1127,495],{"class":197},[191,1129,665],{"class":333},[191,1131,728],{"class":333},[191,1133,1134,1137,1140],{"class":193,"line":466},[191,1135,1136],{"class":333},"  '",[191,1138,1139],{"class":200},"use step",[191,1141,374],{"class":333},[191,1143,1144,1146,1149,1151,1153,1155],{"class":193,"line":473},[191,1145,734],{"class":479},[191,1147,1148],{"class":337}," agent",[191,1150,511],{"class":333},[191,1152,1074],{"class":550},[191,1154,595],{"class":488},[191,1156,598],{"class":333},[191,1158,1159,1162,1164,1166,1169,1171],{"class":193,"line":501},[191,1160,1161],{"class":488},"    model",[191,1163,519],{"class":333},[191,1165,368],{"class":333},[191,1167,1168],{"class":200},"anthropic\u002Fclaude-sonnet-4.6",[191,1170,630],{"class":333},[191,1172,633],{"class":333},[191,1174,1175,1178,1180,1182,1184,1186],{"class":193,"line":526},[191,1176,1177],{"class":488},"    preset",[191,1179,519],{"class":333},[191,1181,368],{"class":333},[191,1183,1025],{"class":200},[191,1185,630],{"class":333},[191,1187,633],{"class":333},[191,1189,1190,1193,1195,1199],{"class":193,"line":531},[191,1191,1192],{"class":488},"    requireApproval",[191,1194,519],{"class":333},[191,1196,1198],{"class":1197},"sfNiH"," false",[191,1200,633],{"class":333},[191,1202,1203,1206,1208,1210,1213,1215],{"class":193,"line":559},[191,1204,1205],{"class":488},"    additionalInstructions",[191,1207,519],{"class":333},[191,1209,368],{"class":333},[191,1211,1212],{"class":200},"Always post your review as a comment on the PR.",[191,1214,630],{"class":333},[191,1216,633],{"class":333},[191,1218,1219,1222],{"class":193,"line":564},[191,1220,1221],{"class":333},"  }",[191,1223,755],{"class":488},[191,1225,1226,1228,1230,1232,1234,1236,1238,1240,1242,1245,1247,1249,1252,1254],{"class":193,"line":601},[191,1227,734],{"class":479},[191,1229,334],{"class":333},[191,1231,516],{"class":337},[191,1233,362],{"class":333},[191,1235,511],{"class":333},[191,1237,812],{"class":329},[191,1239,1148],{"class":337},[191,1241,174],{"class":333},[191,1243,1244],{"class":550},"generate",[191,1246,595],{"class":488},[191,1248,850],{"class":333},[191,1250,1251],{"class":337}," prompt",[191,1253,362],{"class":333},[191,1255,755],{"class":488},[191,1257,1258,1261],{"class":193,"line":636},[191,1259,1260],{"class":329},"  return",[191,1262,1263],{"class":337}," text\n",[191,1265,1266],{"class":193,"line":644},[191,1267,556],{"class":333},[191,1269,1270],{"class":193,"line":659},[191,1271,470],{"emptyLinePlaceholder":469},[191,1273,1274,1276,1279,1281,1283,1285,1287,1289,1291,1293],{"class":193,"line":676},[191,1275,476],{"class":329},[191,1277,1278],{"class":479}," async",[191,1280,1116],{"class":479},[191,1282,452],{"class":550},[191,1284,595],{"class":333},[191,1286,115],{"class":699},[191,1288,519],{"class":333},[191,1290,495],{"class":197},[191,1292,665],{"class":333},[191,1294,728],{"class":333},[191,1296,1297,1299,1302],{"class":193,"line":681},[191,1298,1136],{"class":333},[191,1300,1301],{"class":200},"use workflow",[191,1303,374],{"class":333},[191,1305,1306,1308,1310,1313,1315,1317,1319],{"class":193,"line":731},[191,1307,734],{"class":479},[191,1309,334],{"class":333},[191,1311,1312],{"class":337}," workflowRunId",[191,1314,362],{"class":333},[191,1316,511],{"class":333},[191,1318,1054],{"class":550},[191,1320,673],{"class":488},[191,1322,1323],{"class":193,"line":758},[191,1324,470],{"emptyLinePlaceholder":469},[191,1326,1327,1330,1333,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356],{"class":193,"line":783},[191,1328,1329],{"class":479},"  using",[191,1331,1332],{"class":337}," hook",[191,1334,511],{"class":333},[191,1336,1049],{"class":550},[191,1338,707],{"class":333},[191,1340,972],{"class":197},[191,1342,592],{"class":333},[191,1344,595],{"class":488},[191,1346,850],{"class":333},[191,1348,1349],{"class":488}," token",[191,1351,519],{"class":333},[191,1353,1312],{"class":337},[191,1355,362],{"class":333},[191,1357,755],{"class":488},[191,1359,1360],{"class":193,"line":788},[191,1361,470],{"emptyLinePlaceholder":469},[191,1363,1364,1366,1368,1370,1372],{"class":193,"line":802},[191,1365,761],{"class":329},[191,1367,1119],{"class":550},[191,1369,595],{"class":488},[191,1371,115],{"class":337},[191,1373,755],{"class":488},[191,1375,1376],{"class":193,"line":836},[191,1377,470],{"emptyLinePlaceholder":469},[191,1379,1380,1383,1385,1387,1389,1392,1395,1397,1399],{"class":193,"line":868},[191,1381,1382],{"class":329},"  for",[191,1384,812],{"class":329},[191,1386,696],{"class":488},[191,1388,534],{"class":479},[191,1390,1391],{"class":337}," event",[191,1393,1394],{"class":333}," of",[191,1396,1332],{"class":337},[191,1398,957],{"class":488},[191,1400,598],{"class":333},[191,1402,1403,1406,1408,1410,1413,1415,1417],{"class":193,"line":875},[191,1404,1405],{"class":329},"    await",[191,1407,1119],{"class":550},[191,1409,595],{"class":488},[191,1411,1412],{"class":337},"event",[191,1414,174],{"class":333},[191,1416,161],{"class":337},[191,1418,755],{"class":488},[191,1420,1421],{"class":193,"line":880},[191,1422,1423],{"class":333},"  }\n",[191,1425,1426],{"class":193,"line":919},[191,1427,556],{"class":333},[144,1429,1431],{"id":1430},"the-webhook-route","The webhook route",[92,1433,1434],{},"One route hands GitHub webhooks to the adapter:",[156,1436,1439],{"className":319,"code":1437,"filename":1438,"language":322,"meta":164,"style":164},"import { defineHandler } from 'nitro\u002Fh3'\nimport { agent } from '..\u002F..\u002Flib\u002Fagent'\n\nexport default defineHandler(async (event) => {\n  const handler = agent.webhooks.github\n  if (!handler) {\n    return new Response('GitHub adapter not configured', { status: 404 })\n  }\n  return handler(event.req, {\n    waitUntil: (task: Promise\u003Cunknown>) => event.waitUntil(task),\n  })\n})\n","server\u002Froutes\u002Fwebhooks\u002Fgithub.post.ts",[102,1440,1441,1461,1480,1484,1507,1528,1543,1579,1583,1602,1644,1650],{"__ignoreMap":164},[191,1442,1443,1445,1447,1450,1452,1454,1456,1459],{"class":193,"line":194},[191,1444,330],{"class":329},[191,1446,334],{"class":333},[191,1448,1449],{"class":337}," defineHandler",[191,1451,362],{"class":333},[191,1453,365],{"class":329},[191,1455,368],{"class":333},[191,1457,1458],{"class":200},"nitro\u002Fh3",[191,1460,374],{"class":333},[191,1462,1463,1465,1467,1469,1471,1473,1475,1478],{"class":193,"line":377},[191,1464,330],{"class":329},[191,1466,334],{"class":333},[191,1468,1148],{"class":337},[191,1470,362],{"class":333},[191,1472,365],{"class":329},[191,1474,368],{"class":333},[191,1476,1477],{"class":200},"..\u002F..\u002Flib\u002Fagent",[191,1479,374],{"class":333},[191,1481,1482],{"class":193,"line":398},[191,1483,470],{"emptyLinePlaceholder":469},[191,1485,1486,1488,1491,1493,1495,1497,1499,1501,1503,1505],{"class":193,"line":419},[191,1487,476],{"class":329},[191,1489,1490],{"class":329}," default",[191,1492,1449],{"class":550},[191,1494,595],{"class":337},[191,1496,693],{"class":479},[191,1498,696],{"class":333},[191,1500,1412],{"class":699},[191,1502,665],{"class":333},[191,1504,725],{"class":479},[191,1506,728],{"class":333},[191,1508,1509,1511,1514,1516,1518,1520,1523,1525],{"class":193,"line":445},[191,1510,734],{"class":479},[191,1512,1513],{"class":337}," handler",[191,1515,511],{"class":333},[191,1517,1148],{"class":337},[191,1519,174],{"class":333},[191,1521,1522],{"class":337},"webhooks",[191,1524,174],{"class":333},[191,1526,1527],{"class":337},"github\n",[191,1529,1530,1532,1534,1536,1539,1541],{"class":193,"line":466},[191,1531,941],{"class":329},[191,1533,696],{"class":488},[191,1535,946],{"class":333},[191,1537,1538],{"class":337},"handler",[191,1540,957],{"class":488},[191,1542,598],{"class":333},[191,1544,1545,1548,1550,1553,1555,1557,1560,1562,1564,1566,1569,1571,1575,1577],{"class":193,"line":473},[191,1546,1547],{"class":329},"    return",[191,1549,577],{"class":333},[191,1551,1552],{"class":550}," Response",[191,1554,595],{"class":488},[191,1556,630],{"class":333},[191,1558,1559],{"class":200},"GitHub adapter not configured",[191,1561,630],{"class":333},[191,1563,341],{"class":333},[191,1565,334],{"class":333},[191,1567,1568],{"class":488}," status",[191,1570,519],{"class":333},[191,1572,1574],{"class":1573},"sbssI"," 404",[191,1576,362],{"class":333},[191,1578,755],{"class":488},[191,1580,1581],{"class":193,"line":501},[191,1582,1423],{"class":333},[191,1584,1585,1587,1589,1591,1593,1595,1598,1600],{"class":193,"line":526},[191,1586,1260],{"class":329},[191,1588,1513],{"class":550},[191,1590,595],{"class":488},[191,1592,1412],{"class":337},[191,1594,174],{"class":333},[191,1596,1597],{"class":337},"req",[191,1599,341],{"class":333},[191,1601,728],{"class":333},[191,1603,1604,1607,1609,1611,1614,1616,1619,1621,1624,1627,1629,1631,1633,1636,1638,1640,1642],{"class":193,"line":531},[191,1605,1606],{"class":550},"    waitUntil",[191,1608,519],{"class":333},[191,1610,696],{"class":333},[191,1612,1613],{"class":699},"task",[191,1615,519],{"class":333},[191,1617,1618],{"class":197}," Promise",[191,1620,707],{"class":333},[191,1622,1623],{"class":197},"unknown",[191,1625,1626],{"class":333},">)",[191,1628,725],{"class":479},[191,1630,1391],{"class":337},[191,1632,174],{"class":333},[191,1634,1635],{"class":550},"waitUntil",[191,1637,595],{"class":488},[191,1639,1613],{"class":337},[191,1641,665],{"class":488},[191,1643,633],{"class":333},[191,1645,1646,1648],{"class":193,"line":559},[191,1647,1221],{"class":333},[191,1649,755],{"class":488},[191,1651,1652,1654],{"class":193,"line":564},[191,1653,662],{"class":333},[191,1655,755],{"class":337},[92,1657,1658,1659,1662,1663,1666,1667,105,1671,1674],{},"Configure the webhook in your repository settings (",[110,1660,1661],{},"Settings → Webhooks",") with the route URL, a shared secret (",[102,1664,1665],{},"GITHUB_WEBHOOK_SECRET","), and the ",[1668,1669,1670],"em",{},"Issue comments",[1668,1672,1673],{},"Pull request review comments"," events.",[1676,1677,1678,1679,1682,1683,1686],"warning",{},"Use a ",[110,1680,1681],{},"different GitHub account"," for the agent than the one commenting — Chat SDK filters self-messages to prevent loops. Set ",[102,1684,1685],{},"GITHUB_AGENT_USERNAME"," to the bot account's username.",[144,1688,1690],{"id":1689},"add-observability-with-evlog","Add observability with evlog",[92,1692,1693,1694,1699],{},"The example wires ",[95,1695,1698],{"href":1696,"rel":1697},"https:\u002F\u002Fevlog.dev",[99],"evlog"," into the agent turn for token usage, tool calls, cost, and timing:",[156,1701,1704],{"className":319,"code":1702,"filename":1703,"language":322,"meta":164,"style":164},"import { createLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nasync function runAgentTurn(prompt: string) {\n  'use step'\n  const log = createLogger()\n  const ai = createAILogger(log, { toolInputs: { maxLength: 500 } })\n\n  const agent = createGithubAgent({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    preset: 'code-review',\n    requireApproval: false,\n  })\n\n  const { text } = await agent.generate({ prompt })\n  log.emit()\n  return text\n}\n","with-evlog.ts",[102,1705,1706,1725,1745,1749,1769,1777,1790,1830,1834,1848,1873,1887,1897,1903,1907,1937,1949,1955],{"__ignoreMap":164},[191,1707,1708,1710,1712,1715,1717,1719,1721,1723],{"class":193,"line":194},[191,1709,330],{"class":329},[191,1711,334],{"class":333},[191,1713,1714],{"class":337}," createLogger",[191,1716,362],{"class":333},[191,1718,365],{"class":329},[191,1720,368],{"class":333},[191,1722,1698],{"class":200},[191,1724,374],{"class":333},[191,1726,1727,1729,1731,1734,1736,1738,1740,1743],{"class":193,"line":377},[191,1728,330],{"class":329},[191,1730,334],{"class":333},[191,1732,1733],{"class":337}," createAILogger",[191,1735,362],{"class":333},[191,1737,365],{"class":329},[191,1739,368],{"class":333},[191,1741,1742],{"class":200},"evlog\u002Fai",[191,1744,374],{"class":333},[191,1746,1747],{"class":193,"line":398},[191,1748,470],{"emptyLinePlaceholder":469},[191,1750,1751,1753,1755,1757,1759,1761,1763,1765,1767],{"class":193,"line":419},[191,1752,693],{"class":479},[191,1754,1116],{"class":479},[191,1756,1119],{"class":550},[191,1758,595],{"class":333},[191,1760,115],{"class":699},[191,1762,519],{"class":333},[191,1764,495],{"class":197},[191,1766,665],{"class":333},[191,1768,728],{"class":333},[191,1770,1771,1773,1775],{"class":193,"line":445},[191,1772,1136],{"class":333},[191,1774,1139],{"class":200},[191,1776,374],{"class":333},[191,1778,1779,1781,1784,1786,1788],{"class":193,"line":466},[191,1780,734],{"class":479},[191,1782,1783],{"class":337}," log",[191,1785,511],{"class":333},[191,1787,1714],{"class":550},[191,1789,673],{"class":488},[191,1791,1792,1794,1796,1798,1800,1802,1805,1807,1809,1812,1814,1816,1819,1821,1824,1826,1828],{"class":193,"line":473},[191,1793,734],{"class":479},[191,1795,219],{"class":337},[191,1797,511],{"class":333},[191,1799,1733],{"class":550},[191,1801,595],{"class":488},[191,1803,1804],{"class":337},"log",[191,1806,341],{"class":333},[191,1808,334],{"class":333},[191,1810,1811],{"class":488}," toolInputs",[191,1813,519],{"class":333},[191,1815,334],{"class":333},[191,1817,1818],{"class":488}," maxLength",[191,1820,519],{"class":333},[191,1822,1823],{"class":1573}," 500",[191,1825,362],{"class":333},[191,1827,362],{"class":333},[191,1829,755],{"class":488},[191,1831,1832],{"class":193,"line":501},[191,1833,470],{"emptyLinePlaceholder":469},[191,1835,1836,1838,1840,1842,1844,1846],{"class":193,"line":526},[191,1837,734],{"class":479},[191,1839,1148],{"class":337},[191,1841,511],{"class":333},[191,1843,1074],{"class":550},[191,1845,595],{"class":488},[191,1847,598],{"class":333},[191,1849,1850,1852,1854,1856,1858,1861,1863,1865,1867,1869,1871],{"class":193,"line":531},[191,1851,1161],{"class":488},[191,1853,519],{"class":333},[191,1855,219],{"class":337},[191,1857,174],{"class":333},[191,1859,1860],{"class":550},"wrap",[191,1862,595],{"class":488},[191,1864,630],{"class":333},[191,1866,1168],{"class":200},[191,1868,630],{"class":333},[191,1870,665],{"class":488},[191,1872,633],{"class":333},[191,1874,1875,1877,1879,1881,1883,1885],{"class":193,"line":559},[191,1876,1177],{"class":488},[191,1878,519],{"class":333},[191,1880,368],{"class":333},[191,1882,1025],{"class":200},[191,1884,630],{"class":333},[191,1886,633],{"class":333},[191,1888,1889,1891,1893,1895],{"class":193,"line":564},[191,1890,1192],{"class":488},[191,1892,519],{"class":333},[191,1894,1198],{"class":1197},[191,1896,633],{"class":333},[191,1898,1899,1901],{"class":193,"line":601},[191,1900,1221],{"class":333},[191,1902,755],{"class":488},[191,1904,1905],{"class":193,"line":636},[191,1906,470],{"emptyLinePlaceholder":469},[191,1908,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935],{"class":193,"line":644},[191,1910,734],{"class":479},[191,1912,334],{"class":333},[191,1914,516],{"class":337},[191,1916,362],{"class":333},[191,1918,511],{"class":333},[191,1920,812],{"class":329},[191,1922,1148],{"class":337},[191,1924,174],{"class":333},[191,1926,1244],{"class":550},[191,1928,595],{"class":488},[191,1930,850],{"class":333},[191,1932,1251],{"class":337},[191,1934,362],{"class":333},[191,1936,755],{"class":488},[191,1938,1939,1942,1944,1947],{"class":193,"line":659},[191,1940,1941],{"class":337},"  log",[191,1943,174],{"class":333},[191,1945,1946],{"class":550},"emit",[191,1948,673],{"class":488},[191,1950,1951,1953],{"class":193,"line":676},[191,1952,1260],{"class":329},[191,1954,1263],{"class":337},[191,1956,1957],{"class":193,"line":681},[191,1958,556],{"class":333},[144,1960,1962],{"id":1961},"beyond-github","Beyond GitHub",[92,1964,1965,1966,1969,1970,1973],{},"Chat SDK adapters share the same agent definition — swap or add ",[102,1967,1968],{},"@chat-adapter\u002Fslack"," or ",[102,1971,1972],{},"@chat-adapter\u002Fdiscord"," and the same GitHub-tools-powered agent answers in Slack channels or Discord threads.",[144,1975,1977],{"id":1976},"external-references","External references",[123,1979,1980,1986,1993],{},[126,1981,1982],{},[95,1983,1985],{"href":97,"rel":1984},[99],"Chat SDK documentation",[126,1987,1988],{},[95,1989,1992],{"href":1990,"rel":1991},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fworkflow",[99],"Vercel Workflow documentation",[126,1994,1995],{},[95,1996,1998],{"href":1696,"rel":1997},[99],"evlog documentation",[2000,2001,2002],"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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":164,"searchDepth":377,"depth":377,"links":2004},[2005,2006,2007,2008,2009,2010,2011,2012],{"id":146,"depth":377,"text":147},{"id":177,"depth":377,"text":178},{"id":304,"depth":377,"text":305},{"id":1010,"depth":377,"text":1011},{"id":1430,"depth":377,"text":1431},{"id":1689,"depth":377,"text":1690},{"id":1961,"depth":377,"text":1962},{"id":1976,"depth":377,"text":1977},"Connect GitHub tools to Chat SDK for durable GitHub, Slack, and Discord bots — a complete PR review agent in about 60 lines of code.","md",[2016,2022],{"label":2017,"icon":2018,"to":140,"target":2019,"color":2020,"variant":2021},"Run the example","i-lucide-github","_blank","neutral","subtle",{"label":2023,"icon":2024,"to":42,"color":2020,"variant":2021},"Durable workflows","i-lucide-refresh-cw",{},{"title":45,"icon":48},{"title":87,"description":2013},"KHO1jJKZx8WYqFlFnuEyNsJwrmfkpHeaIqJqD1AHwMk",[2030,2032],{"title":41,"path":42,"stem":43,"description":2031,"icon":39,"children":-1},"Run GitHub tools as durable, retryable steps with createDurableGithubAgent — crash-safe agents for Nuxt and Next.js apps on Vercel.",{"title":54,"path":55,"stem":56,"description":2033,"children":-1},"Expose only the tools your workflow needs using presets.",1783444204936]