[{"data":1,"prerenderedAt":418},["ShallowReactive",2],{"navigation_docs":3,"-concepts-capabilities":199,"-concepts-capabilities-surround":413},[4,23,65,87,133,159,177],{"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,155],{"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},"Environment variables","\u002Freference\u002Fenvironment-variables","5.reference\u002F4.environment-variables",{"title":156,"path":157,"stem":158},"JSON Schemas","\u002Freference\u002Fjson-schemas","5.reference\u002F5.json-schemas",{"title":160,"icon":161,"path":162,"stem":163,"children":164,"page":22},"Examples","i-lucide-boxes","\u002Fexamples","6.examples",[165,169,173],{"title":166,"path":167,"stem":168},"Inbox CLI","\u002Fexamples\u002Finbox-cli","6.examples\u002F1.inbox-cli",{"title":170,"path":171,"stem":172},"Label bot","\u002Fexamples\u002Flabel-bot","6.examples\u002F2.label-bot",{"title":174,"path":175,"stem":176},"Release digest","\u002Fexamples\u002Frelease-digest","6.examples\u002F3.release-digest",{"title":178,"icon":179,"path":180,"stem":181,"children":182,"page":22},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","7.contributing",[183,187,191,195],{"title":184,"path":185,"stem":186},"Contribution guide","\u002Fcontributing\u002Fguidelines","7.contributing\u002F1.guidelines",{"title":188,"path":189,"stem":190},"Write a provider","\u002Fcontributing\u002Fwrite-a-provider","7.contributing\u002F2.write-a-provider",{"title":192,"path":193,"stem":194},"Record fixtures","\u002Fcontributing\u002Frecord-fixtures","7.contributing\u002F3.record-fixtures",{"title":196,"path":197,"stem":198},"Contributors","\u002Fcontributing\u002Fcontributors","7.contributing\u002F4.contributors",{"id":200,"title":76,"body":201,"description":405,"extension":406,"links":407,"meta":408,"navigation":410,"path":77,"seo":411,"stem":78,"__hash__":412},"docs\u002F3.concepts\u002F2.capabilities.md",{"type":202,"value":203,"toc":395},"minimark",[204,213,218,221,284,294,298,305,309,317,321,331,335,360,368,372],[205,206,207,208,212],"p",{},"Forges don't offer the same features: Bitbucket has no releases, and Tangled has no checks. Every provider declares what it supports in ",[209,210,211],"code",{},"provider.capabilities",".",[214,215,217],"h2",{"id":216},"support-levels","Support levels",[205,219,220],{},"Each entry has one of four values:",[222,223,224,237],"table",{},[225,226,227],"thead",{},[228,229,230,234],"tr",{},[231,232,233],"th",{},"Value",[231,235,236],{},"Meaning",[238,239,240,251,261,271],"tbody",{},[228,241,242,248],{},[243,244,245],"td",{},[209,246,247],{},"true",[243,249,250],{},"Native and verified. A test exercises the operation.",[228,252,253,258],{},[243,254,255],{},[209,256,257],{},"'experimental'",[243,259,260],{},"Native, but not verified against a recording of the live forge, or built on an API that the forge marks unstable.",[228,262,263,268],{},[243,264,265],{},[209,266,267],{},"'emulated'",[243,269,270],{},"Composed from other calls, so its behaviour can differ from a native operation.",[228,272,273,278],{},[243,274,275],{},[209,276,277],{},"false",[243,279,280,281,212],{},"Not available. Calling it rejects with ",[209,282,283],{},"UnsupportedOperationError",[205,285,286,287,290,291,293],{},"For example, Forgejo has no done state for notifications. Its ",[209,288,289],{},"notifications.markDone"," is ",[209,292,267],{},": it marks the notification read and unsubscribes from the thread.",[214,295,297],{"id":296},"per-thread-kind","Per thread kind",[205,299,300,301,304],{},"Support can differ by thread kind. GitHub closes issues, pull requests and discussions, while Cursor Origin has pull requests only. Those entries are objects keyed by kind, and ",[209,302,303],{},"can()"," takes the kind as a second argument.",[214,306,308],{"id":307},"experimental-providers","Experimental providers",[205,310,311,290,314,316],{},[209,312,313],{},"capabilities.experimental",[209,315,247],{}," when the provider as a whole is experimental: its tests use hand-written fixtures only, or the forge's API is unstable. Gitee, Azure DevOps, Cursor Origin and pushin.eu are experimental providers.",[214,318,320],{"id":319},"version-dependent-support","Version-dependent support",[205,322,323,324,327,328,212],{},"Some capabilities depend on the instance version. GitHub Enterprise Server supports marking notifications done from version 3.13. The provider computes capabilities without a network request, so pass ",[209,325,326],{},"instanceVersion"," if you know it, or call ",[209,329,330],{},"refreshCapabilities()",[214,332,334],{"id":333},"how-ci-enforces-it","How CI enforces it",[205,336,337,338,340,341,344,345,348,349,352,353,356,357,359],{},"A provider can declare ",[209,339,247],{}," only for an operation that a test calls. During ",[209,342,343],{},"vitest run",", ",[209,346,347],{},"test\u002Fsetup\u002Fverbs.ts"," records each verb a test calls. ",[209,350,351],{},"pnpm test:capabilities"," then runs ",[209,354,355],{},"scripts\u002Fcheck-capabilities.ts",", which fails for any capability that a provider declares ",[209,358,247],{}," and no test called.",[205,361,362,363,367],{},"Provider pages and the ",[364,365,366],"a",{"href":145},"capability matrix"," are generated from the same declarations, and a unit test fails when they're out of date.",[214,369,371],{"id":370},"using-capabilities","Using capabilities",[373,374,375,385,388],"ul",{},[376,377,378,379,384],"li",{},"Call ",[364,380,381],{"href":47},[209,382,383],{},"provider.can()"," before an operation that a forge might lack.",[376,386,387],{},"Use the matrix to decide which forges to support.",[376,389,390,391,394],{},"Read the ",[209,392,393],{},"limits"," entry for the text limits of a forge, such as the maximum comment length.",{"title":396,"searchDepth":397,"depth":397,"links":398},"",2,[399,400,401,402,403,404],{"id":216,"depth":397,"text":217},{"id":296,"depth":397,"text":297},{"id":307,"depth":397,"text":308},{"id":319,"depth":397,"text":320},{"id":333,"depth":397,"text":334},{"id":370,"depth":397,"text":371},"How a provider declares which operations it supports, and how CI checks those claims.","md",null,{"icon":409},"i-lucide-list-checks",true,{"title":76,"description":405},"yiGGldkViv5m5HpscXtFU5Xghw8jyHTgusf_iN1FYfg",[414,416],{"title":72,"path":73,"stem":74,"description":415,"children":-1},"How refs, threads, notifications and events describe the same things on every forge.",{"title":80,"path":81,"stem":82,"description":417,"children":-1},"How provider functions, factories and Lite variants fit together.",1791296689727]