[{"data":1,"prerenderedAt":812},["ShallowReactive",2],{"navigation_docs":3,"-guide-errors":141,"-guide-errors-surround":807},[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":114,"body":143,"description":791,"extension":792,"links":793,"meta":803,"navigation":804,"path":115,"seo":805,"stem":116,"__hash__":806},"docs\u002Fdocs\u002F4.guide\u002F7.errors.md",{"type":144,"value":145,"toc":783},"minimark",[146,150,161,199,204,209,319,323,408,423,427,433,585,599,603,624,768,779],[147,148,149],"p",{},"Raw API failures make models hallucinate. GitHub answers 404 for private repositories the token cannot see, and an expired Vercel OIDC token surfaces as a bare \"Not authorized\" — both read as \"the repo is private\" or \"permissions are missing\" to a model, which then confidently reports the wrong cause.",[147,151,152,153,160],{},"The SDK maps every failure it can classify to a structured error from an ",[154,155,159],"a",{"href":156,"rel":157},"https:\u002F\u002Fevlog.dev",[158],"nofollow","evlog"," catalog. Each error carries:",[162,163,164,175,181,187,193],"ul",{},[165,166,167,170,171,174],"li",{},[168,169,168],"code",{}," — stable, machine-readable identifier (",[168,172,173],{},"github_tools.NOT_FOUND",")",[165,176,177,180],{},[168,178,179],{},"message"," — what happened, with the GitHub or Connect detail embedded",[165,182,183,186],{},[168,184,185],{},"why"," — the technical cause, including the non-obvious ones",[165,188,189,192],{},[168,190,191],{},"fix"," — the actionable remedy",[165,194,195,198],{},[168,196,197],{},"link"," — the relevant documentation page (this site for auth\u002FConnect setup, GitHub's REST troubleshooting docs for API errors)",[200,201,203],"h2",{"id":202},"error-codes","Error codes",[205,206,208],"h3",{"id":207},"authentication-and-vercel-connect","Authentication and Vercel Connect",[210,211,212,225],"table",{},[213,214,215],"thead",{},[216,217,218,222],"tr",{},[219,220,221],"th",{},"Code",[219,223,224],{},"When",[226,227,228,243,264,274,288,302],"tbody",{},[216,229,230,236],{},[231,232,233],"td",{},[168,234,235],{},"TOKEN_REQUIRED",[231,237,238,239,242],{},"No token string, provider, or ",[168,240,241],{},"GITHUB_TOKEN"," env var was available",[216,244,245,250],{},[231,246,247],{},[168,248,249],{},"OIDC_TOKEN_EXPIRED",[231,251,252,255,256,259,260,263],{},[168,253,254],{},"VERCEL_OIDC_TOKEN"," is past its ",[168,257,258],{},"exp"," claim — thrown before any request is made, with the exact expiry time. Run ",[168,261,262],{},"vercel env pull"," locally",[216,265,266,271],{},[231,267,268],{},[168,269,270],{},"CONNECT_NOT_AUTHORIZED",[231,272,273],{},"Connect rejected the calling process's identity (403). The request never reached GitHub — this is not a GitHub permission problem",[216,275,276,281],{},[231,277,278],{},[168,279,280],{},"CONNECT_USER_NOT_CONNECTED",[231,282,283,284,287],{},"A ",[168,285,286],{},"{ type: 'user' }"," subject was requested but that user has no active GitHub connection",[216,289,290,295],{},[231,291,292],{},[168,293,294],{},"CONNECT_INSTALLATION_REQUIRED",[231,296,297,298,301],{},"The connector's GitHub App is not installed on the target account — named in the message when the token targets an ",[168,299,300],{},"org"," or repository owner, which every tool call with a repository target does",[216,303,304,309],{},[231,305,306],{},[168,307,308],{},"SUBJECT_CONTEXT_REQUIRED",[231,310,283,311,314,315,318],{},[168,312,313],{},"connect"," or ",[168,316,317],{},"connect.subject"," resolver ran outside a tool execution (no eve context)",[205,320,322],{"id":321},"github-api","GitHub API",[210,324,325,336],{},[213,326,327],{},[216,328,329,331,334],{},[219,330,221],{},[219,332,333],{},"Status",[219,335,224],{},[226,337,338,351,364,377,395],{},[216,339,340,345,348],{},[231,341,342],{},[168,343,344],{},"UNAUTHORIZED",[231,346,347],{},"401",[231,349,350],{},"Token invalid, expired, or revoked",[216,352,353,358,361],{},[231,354,355],{},[168,356,357],{},"FORBIDDEN",[231,359,360],{},"403",[231,362,363],{},"Missing scope, SAML enforcement, or a user-token-only API (gists, notifications) called with an installation token",[216,365,366,371,374],{},[231,367,368],{},[168,369,370],{},"RATE_LIMITED",[231,372,373],{},"403\u002F429",[231,375,376],{},"Rate limit exhausted — the message includes remaining\u002Flimit and the reset timestamp",[216,378,379,384,387],{},[231,380,381],{},[168,382,383],{},"NOT_FOUND",[231,385,386],{},"404",[231,388,389,390,394],{},"The resource does not exist ",[391,392,393],"strong",{},"or the token cannot see it"," — GitHub returns 404 instead of 403 for private resources",[216,396,397,402,405],{},[231,398,399],{},[168,400,401],{},"VALIDATION_FAILED",[231,403,404],{},"422",[231,406,407],{},"Well-formed input that GitHub refused, with GitHub's message embedded",[147,409,410,411,414,415,418,419,422],{},"Statuses without a catalog entry (5xx, redirects) pass through unchanged. The original Octokit ",[168,412,413],{},"RequestError"," stays reachable as ",[168,416,417],{},"cause","; request coordinates live in ",[168,420,421],{},"internal"," and are never serialized toward the model.",[200,424,426],{"id":425},"what-the-model-sees","What the model sees",[147,428,429,430,432],{},"In the ",[154,431,31],{"href":32},", a failing tool returns the structure instead of a flat string:",[434,435,440],"pre",{"className":436,"code":437,"language":438,"meta":439,"style":439},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error\": {\n    \"code\": \"github_tools.NOT_FOUND\",\n    \"message\": \"GitHub resource not found (404): Not Found\",\n    \"why\": \"Either the resource does not exist, or the token cannot see it — GitHub deliberately returns 404 instead of 403 for private resources the token has no access to.\",\n    \"fix\": \"Check the owner\u002Frepo\u002Fnumber input first. If it is correct, the token lacks access: grant the repository to the PAT or App installation, or use a Connect subject that has access.\",\n    \"link\": \"https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fusing-the-rest-api\u002Ftroubleshooting-the-rest-api#404-not-found-for-an-existing-resource\"\n  }\n}\n","json","",[168,441,442,451,470,494,514,534,554,573,579],{"__ignoreMap":439},[443,444,447],"span",{"class":445,"line":446},"line",1,[443,448,450],{"class":449},"sMK4o","{\n",[443,452,454,457,461,464,467],{"class":445,"line":453},2,[443,455,456],{"class":449},"  \"",[443,458,460],{"class":459},"spNyl","error",[443,462,463],{"class":449},"\"",[443,465,466],{"class":449},":",[443,468,469],{"class":449}," {\n",[443,471,473,476,479,481,483,486,489,491],{"class":445,"line":472},3,[443,474,475],{"class":449},"    \"",[443,477,168],{"class":478},"sBMFI",[443,480,463],{"class":449},[443,482,466],{"class":449},[443,484,485],{"class":449}," \"",[443,487,173],{"class":488},"sfazB",[443,490,463],{"class":449},[443,492,493],{"class":449},",\n",[443,495,497,499,501,503,505,507,510,512],{"class":445,"line":496},4,[443,498,475],{"class":449},[443,500,179],{"class":478},[443,502,463],{"class":449},[443,504,466],{"class":449},[443,506,485],{"class":449},[443,508,509],{"class":488},"GitHub resource not found (404): Not Found",[443,511,463],{"class":449},[443,513,493],{"class":449},[443,515,517,519,521,523,525,527,530,532],{"class":445,"line":516},5,[443,518,475],{"class":449},[443,520,185],{"class":478},[443,522,463],{"class":449},[443,524,466],{"class":449},[443,526,485],{"class":449},[443,528,529],{"class":488},"Either the resource does not exist, or the token cannot see it — GitHub deliberately returns 404 instead of 403 for private resources the token has no access to.",[443,531,463],{"class":449},[443,533,493],{"class":449},[443,535,537,539,541,543,545,547,550,552],{"class":445,"line":536},6,[443,538,475],{"class":449},[443,540,191],{"class":478},[443,542,463],{"class":449},[443,544,466],{"class":449},[443,546,485],{"class":449},[443,548,549],{"class":488},"Check the owner\u002Frepo\u002Fnumber input first. If it is correct, the token lacks access: grant the repository to the PAT or App installation, or use a Connect subject that has access.",[443,551,463],{"class":449},[443,553,493],{"class":449},[443,555,557,559,561,563,565,567,570],{"class":445,"line":556},7,[443,558,475],{"class":449},[443,560,197],{"class":478},[443,562,463],{"class":449},[443,564,466],{"class":449},[443,566,485],{"class":449},[443,568,569],{"class":488},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fusing-the-rest-api\u002Ftroubleshooting-the-rest-api#404-not-found-for-an-existing-resource",[443,571,572],{"class":449},"\"\n",[443,574,576],{"class":445,"line":575},8,[443,577,578],{"class":449},"  }\n",[443,580,582],{"class":445,"line":581},9,[443,583,584],{"class":449},"}\n",[147,586,587,589,590,592,593,595,596,598],{},[168,588,421],{}," stays off the wire (request URL, raw status). ",[168,591,197],{}," is included so the model can fetch the docs page when ",[168,594,185],{},"\u002F",[168,597,191],{}," are not enough.",[200,600,602],{"id":601},"ai-sdk-consumers","AI SDK consumers",[147,604,605,606,595,609,612,613,616,617,620,621,466],{},"With ",[168,607,608],{},"generateText",[168,610,611],{},"streamText",", tool execution errors are thrown and the framework forwards ",[168,614,615],{},"error.message"," to the model. The catalog messages are written to be self-sufficient for that path. If you need the full structure (error boundaries, logging, custom ",[168,618,619],{},"onError","), use evlog's ",[168,622,623],{},"parseError",[434,625,629],{"className":626,"code":627,"language":628,"meta":439,"style":439},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { parseError } from 'evlog'\n\ntry {\n  await generateText({ model, tools, prompt })\n}\ncatch (error) {\n  const { code, message, why, fix } = parseError(error)\n  \u002F\u002F code autocompletes against the github_tools catalog\n}\n","ts",[168,630,631,658,664,671,706,710,720,758,764],{"__ignoreMap":439},[443,632,633,637,640,644,647,650,653,655],{"class":445,"line":446},[443,634,636],{"class":635},"s7zQu","import",[443,638,639],{"class":449}," {",[443,641,643],{"class":642},"sTEyZ"," parseError",[443,645,646],{"class":449}," }",[443,648,649],{"class":635}," from",[443,651,652],{"class":449}," '",[443,654,159],{"class":488},[443,656,657],{"class":449},"'\n",[443,659,660],{"class":445,"line":453},[443,661,663],{"emptyLinePlaceholder":662},true,"\n",[443,665,666,669],{"class":445,"line":472},[443,667,668],{"class":635},"try",[443,670,469],{"class":449},[443,672,673,676,680,684,687,690,693,696,698,701,703],{"class":445,"line":496},[443,674,675],{"class":635},"  await",[443,677,679],{"class":678},"s2Zo4"," generateText",[443,681,683],{"class":682},"swJcz","(",[443,685,686],{"class":449},"{",[443,688,689],{"class":642}," model",[443,691,692],{"class":449},",",[443,694,695],{"class":642}," tools",[443,697,692],{"class":449},[443,699,700],{"class":642}," prompt",[443,702,646],{"class":449},[443,704,705],{"class":682},")\n",[443,707,708],{"class":445,"line":516},[443,709,584],{"class":449},[443,711,712,715,718],{"class":445,"line":536},[443,713,714],{"class":635},"catch",[443,716,717],{"class":642}," (error) ",[443,719,450],{"class":449},[443,721,722,725,727,730,732,735,737,740,742,745,747,750,752,754,756],{"class":445,"line":556},[443,723,724],{"class":459},"  const",[443,726,639],{"class":449},[443,728,729],{"class":642}," code",[443,731,692],{"class":449},[443,733,734],{"class":642}," message",[443,736,692],{"class":449},[443,738,739],{"class":642}," why",[443,741,692],{"class":449},[443,743,744],{"class":642}," fix",[443,746,646],{"class":449},[443,748,749],{"class":449}," =",[443,751,643],{"class":678},[443,753,683],{"class":682},[443,755,460],{"class":642},[443,757,705],{"class":682},[443,759,760],{"class":445,"line":575},[443,761,763],{"class":762},"sHwdD","  \u002F\u002F code autocompletes against the github_tools catalog\n",[443,765,766],{"class":445,"line":581},[443,767,584],{"class":449},[147,769,770,771,774,775,778],{},"The catalog itself is exported as ",[168,772,773],{},"githubToolsErrors"," from ",[168,776,777],{},"@github-tools\u002Fsdk"," for consumers who want to match on specific factories or reuse the codes.",[780,781,782],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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}",{"title":439,"searchDepth":453,"depth":453,"links":784},[785,789,790],{"id":202,"depth":453,"text":203,"children":786},[787,788],{"id":207,"depth":472,"text":208},{"id":321,"depth":472,"text":322},{"id":425,"depth":453,"text":426},{"id":601,"depth":453,"text":602},"Structured, agent-readable errors — every failure carries a stable code, the technical cause, and an actionable fix.","md",[794,798,800],{"label":102,"icon":795,"to":103,"color":796,"variant":797},"i-lucide-key-round","neutral","subtle",{"label":106,"icon":799,"to":107,"color":796,"variant":797},"i-lucide-unplug",{"label":801,"icon":802,"to":131,"color":796,"variant":797},"API reference","i-lucide-braces",{},{"title":114},{"title":114,"description":791},"wbUBQpG7kxQtoSevUvxfixEFQOuL1vGEfQUd0yrwt_Y",[808,810],{"title":110,"path":111,"stem":112,"description":809,"children":-1},"Default owner\u002Frepo\u002FPR\u002Fissue\u002Fref on tools, prefer composite reads, and keep payloads lean with detail, includePatch, and line ranges.",{"title":118,"path":119,"stem":120,"description":811,"children":-1},"Use Jev from TypeSafe AI to pick GitHub tool presets per request and auto-approve routine writes in AI SDK, TanStack AI, and eve agents.",1791387711741]