[{"data":1,"prerenderedAt":1029},["ShallowReactive",2],{"navigation_docs":3,"-examples-vercel-workflow-ci-failure-bot":125,"-examples-vercel-workflow-ci-failure-bot-surround":1024},[4,26,49,81,105,117],{"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 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":7,"children":52,"page":25},"Examples","\u002Fexamples",[53,57,61,65,69,73,77],{"title":54,"path":55,"stem":56},"Overview","\u002Fexamples\u002Foverview","docs\u002F3.examples\u002F1.overview",{"title":58,"path":59,"stem":60,"icon":34},"Stale issue triager","\u002Fexamples\u002Feve-stale-issue-triager","docs\u002F3.examples\u002F2.eve-stale-issue-triager",{"title":62,"path":63,"stem":64,"icon":39},"Release notes generator","\u002Fexamples\u002Fai-sdk-release-notes-generator","docs\u002F3.examples\u002F3.ai-sdk-release-notes-generator",{"title":66,"path":67,"stem":68,"icon":39},"CI failure bot","\u002Fexamples\u002Fvercel-workflow-ci-failure-bot","docs\u002F3.examples\u002F4.vercel-workflow-ci-failure-bot",{"title":70,"path":71,"stem":72,"icon":48},"Issue triage bot","\u002Fexamples\u002Fchat-sdk-issue-triage-bot","docs\u002F3.examples\u002F5.chat-sdk-issue-triage-bot",{"title":74,"path":75,"stem":76,"icon":34},"Manager & sub-agents","\u002Fexamples\u002Fmanager-agent-with-subagents","docs\u002F3.examples\u002F6.manager-agent-with-subagents",{"title":78,"path":79,"stem":80},"Recipes","\u002Fexamples\u002Frecipes","docs\u002F3.examples\u002F7.recipes",{"title":82,"path":83,"stem":7,"children":84,"page":25},"Guide","\u002Fguide",[85,89,93,97,101],{"title":86,"path":87,"stem":88},"Scope with Presets","\u002Fguide\u002Fpresets","docs\u002F4.guide\u002F1.presets",{"title":90,"path":91,"stem":92},"Control Write Safety","\u002Fguide\u002Fapproval-control","docs\u002F4.guide\u002F2.approval-control",{"title":94,"path":95,"stem":96},"Commit Attribution","\u002Fguide\u002Fcommit-attribution","docs\u002F4.guide\u002F3.commit-attribution",{"title":98,"path":99,"stem":100},"Tokens & Auth","\u002Fguide\u002Ftokens-and-auth","docs\u002F4.guide\u002F4.tokens-and-auth",{"title":102,"path":103,"stem":104},"Vercel Connect","\u002Fguide\u002Fvercel-connect","docs\u002F4.guide\u002F5.vercel-connect",{"title":106,"path":107,"stem":7,"children":108,"page":25},"Api","\u002Fapi",[109,113],{"title":110,"path":111,"stem":112},"Tools Catalog","\u002Fapi\u002Ftools-catalog","docs\u002F5.api\u002F1.tools-catalog",{"title":114,"path":115,"stem":116},"API Reference","\u002Fapi\u002Freference","docs\u002F5.api\u002F2.reference",{"title":118,"path":119,"stem":7,"children":120,"page":25},"Deprecated","\u002Fdeprecated",[121],{"title":122,"path":123,"stem":124,"icon":34},"eve (direct import)","\u002Fdeprecated\u002Feve","docs\u002F6.deprecated\u002F1.eve",{"id":126,"title":127,"body":128,"description":1007,"extension":1008,"links":1009,"meta":1019,"navigation":1020,"path":67,"seo":1021,"stem":68,"__hash__":1023},"docs\u002Fdocs\u002F3.examples\u002F4.vercel-workflow-ci-failure-bot.md","Example: a CI failure bot with Vercel Workflow",{"type":129,"value":130,"toc":1000},"minimark",[131,154,157,162,735,762,766,872,876,882,906,925,929,949,970,974,996],[132,133,137,141],"prompt",{":actions":134,"description":135,"icon":136},"[\"copy\",\"cursor\",\"windsurf\"]","Build a durable CI failure bot with Vercel Workflow","i-lucide-refresh-cw",[138,139,140],"p",{},"Build a durable chat backend that diagnoses failing GitHub Actions runs.",[142,143,144,148,151],"ul",{},[145,146,147],"li",{},"Define a \"use workflow\" function using createDurableGithubAgent from @github-tools\u002Fsdk\u002Fworkflow with preset: 'ci-ops'",[145,149,150],{},"Pass token as a lazy connectGithubToken('github\u002Fmy-connector', { preset: 'ci-ops' }) provider, not a raw GITHUB_TOKEN",[145,152,153],{},"Stream through getWritable and start the workflow from a Nitro\u002FNext route, returning the x-workflow-run-id header",[138,155,156],{},"A chat backend a developer can ask \"why did CI fail on PR #128?\". The agent inspects the failing workflow run, its jobs, and the combined status, then explains the likely cause, crash-safe across restarts thanks to Vercel Workflow.",[158,159,161],"h2",{"id":160},"files","Files",[163,164,165,550],"code-group",{},[166,167,173],"pre",{"className":168,"code":169,"filename":170,"language":171,"meta":172,"style":172},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createDurableGithubAgent } from '@github-tools\u002Fsdk\u002Fworkflow'\nimport { connectGithubToken } from '@github-tools\u002Fsdk\u002Fconnect'\nimport { getWritable } from 'workflow'\nimport type { ModelMessage, UIMessageChunk } from 'ai'\n\nexport async function ciFailureBotChat(messages: ModelMessage[]) {\n  'use workflow'\n\n  const agent = createDurableGithubAgent({\n    model: 'anthropic\u002Fclaude-sonnet-4.6',\n    token: connectGithubToken('github\u002Fmy-connector', { preset: 'ci-ops' }),\n    preset: 'ci-ops',\n    additionalInstructions: `\n      When asked about a failing run, use listWorkflowRuns and getWorkflowRun to find it,\n      then listWorkflowJobs and listCheckRuns to find the failing step.\n      Summarize the likely cause in plain language before suggesting a fix.\n    `,\n  })\n\n  const writable = getWritable\u003CUIMessageChunk>()\n  await agent.stream({ messages, writable })\n}\n","server\u002Fworkflows\u002Fci-failure-bot.workflow.ts","ts","",[174,175,176,209,230,251,281,288,327,338,343,363,382,423,439,450,456,462,468,476,485,490,514,544],"code",{"__ignoreMap":172},[177,178,181,185,189,193,196,199,202,206],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"s7zQu","import",[177,186,188],{"class":187},"sMK4o"," {",[177,190,192],{"class":191},"sTEyZ"," createDurableGithubAgent",[177,194,195],{"class":187}," }",[177,197,198],{"class":183}," from",[177,200,201],{"class":187}," '",[177,203,205],{"class":204},"sfazB","@github-tools\u002Fsdk\u002Fworkflow",[177,207,208],{"class":187},"'\n",[177,210,212,214,216,219,221,223,225,228],{"class":179,"line":211},2,[177,213,184],{"class":183},[177,215,188],{"class":187},[177,217,218],{"class":191}," connectGithubToken",[177,220,195],{"class":187},[177,222,198],{"class":183},[177,224,201],{"class":187},[177,226,227],{"class":204},"@github-tools\u002Fsdk\u002Fconnect",[177,229,208],{"class":187},[177,231,233,235,237,240,242,244,246,249],{"class":179,"line":232},3,[177,234,184],{"class":183},[177,236,188],{"class":187},[177,238,239],{"class":191}," getWritable",[177,241,195],{"class":187},[177,243,198],{"class":183},[177,245,201],{"class":187},[177,247,248],{"class":204},"workflow",[177,250,208],{"class":187},[177,252,254,256,259,261,264,267,270,272,274,276,279],{"class":179,"line":253},4,[177,255,184],{"class":183},[177,257,258],{"class":183}," type",[177,260,188],{"class":187},[177,262,263],{"class":191}," ModelMessage",[177,265,266],{"class":187},",",[177,268,269],{"class":191}," UIMessageChunk",[177,271,195],{"class":187},[177,273,198],{"class":183},[177,275,201],{"class":187},[177,277,278],{"class":204},"ai",[177,280,208],{"class":187},[177,282,284],{"class":179,"line":283},5,[177,285,287],{"emptyLinePlaceholder":286},true,"\n",[177,289,291,294,298,301,305,308,312,315,318,321,324],{"class":179,"line":290},6,[177,292,293],{"class":183},"export",[177,295,297],{"class":296},"spNyl"," async",[177,299,300],{"class":296}," function",[177,302,304],{"class":303},"s2Zo4"," ciFailureBotChat",[177,306,307],{"class":187},"(",[177,309,311],{"class":310},"sHdIc","messages",[177,313,314],{"class":187},":",[177,316,263],{"class":317},"sBMFI",[177,319,320],{"class":191},"[]",[177,322,323],{"class":187},")",[177,325,326],{"class":187}," {\n",[177,328,330,333,336],{"class":179,"line":329},7,[177,331,332],{"class":187},"  '",[177,334,335],{"class":204},"use workflow",[177,337,208],{"class":187},[177,339,341],{"class":179,"line":340},8,[177,342,287],{"emptyLinePlaceholder":286},[177,344,346,349,352,355,357,360],{"class":179,"line":345},9,[177,347,348],{"class":296},"  const",[177,350,351],{"class":191}," agent",[177,353,354],{"class":187}," =",[177,356,192],{"class":303},[177,358,307],{"class":359},"swJcz",[177,361,362],{"class":187},"{\n",[177,364,366,369,371,373,376,379],{"class":179,"line":365},10,[177,367,368],{"class":359},"    model",[177,370,314],{"class":187},[177,372,201],{"class":187},[177,374,375],{"class":204},"anthropic\u002Fclaude-sonnet-4.6",[177,377,378],{"class":187},"'",[177,380,381],{"class":187},",\n",[177,383,385,388,390,392,394,396,399,401,403,405,408,410,412,415,417,419,421],{"class":179,"line":384},11,[177,386,387],{"class":359},"    token",[177,389,314],{"class":187},[177,391,218],{"class":303},[177,393,307],{"class":359},[177,395,378],{"class":187},[177,397,398],{"class":204},"github\u002Fmy-connector",[177,400,378],{"class":187},[177,402,266],{"class":187},[177,404,188],{"class":187},[177,406,407],{"class":359}," preset",[177,409,314],{"class":187},[177,411,201],{"class":187},[177,413,414],{"class":204},"ci-ops",[177,416,378],{"class":187},[177,418,195],{"class":187},[177,420,323],{"class":359},[177,422,381],{"class":187},[177,424,426,429,431,433,435,437],{"class":179,"line":425},12,[177,427,428],{"class":359},"    preset",[177,430,314],{"class":187},[177,432,201],{"class":187},[177,434,414],{"class":204},[177,436,378],{"class":187},[177,438,381],{"class":187},[177,440,442,445,447],{"class":179,"line":441},13,[177,443,444],{"class":359},"    additionalInstructions",[177,446,314],{"class":187},[177,448,449],{"class":187}," `\n",[177,451,453],{"class":179,"line":452},14,[177,454,455],{"class":204},"      When asked about a failing run, use listWorkflowRuns and getWorkflowRun to find it,\n",[177,457,459],{"class":179,"line":458},15,[177,460,461],{"class":204},"      then listWorkflowJobs and listCheckRuns to find the failing step.\n",[177,463,465],{"class":179,"line":464},16,[177,466,467],{"class":204},"      Summarize the likely cause in plain language before suggesting a fix.\n",[177,469,471,474],{"class":179,"line":470},17,[177,472,473],{"class":187},"    `",[177,475,381],{"class":187},[177,477,479,482],{"class":179,"line":478},18,[177,480,481],{"class":187},"  }",[177,483,484],{"class":359},")\n",[177,486,488],{"class":179,"line":487},19,[177,489,287],{"emptyLinePlaceholder":286},[177,491,493,495,498,500,502,505,508,511],{"class":179,"line":492},20,[177,494,348],{"class":296},[177,496,497],{"class":191}," writable",[177,499,354],{"class":187},[177,501,239],{"class":303},[177,503,504],{"class":187},"\u003C",[177,506,507],{"class":317},"UIMessageChunk",[177,509,510],{"class":187},">",[177,512,513],{"class":359},"()\n",[177,515,517,520,522,525,528,530,533,536,538,540,542],{"class":179,"line":516},21,[177,518,519],{"class":183},"  await",[177,521,351],{"class":191},[177,523,524],{"class":187},".",[177,526,527],{"class":303},"stream",[177,529,307],{"class":359},[177,531,532],{"class":187},"{",[177,534,535],{"class":191}," messages",[177,537,266],{"class":187},[177,539,497],{"class":191},[177,541,195],{"class":187},[177,543,484],{"class":359},[177,545,547],{"class":179,"line":546},22,[177,548,549],{"class":187},"}\n",[166,551,554],{"className":168,"code":552,"filename":553,"language":171,"meta":172,"style":172},"import { start } from 'workflow\u002Fapi'\nimport { ciFailureBotChat } from '..\u002Fworkflows\u002Fci-failure-bot.workflow'\n\nexport default defineEventHandler(async (event) => {\n  const { messages } = await readBody(event)\n\n  const run = await start(ciFailureBotChat, [messages])\n\n  setHeader(event, 'x-workflow-run-id', run.runId)\n  return run.readable\n})\n","server\u002Fapi\u002Fci-chat.post.ts",[174,555,556,576,595,599,627,651,655,683,687,716,728],{"__ignoreMap":172},[177,557,558,560,562,565,567,569,571,574],{"class":179,"line":180},[177,559,184],{"class":183},[177,561,188],{"class":187},[177,563,564],{"class":191}," start",[177,566,195],{"class":187},[177,568,198],{"class":183},[177,570,201],{"class":187},[177,572,573],{"class":204},"workflow\u002Fapi",[177,575,208],{"class":187},[177,577,578,580,582,584,586,588,590,593],{"class":179,"line":211},[177,579,184],{"class":183},[177,581,188],{"class":187},[177,583,304],{"class":191},[177,585,195],{"class":187},[177,587,198],{"class":183},[177,589,201],{"class":187},[177,591,592],{"class":204},"..\u002Fworkflows\u002Fci-failure-bot.workflow",[177,594,208],{"class":187},[177,596,597],{"class":179,"line":232},[177,598,287],{"emptyLinePlaceholder":286},[177,600,601,603,606,609,611,614,617,620,622,625],{"class":179,"line":253},[177,602,293],{"class":183},[177,604,605],{"class":183}," default",[177,607,608],{"class":303}," defineEventHandler",[177,610,307],{"class":191},[177,612,613],{"class":296},"async",[177,615,616],{"class":187}," (",[177,618,619],{"class":310},"event",[177,621,323],{"class":187},[177,623,624],{"class":296}," =>",[177,626,326],{"class":187},[177,628,629,631,633,635,637,639,642,645,647,649],{"class":179,"line":283},[177,630,348],{"class":296},[177,632,188],{"class":187},[177,634,535],{"class":191},[177,636,195],{"class":187},[177,638,354],{"class":187},[177,640,641],{"class":183}," await",[177,643,644],{"class":303}," readBody",[177,646,307],{"class":359},[177,648,619],{"class":191},[177,650,484],{"class":359},[177,652,653],{"class":179,"line":290},[177,654,287],{"emptyLinePlaceholder":286},[177,656,657,659,662,664,666,668,670,673,675,678,680],{"class":179,"line":329},[177,658,348],{"class":296},[177,660,661],{"class":191}," run",[177,663,354],{"class":187},[177,665,641],{"class":183},[177,667,564],{"class":303},[177,669,307],{"class":359},[177,671,672],{"class":191},"ciFailureBotChat",[177,674,266],{"class":187},[177,676,677],{"class":359}," [",[177,679,311],{"class":191},[177,681,682],{"class":359},"])\n",[177,684,685],{"class":179,"line":340},[177,686,287],{"emptyLinePlaceholder":286},[177,688,689,692,694,696,698,700,703,705,707,709,711,714],{"class":179,"line":345},[177,690,691],{"class":303},"  setHeader",[177,693,307],{"class":359},[177,695,619],{"class":191},[177,697,266],{"class":187},[177,699,201],{"class":187},[177,701,702],{"class":204},"x-workflow-run-id",[177,704,378],{"class":187},[177,706,266],{"class":187},[177,708,661],{"class":191},[177,710,524],{"class":187},[177,712,713],{"class":191},"runId",[177,715,484],{"class":359},[177,717,718,721,723,725],{"class":179,"line":365},[177,719,720],{"class":183},"  return",[177,722,661],{"class":191},[177,724,524],{"class":187},[177,726,727],{"class":191},"readable\n",[177,729,730,733],{"class":179,"line":384},[177,731,732],{"class":187},"}",[177,734,484],{"class":191},[166,736,741],{"className":737,"code":738,"filename":739,"language":740,"meta":172,"style":172},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Vercel Connect OIDC token, required by the \"github\u002Fmy-connector\" connector.\n# vercel link && vercel env pull\nVERCEL_OIDC_TOKEN=\n",".env","bash",[174,742,743,749,754],{"__ignoreMap":172},[177,744,745],{"class":179,"line":180},[177,746,748],{"class":747},"sHwdD","# Vercel Connect OIDC token, required by the \"github\u002Fmy-connector\" connector.\n",[177,750,751],{"class":179,"line":211},[177,752,753],{"class":747},"# vercel link && vercel env pull\n",[177,755,756,759],{"class":179,"line":232},[177,757,758],{"class":191},"VERCEL_OIDC_TOKEN",[177,760,761],{"class":187},"=\n",[158,763,765],{"id":764},"install","Install",[163,767,768,799,824,848],{},[166,769,772],{"className":737,"code":770,"filename":771,"language":740,"meta":172,"style":172},"pnpm add @github-tools\u002Fsdk @vercel\u002Fconnect workflow @ai-sdk\u002Fworkflow ai zod\n","pnpm",[174,773,774],{"__ignoreMap":172},[177,775,776,778,781,784,787,790,793,796],{"class":179,"line":180},[177,777,771],{"class":317},[177,779,780],{"class":204}," add",[177,782,783],{"class":204}," @github-tools\u002Fsdk",[177,785,786],{"class":204}," @vercel\u002Fconnect",[177,788,789],{"class":204}," workflow",[177,791,792],{"class":204}," @ai-sdk\u002Fworkflow",[177,794,795],{"class":204}," ai",[177,797,798],{"class":204}," zod\n",[166,800,803],{"className":737,"code":801,"filename":802,"language":740,"meta":172,"style":172},"npm install @github-tools\u002Fsdk @vercel\u002Fconnect workflow @ai-sdk\u002Fworkflow ai zod\n","npm",[174,804,805],{"__ignoreMap":172},[177,806,807,809,812,814,816,818,820,822],{"class":179,"line":180},[177,808,802],{"class":317},[177,810,811],{"class":204}," install",[177,813,783],{"class":204},[177,815,786],{"class":204},[177,817,789],{"class":204},[177,819,792],{"class":204},[177,821,795],{"class":204},[177,823,798],{"class":204},[166,825,828],{"className":737,"code":826,"filename":827,"language":740,"meta":172,"style":172},"yarn add @github-tools\u002Fsdk @vercel\u002Fconnect workflow @ai-sdk\u002Fworkflow ai zod\n","yarn",[174,829,830],{"__ignoreMap":172},[177,831,832,834,836,838,840,842,844,846],{"class":179,"line":180},[177,833,827],{"class":317},[177,835,780],{"class":204},[177,837,783],{"class":204},[177,839,786],{"class":204},[177,841,789],{"class":204},[177,843,792],{"class":204},[177,845,795],{"class":204},[177,847,798],{"class":204},[166,849,852],{"className":737,"code":850,"filename":851,"language":740,"meta":172,"style":172},"bun add @github-tools\u002Fsdk @vercel\u002Fconnect workflow @ai-sdk\u002Fworkflow ai zod\n","bun",[174,853,854],{"__ignoreMap":172},[177,855,856,858,860,862,864,866,868,870],{"class":179,"line":180},[177,857,851],{"class":317},[177,859,780],{"class":204},[177,861,783],{"class":204},[177,863,786],{"class":204},[177,865,789],{"class":204},[177,867,792],{"class":204},[177,869,795],{"class":204},[177,871,798],{"class":204},[158,873,875],{"id":874},"set-up-the-connector","Set up the connector",[138,877,878,879,881],{},"Create a ",[174,880,398],{}," connector scoped to the repositories this bot monitors, then pull a local OIDC token for development:",[166,883,886],{"className":737,"code":884,"filename":885,"language":740,"meta":172,"style":172},"vercel link\nvercel env pull\n","Terminal",[174,887,888,896],{"__ignoreMap":172},[177,889,890,893],{"class":179,"line":180},[177,891,892],{"class":317},"vercel",[177,894,895],{"class":204}," link\n",[177,897,898,900,903],{"class":179,"line":211},[177,899,892],{"class":317},[177,901,902],{"class":204}," env",[177,904,905],{"class":204}," pull\n",[138,907,908,911,912,915,916,921,922,524],{},[174,909,910],{},"connectGithubToken"," mints a fresh, short-lived token on every call rather than a long-lived ",[174,913,914],{},"GITHUB_TOKEN",", see ",[917,918,920],"a",{"href":919},"\u002Fguide\u002Fvercel-connect#token-provider-only","Vercel Connect: token provider only",". Full connector checklist: ",[917,923,102],{"href":924},"\u002Fguide\u002Fvercel-connect#setup-checklist",[158,926,928],{"id":927},"wire-the-client","Wire the client",[138,930,931,932,940,941,944,945,524],{},"Point ",[917,933,937],{"href":934,"rel":935},"https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fagents\u002Fworkflow-agent",[936],"nofollow",[174,938,939],{},"WorkflowChatTransport"," at ",[174,942,943],{},"\u002Fapi\u002Fci-chat",", and add a GET reconnect route so long runs survive timeouts, exactly as described in ",[917,946,948],{"href":947},"\u002Fframeworks\u002Fvercel-workflow#wire-it-into-your-framework","Durable agents with Vercel Workflow",[950,951,952,954,955,958,959,962,963,966,967,524],"note",{},[174,953,414],{}," includes ",[174,956,957],{},"triggerWorkflow",", ",[174,960,961],{},"cancelWorkflowRun",", and ",[174,964,965],{},"rerunWorkflowRun",". All three require approval by default. This bot only reads run status, so it never triggers an approval prompt unless you explicitly ask it to re-run a job. Details: ",[917,968,969],{"href":91},"Control write safety",[158,971,973],{"id":972},"go-further","Go further",[142,975,976,979,986],{},[145,977,978],{},"Add a GitHub webhook that calls this workflow automatically whenever a run fails, instead of waiting for someone to ask",[145,980,981,982,985],{},"Combine with the ",[917,983,984],{"href":63},"release notes generator"," so a green CI run on main can trigger a release draft",[145,987,988,989,991,992,995],{},"Swap ",[174,990,414],{}," for ",[174,993,994],{},"['ci-ops', 'code-review']"," if the bot should also suggest a fix in the PR that broke the build",[997,998,999],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":172,"searchDepth":211,"depth":211,"links":1001},[1002,1003,1004,1005,1006],{"id":160,"depth":211,"text":161},{"id":764,"depth":211,"text":765},{"id":874,"depth":211,"text":875},{"id":927,"depth":211,"text":928},{"id":972,"depth":211,"text":973},"A durable chat backend that diagnoses failing GitHub Actions runs, built with createDurableGithubAgent, the ci-ops preset, and Vercel Connect.","md",[1010,1014,1017],{"label":1011,"icon":39,"to":42,"color":1012,"variant":1013},"Vercel Workflow guide","neutral","subtle",{"label":1015,"icon":1016,"to":87,"color":1012,"variant":1013},"Scope with presets","i-lucide-layers",{"label":102,"icon":1018,"to":103,"color":1012,"variant":1013},"i-lucide-plug",{},{"title":66,"icon":39},{"title":127,"description":1022},"A crash-safe CI diagnosis agent built with @github-tools\u002Fsdk\u002Fworkflow, the ci-ops preset, and Vercel Connect.","UqDlDBJktTjzu3VnF8bEW2oCKC8OQoF-rKQ1kc6y9wU",[1025,1027],{"title":62,"path":63,"stem":64,"description":1026,"icon":39,"children":-1},"A standalone AI SDK script that drafts release notes from merged pull requests since the last tag, using the release-manager preset and Vercel Connect.",{"title":70,"path":71,"stem":72,"description":1028,"icon":48,"children":-1},"A durable GitHub bot that triages @mentioned issues, classifies them, and labels them, built with Chat SDK, Vercel Workflow, the issue-triage preset, and Vercel Connect.",1786010333164]