[{"data":1,"prerenderedAt":740},["ShallowReactive",2],{"navigation_docs":3,"-concepts-data-model":195,"-concepts-data-model-surround":735},[4,23,65,87,133,155,173],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Guides","i-lucide-compass","\u002Fguides","2.guides",[29,33,37,41,45,49,53,57,61],{"title":30,"path":31,"stem":32},"Authenticate","\u002Fguides\u002Fauthentication","2.guides\u002F1.authentication",{"title":34,"path":35,"stem":36},"Work with several forges","\u002Fguides\u002Fmultiple-forges","2.guides\u002F2.multiple-forges",{"title":38,"path":39,"stem":40},"Configure from the environment","\u002Fguides\u002Fenvironment","2.guides\u002F3.environment",{"title":42,"path":43,"stem":44},"Receive webhooks","\u002Fguides\u002Fwebhooks","2.guides\u002F4.webhooks",{"title":46,"path":47,"stem":48},"Check what a forge supports","\u002Fguides\u002Fcapabilities","2.guides\u002F5.capabilities",{"title":50,"path":51,"stem":52},"Handle errors and rate limits","\u002Fguides\u002Ferrors","2.guides\u002F6.errors",{"title":54,"path":55,"stem":56},"Page through results","\u002Fguides\u002Fpagination","2.guides\u002F7.pagination",{"title":58,"path":59,"stem":60},"Browser bundles","\u002Fguides\u002Fbundling","2.guides\u002F8.bundling",{"title":62,"path":63,"stem":64},"Test your code","\u002Fguides\u002Ftesting","2.guides\u002F9.testing",{"title":66,"icon":67,"path":68,"stem":69,"children":70,"page":22},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[71,75,79,83],{"title":72,"path":73,"stem":74},"Data model","\u002Fconcepts\u002Fdata-model","3.concepts\u002F1.data-model",{"title":76,"path":77,"stem":78},"Capabilities","\u002Fconcepts\u002Fcapabilities","3.concepts\u002F2.capabilities",{"title":80,"path":81,"stem":82},"Providers and factories","\u002Fconcepts\u002Fproviders","3.concepts\u002F3.providers",{"title":84,"path":85,"stem":86},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F4.events",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Providers","i-lucide-server","\u002Fproviders","4.providers",[93,97,101,105,109,113,117,121,125,129],{"title":94,"path":95,"stem":96},"Azure DevOps","\u002Fproviders\u002Fazure-devops","4.providers\u002Fazure-devops",{"title":98,"path":99,"stem":100},"Bitbucket Cloud","\u002Fproviders\u002Fbitbucket","4.providers\u002Fbitbucket",{"title":102,"path":103,"stem":104},"Cursor Origin","\u002Fproviders\u002Fcursor-origin","4.providers\u002Fcursor-origin",{"title":106,"path":107,"stem":108},"Forgejo and Codeberg","\u002Fproviders\u002Fforgejo","4.providers\u002Fforgejo",{"title":110,"path":111,"stem":112},"Gitea","\u002Fproviders\u002Fgitea","4.providers\u002Fgitea",{"title":114,"path":115,"stem":116},"Gitee","\u002Fproviders\u002Fgitee","4.providers\u002Fgitee",{"title":118,"path":119,"stem":120},"GitHub","\u002Fproviders\u002Fgithub","4.providers\u002Fgithub",{"title":122,"path":123,"stem":124},"GitLab","\u002Fproviders\u002Fgitlab","4.providers\u002Fgitlab",{"title":126,"path":127,"stem":128},"pushin.eu","\u002Fproviders\u002Fpushin","4.providers\u002Fpushin",{"title":130,"path":131,"stem":132},"Tangled","\u002Fproviders\u002Ftangled","4.providers\u002Ftangled",{"title":134,"icon":135,"path":136,"stem":137,"children":138,"page":22},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[139,143,147,151],{"title":140,"path":141,"stem":142},"Provider API","\u002Freference\u002Fprovider-api","5.reference\u002F1.provider-api",{"title":144,"path":145,"stem":146},"Capability matrix","\u002Freference\u002Fcapability-matrix","5.reference\u002F2.capability-matrix",{"title":148,"path":149,"stem":150},"Errors","\u002Freference\u002Ferrors","5.reference\u002F3.errors",{"title":152,"path":153,"stem":154},"JSON Schemas","\u002Freference\u002Fjson-schemas","5.reference\u002F5.json-schemas",{"title":156,"icon":157,"path":158,"stem":159,"children":160,"page":22},"Examples","i-lucide-boxes","\u002Fexamples","6.examples",[161,165,169],{"title":162,"path":163,"stem":164},"Inbox CLI","\u002Fexamples\u002Finbox-cli","6.examples\u002F1.inbox-cli",{"title":166,"path":167,"stem":168},"Label bot","\u002Fexamples\u002Flabel-bot","6.examples\u002F2.label-bot",{"title":170,"path":171,"stem":172},"Release digest","\u002Fexamples\u002Frelease-digest","6.examples\u002F3.release-digest",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":22},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","7.contributing",[179,183,187,191],{"title":180,"path":181,"stem":182},"Contribution guide","\u002Fcontributing\u002Fguidelines","7.contributing\u002F1.guidelines",{"title":184,"path":185,"stem":186},"Write a provider","\u002Fcontributing\u002Fwrite-a-provider","7.contributing\u002F2.write-a-provider",{"title":188,"path":189,"stem":190},"Record fixtures","\u002Fcontributing\u002Frecord-fixtures","7.contributing\u002F3.record-fixtures",{"title":192,"path":193,"stem":194},"Contributors","\u002Fcontributing\u002Fcontributors","7.contributing\u002F4.contributors",{"id":196,"title":72,"body":197,"description":727,"extension":728,"links":729,"meta":730,"navigation":732,"path":73,"seo":733,"stem":74,"__hash__":734},"docs\u002F3.concepts\u002F1.data-model.md",{"type":198,"value":199,"toc":717},"minimark",[200,209,214,225,270,478,498,503,536,540,563,575,579,625,654,658,676,680,690,694,713],[201,202,203,204,208],"p",{},"Forges name and number things in different ways. ",[205,206,207],"code",{},"forges"," describes them with a small set of shared types, so code that handles a GitHub issue handles a Forgejo issue too.",[210,211,213],"h2",{"id":212},"refs","Refs",[201,215,216,217,220,221,224],{},"A ref points at a resource. It is a plain object that you can build by hand, store and send between processes. Every ref has ",[205,218,219],{},"forge"," and ",[205,222,223],{},"instance",":",[226,227,228,249,267],"ul",{},[229,230,231,232,235,236,220,239,242,243,245,246,248],"li",{},"A ",[205,233,234],{},"RepoRef"," adds ",[205,237,238],{},"owner",[205,240,241],{},"name",". On GitLab, ",[205,244,238],{}," can contain slashes for nested groups, and ",[205,247,241],{}," never does.",[229,250,231,251,254,255,258,259,262,263,266],{},[205,252,253],{},"ThreadRef"," adds the ",[205,256,257],{},"repo",", a ",[205,260,261],{},"kind"," and a ",[205,264,265],{},"number",".",[229,268,269],{},"Comments, releases, webhooks, checks and notifications have refs of their own.",[271,272,277],"pre",{"className":273,"code":274,"language":275,"meta":276,"style":276},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const repo = {\n  forge: 'gitlab',\n  instance: 'gitlab.com',\n  owner: 'acme\u002Fplatform',\n  name: 'widgets',\n} as const\nconst ref = {\n  forge: 'gitlab',\n  instance: 'gitlab.com',\n  repo,\n  kind: 'pull_request',\n  number: '23',\n} as const\n","ts","",[205,278,279,299,321,338,355,372,385,397,412,427,435,452,469],{"__ignoreMap":276},[280,281,284,288,292,296],"span",{"class":282,"line":283},"line",1,[280,285,287],{"class":286},"spNyl","const",[280,289,291],{"class":290},"sTEyZ"," repo ",[280,293,295],{"class":294},"sMK4o","=",[280,297,298],{"class":294}," {\n",[280,300,302,306,308,311,315,318],{"class":282,"line":301},2,[280,303,305],{"class":304},"swJcz","  forge",[280,307,224],{"class":294},[280,309,310],{"class":294}," '",[280,312,314],{"class":313},"sfazB","gitlab",[280,316,317],{"class":294},"'",[280,319,320],{"class":294},",\n",[280,322,324,327,329,331,334,336],{"class":282,"line":323},3,[280,325,326],{"class":304},"  instance",[280,328,224],{"class":294},[280,330,310],{"class":294},[280,332,333],{"class":313},"gitlab.com",[280,335,317],{"class":294},[280,337,320],{"class":294},[280,339,341,344,346,348,351,353],{"class":282,"line":340},4,[280,342,343],{"class":304},"  owner",[280,345,224],{"class":294},[280,347,310],{"class":294},[280,349,350],{"class":313},"acme\u002Fplatform",[280,352,317],{"class":294},[280,354,320],{"class":294},[280,356,358,361,363,365,368,370],{"class":282,"line":357},5,[280,359,360],{"class":304},"  name",[280,362,224],{"class":294},[280,364,310],{"class":294},[280,366,367],{"class":313},"widgets",[280,369,317],{"class":294},[280,371,320],{"class":294},[280,373,375,378,382],{"class":282,"line":374},6,[280,376,377],{"class":294},"}",[280,379,381],{"class":380},"s7zQu"," as",[280,383,384],{"class":286}," const\n",[280,386,388,390,393,395],{"class":282,"line":387},7,[280,389,287],{"class":286},[280,391,392],{"class":290}," ref ",[280,394,295],{"class":294},[280,396,298],{"class":294},[280,398,400,402,404,406,408,410],{"class":282,"line":399},8,[280,401,305],{"class":304},[280,403,224],{"class":294},[280,405,310],{"class":294},[280,407,314],{"class":313},[280,409,317],{"class":294},[280,411,320],{"class":294},[280,413,415,417,419,421,423,425],{"class":282,"line":414},9,[280,416,326],{"class":304},[280,418,224],{"class":294},[280,420,310],{"class":294},[280,422,333],{"class":313},[280,424,317],{"class":294},[280,426,320],{"class":294},[280,428,430,433],{"class":282,"line":429},10,[280,431,432],{"class":290},"  repo",[280,434,320],{"class":294},[280,436,438,441,443,445,448,450],{"class":282,"line":437},11,[280,439,440],{"class":304},"  kind",[280,442,224],{"class":294},[280,444,310],{"class":294},[280,446,447],{"class":313},"pull_request",[280,449,317],{"class":294},[280,451,320],{"class":294},[280,453,455,458,460,462,465,467],{"class":282,"line":454},12,[280,456,457],{"class":304},"  number",[280,459,224],{"class":294},[280,461,310],{"class":294},[280,463,464],{"class":313},"23",[280,466,317],{"class":294},[280,468,320],{"class":294},[280,470,472,474,476],{"class":282,"line":471},13,[280,473,377],{"class":294},[280,475,381],{"class":380},[280,477,384],{"class":286},[201,479,480,482,483,486,487,489,490,493,494,497],{},[205,481,219],{}," names the kind of forge, such as ",[205,484,485],{},"'github'",". ",[205,488,223],{}," is the host of one deployment, such as ",[205,491,492],{},"'github.com'"," or ",[205,495,496],{},"'ghe.example.com'",". Two providers of the same forge differ by instance.",[499,500,502],"h3",{"id":501},"thread-kinds","Thread kinds",[201,504,505,506,508,509,512,513,512,515,512,518,493,521,524,525,528,529,531,532,535],{},"A thread is anything with a conversation. ",[205,507,261],{}," is one of ",[205,510,511],{},"issue",", ",[205,514,447],{},[205,516,517],{},"discussion",[205,519,520],{},"commit",[205,522,523],{},"other",". A GitLab merge request has ",[205,526,527],{},"kind: 'pull_request'",". A subject that has no shared kind, such as a check suite, is ",[205,530,523],{},", and ",[205,533,534],{},"typeRaw"," names it.",[499,537,539],{"id":538},"keys","Keys",[201,541,542,543,512,546,220,549,552,553,512,556,220,559,562],{},"Use a key when you need a map key or a database column. ",[205,544,545],{},"repoKey()",[205,547,548],{},"threadKey()",[205,550,551],{},"notificationKey()"," return a stable string. ",[205,554,555],{},"parseRepoKey()",[205,557,558],{},"parseThreadKey()",[205,560,561],{},"parseNotificationKey()"," read it back. A repository key uses the forge's own ID when there is one, so a rename or transfer keeps the key.",[201,564,565,220,568,571,572,266],{},[205,566,567],{},"repoSlug()",[205,569,570],{},"threadSlug()"," return the form people type, such as ",[205,573,574],{},"acme\u002Fwidgets#42",[210,576,578],{"id":577},"normalised-and-raw-values","Normalised and raw values",[201,580,231,581,584,585,588,589,512,592,512,595,493,598,601,602,512,605,512,608,611,612,615,616,512,619,220,622,266],{},[205,582,583],{},"Thread"," has a ",[205,586,587],{},"state"," of ",[205,590,591],{},"open",[205,593,594],{},"closed",[205,596,597],{},"merged",[205,599,600],{},"unknown",". It also has ",[205,603,604],{},"labels",[205,606,607],{},"assignees",[205,609,610],{},"author"," and timestamps as ",[205,613,614],{},"Date"," objects. A pull request also has ",[205,617,618],{},"branches",[205,620,621],{},"checks",[205,623,624],{},"stack",[201,626,627,628,630,631,634,635,638,639,642,643,638,646,649,650,653],{},"Where a forge has a value that the model can't express, the model keeps both sides. A thread's ",[205,629,587],{}," has a matching ",[205,632,633],{},"stateRaw",", a notification's ",[205,636,637],{},"reason"," has ",[205,640,641],{},"reasonRaw",", and an event's ",[205,644,645],{},"action",[205,647,648],{},"actionRaw",". The ",[205,651,652],{},"raw"," field holds the unnormalised forge payload. Use the raw fields when you need forge-specific detail, and the normalised ones everywhere else.",[210,655,657],{"id":656},"optional-fields","Optional fields",[201,659,660,661,664,665,668,669,672,673,675],{},"A field is optional when some forges don't report it. On a forge that doesn't return a comment count, ",[205,662,663],{},"thread.commentCount"," is ",[205,666,667],{},"undefined"," rather than ",[205,670,671],{},"0",", so check for ",[205,674,667],{}," before you use an optional field.",[210,677,679],{"id":678},"warnings","Warnings",[201,681,682,683,685,686,266],{},"A result can carry ",[205,684,678],{},". A warning describes a problem that didn't fail the call, such as a filter the forge ignored. See ",[687,688,50],"a",{"href":689},"\u002Fguides\u002Ferrors#warnings",[210,691,693],{"id":692},"next-steps","Next steps",[226,695,696,701,706],{},[229,697,698,700],{},[687,699,76],{"href":77}," explains how support differs by forge.",[229,702,703,705],{},[687,704,84],{"href":85}," describes webhook deliveries and live streams.",[229,707,708,709,712],{},"The ",[687,710,711],{"href":141},"provider API"," lists every namespace and method.",[714,715,716],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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);}",{"title":276,"searchDepth":301,"depth":301,"links":718},[719,723,724,725,726],{"id":212,"depth":301,"text":213,"children":720},[721,722],{"id":501,"depth":323,"text":502},{"id":538,"depth":323,"text":539},{"id":577,"depth":301,"text":578},{"id":656,"depth":301,"text":657},{"id":678,"depth":301,"text":679},{"id":692,"depth":301,"text":693},"How refs, threads, notifications and events describe the same things on every forge.","md",null,{"icon":731},"i-lucide-shapes",true,{"title":72,"description":727},"F3eZD3GjMT2QFF6OmzFo28VT-CxaG50d_jiyJ2iVkUs",[736,738],{"title":62,"path":63,"stem":64,"description":737,"children":-1},"Run your code against an in-memory forge or recorded responses.",{"title":76,"path":77,"stem":78,"description":739,"children":-1},"How a provider declares which operations it supports, and how CI checks those claims.",1791294003829]