forges 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/LICENCE +21 -0
  2. package/README.md +72 -0
  3. package/dist/azure-devops/index.d.mts +2 -0
  4. package/dist/azure-devops/index.mjs +1 -0
  5. package/dist/azure-devops-DwQvL4TV.mjs +1355 -0
  6. package/dist/bitbucket/index.d.mts +2 -0
  7. package/dist/bitbucket/index.mjs +1 -0
  8. package/dist/bitbucket-CpcfJlYi.mjs +1171 -0
  9. package/dist/crypto-CQNEyYHD.mjs +156 -0
  10. package/dist/cursor-origin/index.d.mts +2 -0
  11. package/dist/cursor-origin/index.mjs +1 -0
  12. package/dist/cursor-origin-BhqYx2oW.mjs +980 -0
  13. package/dist/define-B2_4ob2i.d.mts +307 -0
  14. package/dist/define-D3yEXtKK.mjs +2276 -0
  15. package/dist/env.d.mts +46 -0
  16. package/dist/env.mjs +283 -0
  17. package/dist/fake/index.d.mts +227 -0
  18. package/dist/fake/index.mjs +1001 -0
  19. package/dist/fetch-D4pSRvvA.d.mts +1723 -0
  20. package/dist/forgejo/index.d.mts +2 -0
  21. package/dist/forgejo/index.mjs +1 -0
  22. package/dist/forgejo-BCefbHUN.mjs +2005 -0
  23. package/dist/gitea/index.d.mts +2 -0
  24. package/dist/gitea/index.mjs +22 -0
  25. package/dist/gitee/index.d.mts +2 -0
  26. package/dist/gitee/index.mjs +1 -0
  27. package/dist/gitee-CA-f7Rs8.mjs +1272 -0
  28. package/dist/github/index.d.mts +2 -0
  29. package/dist/github/index.mjs +1 -0
  30. package/dist/github-B0umL8_f.mjs +3259 -0
  31. package/dist/gitlab/index.d.mts +2 -0
  32. package/dist/gitlab/index.mjs +1 -0
  33. package/dist/gitlab-Bsr__Z0C.mjs +2378 -0
  34. package/dist/graphql-D7uGzZTf.mjs +366 -0
  35. package/dist/index-BQ6VS31s.d.mts +32 -0
  36. package/dist/index-C-jz9Mo3.d.mts +16 -0
  37. package/dist/index-C4fYzmK3.d.mts +102 -0
  38. package/dist/index-CQiIX4SH.d.mts +27 -0
  39. package/dist/index-CTj5gQzl.d.mts +35 -0
  40. package/dist/index-CliBWzOF.d.mts +23 -0
  41. package/dist/index-Cz_y-t3d.d.mts +36 -0
  42. package/dist/index-DEt25E1w.d.mts +77 -0
  43. package/dist/index-DIuS0EOy.d.mts +43 -0
  44. package/dist/index-uSpsMCrC.d.mts +26 -0
  45. package/dist/index.d.mts +41 -0
  46. package/dist/index.mjs +13 -0
  47. package/dist/kit.d.mts +183 -0
  48. package/dist/kit.mjs +4 -0
  49. package/dist/provider-CoZ7cCxp.d.mts +1439 -0
  50. package/dist/provider-Ed1YhkQN.mjs +169 -0
  51. package/dist/pushin/index.d.mts +2 -0
  52. package/dist/pushin/index.mjs +1 -0
  53. package/dist/pushin-CkxgJ2cU.mjs +343 -0
  54. package/dist/schema/Actor.json +96 -0
  55. package/dist/schema/AlertSupport.json +49 -0
  56. package/dist/schema/AuthKind.json +15 -0
  57. package/dist/schema/Branch.json +31 -0
  58. package/dist/schema/ChangedFile.json +58 -0
  59. package/dist/schema/Check.json +169 -0
  60. package/dist/schema/CheckRef.json +114 -0
  61. package/dist/schema/CheckState.json +14 -0
  62. package/dist/schema/ChecksSummary.json +34 -0
  63. package/dist/schema/CiJob.json +186 -0
  64. package/dist/schema/CiJobRef.json +132 -0
  65. package/dist/schema/CiRun.json +234 -0
  66. package/dist/schema/CiRunRef.json +103 -0
  67. package/dist/schema/CodeFragment.json +19 -0
  68. package/dist/schema/CodeMatch.json +128 -0
  69. package/dist/schema/Collaborator.json +169 -0
  70. package/dist/schema/Comment.json +336 -0
  71. package/dist/schema/CommentRef.json +158 -0
  72. package/dist/schema/Commit.json +307 -0
  73. package/dist/schema/CommitRef.json +104 -0
  74. package/dist/schema/CommitSignature.json +118 -0
  75. package/dist/schema/Comparison.json +355 -0
  76. package/dist/schema/Cursor.json +21 -0
  77. package/dist/schema/EventAction.json +33 -0
  78. package/dist/schema/EventDetail.json +649 -0
  79. package/dist/schema/EventKind.json +26 -0
  80. package/dist/schema/FileContent.json +73 -0
  81. package/dist/schema/FileStatus.json +15 -0
  82. package/dist/schema/ForgeCapabilities.json +737 -0
  83. package/dist/schema/ForgeEvent.json +789 -0
  84. package/dist/schema/ForgeInstance.json +7 -0
  85. package/dist/schema/ForgeKind.json +32 -0
  86. package/dist/schema/ForgeWarning.json +49 -0
  87. package/dist/schema/ForgeWarningCode.json +7 -0
  88. package/dist/schema/GetManyResult.json +699 -0
  89. package/dist/schema/Installation.json +131 -0
  90. package/dist/schema/InstallationToken.json +31 -0
  91. package/dist/schema/KnownForgeKind.json +19 -0
  92. package/dist/schema/Label.json +22 -0
  93. package/dist/schema/MergeMethod.json +14 -0
  94. package/dist/schema/Milestone.json +40 -0
  95. package/dist/schema/Notification.json +498 -0
  96. package/dist/schema/NotificationReason.json +28 -0
  97. package/dist/schema/NotificationRef.json +60 -0
  98. package/dist/schema/NotificationSubject.json +376 -0
  99. package/dist/schema/PerKind.json +49 -0
  100. package/dist/schema/PullBranches.json +125 -0
  101. package/dist/schema/PushCommit.json +24 -0
  102. package/dist/schema/Reaction.json +148 -0
  103. package/dist/schema/ReactionContent.json +17 -0
  104. package/dist/schema/ReactionSummary.json +70 -0
  105. package/dist/schema/Release.json +286 -0
  106. package/dist/schema/ReleaseAsset.json +169 -0
  107. package/dist/schema/ReleaseAssetRef.json +138 -0
  108. package/dist/schema/ReleaseRef.json +107 -0
  109. package/dist/schema/Repo.json +354 -0
  110. package/dist/schema/RepoFeatures.json +35 -0
  111. package/dist/schema/RepoPermissions.json +35 -0
  112. package/dist/schema/RepoRef.json +77 -0
  113. package/dist/schema/RepoRole.json +15 -0
  114. package/dist/schema/RepoVisibility.json +12 -0
  115. package/dist/schema/Review.json +371 -0
  116. package/dist/schema/ReviewComment.json +280 -0
  117. package/dist/schema/ReviewCommentInput.json +34 -0
  118. package/dist/schema/ReviewRef.json +158 -0
  119. package/dist/schema/ReviewState.json +15 -0
  120. package/dist/schema/Reviewer.json +133 -0
  121. package/dist/schema/SecurityAlert.json +219 -0
  122. package/dist/schema/SecurityAlertKind.json +14 -0
  123. package/dist/schema/SecurityAlertRef.json +122 -0
  124. package/dist/schema/SecuritySeverity.json +14 -0
  125. package/dist/schema/SourceKind.json +12 -0
  126. package/dist/schema/SubscriptionState.json +12 -0
  127. package/dist/schema/Support.json +23 -0
  128. package/dist/schema/Tag.json +25 -0
  129. package/dist/schema/TextLimits.json +18 -0
  130. package/dist/schema/Thread.json +653 -0
  131. package/dist/schema/ThreadKind.json +14 -0
  132. package/dist/schema/ThreadRef.json +131 -0
  133. package/dist/schema/ThreadStack.json +146 -0
  134. package/dist/schema/ThreadState.json +13 -0
  135. package/dist/schema/TreeEntry.json +46 -0
  136. package/dist/schema/TreeEntryType.json +13 -0
  137. package/dist/schema/UpsertCommentResult.json +355 -0
  138. package/dist/schema/User.json +123 -0
  139. package/dist/schema/Webhook.json +188 -0
  140. package/dist/schema/WebhookDeliveryRecord.json +173 -0
  141. package/dist/schema/WebhookDeliveryRef.json +135 -0
  142. package/dist/schema/WebhookRef.json +105 -0
  143. package/dist/schema/index.d.mts +4 -0
  144. package/dist/schema/index.mjs +3219 -0
  145. package/dist/tangled/index.d.mts +2 -0
  146. package/dist/tangled/index.mjs +1 -0
  147. package/dist/tangled-ChdPmiv-.mjs +1570 -0
  148. package/dist/testing/index.d.mts +123 -0
  149. package/dist/testing/index.mjs +242 -0
  150. package/dist/webhooks-rn9-8lxT.mjs +70 -0
  151. package/package.json +115 -3
  152. package/dist/.gitkeep +0 -0
@@ -0,0 +1,3219 @@
1
+ //#endregion
2
+ //#region src/schema/index.ts
3
+ /** A JSON Schema (draft-07) for each public model type, keyed by type name. References point at `#/components/schemas/<Type>`. */
4
+ const schemas = {
5
+ Actor: {
6
+ "type": "object",
7
+ "properties": {
8
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
9
+ "instance": {
10
+ "$ref": "#/components/schemas/ForgeInstance",
11
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
12
+ },
13
+ "login": { "type": "string" },
14
+ "id": { "type": "string" },
15
+ "name": { "type": "string" },
16
+ "avatarUrl": { "type": "string" },
17
+ "url": { "type": "string" },
18
+ "typeRaw": {
19
+ "type": "string",
20
+ "description": "Forge-reported account type, retained verbatim for callers that classify further."
21
+ },
22
+ "isBotHint": {
23
+ "type": "boolean",
24
+ "description": "Hint derived from forge metadata that the actor is automation. Callers own the classification policy."
25
+ },
26
+ "app": {
27
+ "type": "object",
28
+ "properties": {
29
+ "slug": { "type": "string" },
30
+ "id": { "type": "string" }
31
+ },
32
+ "required": ["slug"],
33
+ "description": "The app behind a bot account, where the forge ties one to it (GitHub Apps' `slug[bot]` users)."
34
+ }
35
+ },
36
+ "required": [
37
+ "forge",
38
+ "id",
39
+ "instance",
40
+ "isBotHint",
41
+ "login"
42
+ ],
43
+ "description": "An account: a user, an organisation or a bot.",
44
+ "x-forges-type": "Actor"
45
+ },
46
+ AlertSupport: {
47
+ "type": "object",
48
+ "properties": {
49
+ "dependency": { "$ref": "#/components/schemas/Support" },
50
+ "code_scanning": { "$ref": "#/components/schemas/Support" },
51
+ "secret": { "$ref": "#/components/schemas/Support" },
52
+ "advisory": { "$ref": "#/components/schemas/Support" }
53
+ },
54
+ "required": [
55
+ "dependency",
56
+ "code_scanning",
57
+ "secret",
58
+ "advisory"
59
+ ],
60
+ "description": "Support per security alert kind.",
61
+ "x-forges-type": "AlertSupport"
62
+ },
63
+ AuthKind: {
64
+ "type": "string",
65
+ "enum": [
66
+ "token",
67
+ "basic",
68
+ "app",
69
+ "app_password",
70
+ "oauth",
71
+ "anonymous"
72
+ ],
73
+ "description": "The credential types that a provider can accept.",
74
+ "x-forges-type": "AuthKind"
75
+ },
76
+ Branch: {
77
+ "type": "object",
78
+ "properties": {
79
+ "name": { "type": "string" },
80
+ "sha": {
81
+ "type": "string",
82
+ "description": "The commit that the branch points at."
83
+ },
84
+ "isDefault": { "type": "boolean" },
85
+ "isProtected": { "type": "boolean" },
86
+ "url": { "type": "string" },
87
+ "raw": {}
88
+ },
89
+ "required": [
90
+ "name",
91
+ "sha",
92
+ "raw"
93
+ ],
94
+ "description": "A branch of a repository.",
95
+ "x-forges-type": "Branch"
96
+ },
97
+ ChangedFile: {
98
+ "type": "object",
99
+ "properties": {
100
+ "path": { "type": "string" },
101
+ "previousPath": {
102
+ "type": "string",
103
+ "description": "Path before a rename or copy."
104
+ },
105
+ "status": { "$ref": "#/components/schemas/FileStatus" },
106
+ "statusRaw": { "type": "string" },
107
+ "additions": { "type": "number" },
108
+ "deletions": { "type": "number" },
109
+ "patch": {
110
+ "type": "string",
111
+ "description": "Unified diff for the file, where the forge returns one inline."
112
+ },
113
+ "sha": {
114
+ "type": "string",
115
+ "description": "Blob sha after the change."
116
+ },
117
+ "isBinary": {
118
+ "type": "boolean",
119
+ "description": "The file is binary, so it has no patch."
120
+ }
121
+ },
122
+ "required": ["path", "status"],
123
+ "description": "A file that a commit or pull request changed.",
124
+ "x-forges-type": "ChangedFile"
125
+ },
126
+ Check: {
127
+ "type": "object",
128
+ "properties": {
129
+ "ref": { "$ref": "#/components/schemas/CheckRef" },
130
+ "name": { "type": "string" },
131
+ "state": { "$ref": "#/components/schemas/CheckState" },
132
+ "stateRaw": {
133
+ "type": "string",
134
+ "description": "Forge-native status, for example `in_progress` or `running`."
135
+ },
136
+ "conclusionRaw": {
137
+ "type": "string",
138
+ "description": "Forge-native conclusion, where the forge reports one apart from the status."
139
+ },
140
+ "url": { "type": "string" },
141
+ "startedAt": {
142
+ "type": "string",
143
+ "format": "date-time"
144
+ },
145
+ "completedAt": {
146
+ "type": "string",
147
+ "format": "date-time"
148
+ },
149
+ "raw": {}
150
+ },
151
+ "required": [
152
+ "ref",
153
+ "name",
154
+ "state",
155
+ "stateRaw",
156
+ "raw"
157
+ ],
158
+ "description": "One check on a commit: a check run, a commit status, a job or a policy evaluation.",
159
+ "x-forges-type": "Check"
160
+ },
161
+ CheckRef: {
162
+ "type": "object",
163
+ "properties": {
164
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
165
+ "instance": {
166
+ "$ref": "#/components/schemas/ForgeInstance",
167
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
168
+ },
169
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
170
+ "id": { "type": "string" },
171
+ "type": {
172
+ "type": "string",
173
+ "enum": [
174
+ "check_run",
175
+ "status",
176
+ "job",
177
+ "policy"
178
+ ],
179
+ "description": "What the id addresses: a check run, a commit status, a CI job, or a branch policy evaluation."
180
+ }
181
+ },
182
+ "required": [
183
+ "forge",
184
+ "id",
185
+ "instance",
186
+ "repo",
187
+ "type"
188
+ ],
189
+ "description": "One check run, commit status or CI job.",
190
+ "x-forges-type": "CheckRef"
191
+ },
192
+ CheckState: {
193
+ "type": "string",
194
+ "enum": [
195
+ "pending",
196
+ "success",
197
+ "failure",
198
+ "neutral",
199
+ "unknown"
200
+ ],
201
+ "description": "`neutral` covers skipped and informational results, which neither pass nor fail.",
202
+ "x-forges-type": "CheckState"
203
+ },
204
+ ChecksSummary: {
205
+ "type": "object",
206
+ "properties": {
207
+ "state": {
208
+ "type": "string",
209
+ "enum": [
210
+ "pending",
211
+ "success",
212
+ "failure",
213
+ "unknown"
214
+ ]
215
+ },
216
+ "stateRaw": { "type": "string" },
217
+ "total": {
218
+ "type": "number",
219
+ "description": "Absent when the forge reports only a combined state."
220
+ },
221
+ "failed": { "type": "number" },
222
+ "url": { "type": "string" }
223
+ },
224
+ "required": ["state"],
225
+ "description": "Combined state of the checks on a pull request's head commit. `failure` when any check failed, else `pending` while any runs, else `success`.",
226
+ "x-forges-type": "ChecksSummary"
227
+ },
228
+ CiJob: {
229
+ "type": "object",
230
+ "properties": {
231
+ "ref": { "$ref": "#/components/schemas/CiJobRef" },
232
+ "name": { "type": "string" },
233
+ "state": { "$ref": "#/components/schemas/CheckState" },
234
+ "stateRaw": { "type": "string" },
235
+ "stage": {
236
+ "type": "string",
237
+ "description": "Stage or group the job belongs to, where the forge has one."
238
+ },
239
+ "url": { "type": "string" },
240
+ "startedAt": {
241
+ "type": "string",
242
+ "format": "date-time"
243
+ },
244
+ "completedAt": {
245
+ "type": "string",
246
+ "format": "date-time"
247
+ },
248
+ "raw": {}
249
+ },
250
+ "required": [
251
+ "ref",
252
+ "name",
253
+ "state",
254
+ "stateRaw",
255
+ "raw"
256
+ ],
257
+ "description": "One job of a CI run.",
258
+ "x-forges-type": "CiJob"
259
+ },
260
+ CiJobRef: {
261
+ "type": "object",
262
+ "properties": {
263
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
264
+ "instance": {
265
+ "$ref": "#/components/schemas/ForgeInstance",
266
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
267
+ },
268
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
269
+ "id": { "type": "string" },
270
+ "run": { "$ref": "#/components/schemas/CiRunRef" }
271
+ },
272
+ "required": [
273
+ "forge",
274
+ "id",
275
+ "instance",
276
+ "repo"
277
+ ],
278
+ "description": "One job inside a run. `run` is absent when the job was addressed on its own.",
279
+ "x-forges-type": "CiJobRef"
280
+ },
281
+ CiRun: {
282
+ "type": "object",
283
+ "properties": {
284
+ "ref": { "$ref": "#/components/schemas/CiRunRef" },
285
+ "name": { "type": "string" },
286
+ "state": { "$ref": "#/components/schemas/CheckState" },
287
+ "stateRaw": { "type": "string" },
288
+ "number": {
289
+ "type": "string",
290
+ "description": "Per-repo run number, where the forge has one."
291
+ },
292
+ "eventRaw": {
293
+ "type": "string",
294
+ "description": "What triggered the run, as the forge names it."
295
+ },
296
+ "branch": { "type": "string" },
297
+ "sha": {
298
+ "type": "string",
299
+ "description": "The commit that the run ran on."
300
+ },
301
+ "url": { "type": "string" },
302
+ "actor": { "$ref": "#/components/schemas/Actor" },
303
+ "createdAt": {
304
+ "type": "string",
305
+ "format": "date-time"
306
+ },
307
+ "startedAt": {
308
+ "type": "string",
309
+ "format": "date-time"
310
+ },
311
+ "completedAt": {
312
+ "type": "string",
313
+ "format": "date-time"
314
+ },
315
+ "raw": {}
316
+ },
317
+ "required": [
318
+ "ref",
319
+ "name",
320
+ "state",
321
+ "stateRaw",
322
+ "raw"
323
+ ],
324
+ "description": "A CI run, such as a workflow run or a pipeline.",
325
+ "x-forges-type": "CiRun"
326
+ },
327
+ CiRunRef: {
328
+ "type": "object",
329
+ "properties": {
330
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
331
+ "instance": {
332
+ "$ref": "#/components/schemas/ForgeInstance",
333
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
334
+ },
335
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
336
+ "id": { "type": "string" }
337
+ },
338
+ "required": [
339
+ "forge",
340
+ "id",
341
+ "instance",
342
+ "repo"
343
+ ],
344
+ "description": "A CI run: a workflow run, a pipeline, or a build.",
345
+ "x-forges-type": "CiRunRef"
346
+ },
347
+ CodeFragment: {
348
+ "type": "object",
349
+ "properties": {
350
+ "text": { "type": "string" },
351
+ "line": {
352
+ "type": "number",
353
+ "description": "The line the excerpt starts on, where the forge reports it."
354
+ }
355
+ },
356
+ "required": ["text"],
357
+ "description": "An excerpt of a file that matched a code search.",
358
+ "x-forges-type": "CodeFragment"
359
+ },
360
+ CodeMatch: {
361
+ "type": "object",
362
+ "properties": {
363
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
364
+ "path": { "type": "string" },
365
+ "ref": {
366
+ "type": "string",
367
+ "description": "The branch, tag or sha the forge searched, where it reports one."
368
+ },
369
+ "fragments": {
370
+ "type": "array",
371
+ "items": { "$ref": "#/components/schemas/CodeFragment" },
372
+ "description": "The excerpts of the file that matched."
373
+ },
374
+ "url": { "type": "string" },
375
+ "raw": {}
376
+ },
377
+ "required": [
378
+ "repo",
379
+ "path",
380
+ "fragments",
381
+ "raw"
382
+ ],
383
+ "description": "A file that a code search found. A file whose excerpts span two pages comes back on both.",
384
+ "x-forges-type": "CodeMatch"
385
+ },
386
+ Collaborator: {
387
+ "type": "object",
388
+ "properties": {
389
+ "actor": { "$ref": "#/components/schemas/Actor" },
390
+ "role": { "$ref": "#/components/schemas/RepoRole" },
391
+ "roleRaw": {
392
+ "type": "string",
393
+ "description": "Forge-native role name, for example `maintainer` or `reporter`."
394
+ },
395
+ "permissions": {
396
+ "$ref": "#/components/schemas/RepoPermissions",
397
+ "description": "What the role allows."
398
+ },
399
+ "raw": {}
400
+ },
401
+ "required": [
402
+ "actor",
403
+ "role",
404
+ "raw"
405
+ ],
406
+ "description": "An account with a role on a repository.",
407
+ "x-forges-type": "Collaborator"
408
+ },
409
+ Comment: {
410
+ "type": "object",
411
+ "properties": {
412
+ "ref": { "$ref": "#/components/schemas/CommentRef" },
413
+ "body": { "type": "string" },
414
+ "author": { "$ref": "#/components/schemas/Actor" },
415
+ "createdAt": {
416
+ "type": "string",
417
+ "format": "date-time"
418
+ },
419
+ "updatedAt": {
420
+ "type": "string",
421
+ "format": "date-time"
422
+ },
423
+ "url": { "type": "string" },
424
+ "reactions": { "$ref": "#/components/schemas/ReactionSummary" },
425
+ "thread": {
426
+ "type": "object",
427
+ "properties": {
428
+ "id": { "type": "string" },
429
+ "resolved": { "type": "boolean" }
430
+ },
431
+ "required": ["id", "resolved"],
432
+ "description": "The resolvable conversation the comment belongs to, where the forge has one; `resolveReviewThread()` takes its id."
433
+ },
434
+ "raw": {}
435
+ },
436
+ "required": [
437
+ "ref",
438
+ "body",
439
+ "raw"
440
+ ],
441
+ "description": "A comment on a thread.",
442
+ "x-forges-type": "Comment"
443
+ },
444
+ CommentRef: {
445
+ "type": "object",
446
+ "properties": {
447
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
448
+ "instance": {
449
+ "$ref": "#/components/schemas/ForgeInstance",
450
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
451
+ },
452
+ "thread": { "$ref": "#/components/schemas/ThreadRef" },
453
+ "id": {
454
+ "type": "string",
455
+ "description": "Forge-native comment id; an AT-URI on Tangled."
456
+ }
457
+ },
458
+ "required": [
459
+ "forge",
460
+ "id",
461
+ "instance",
462
+ "thread"
463
+ ],
464
+ "description": "Reference to a comment on a thread.",
465
+ "x-forges-type": "CommentRef"
466
+ },
467
+ Commit: {
468
+ "type": "object",
469
+ "properties": {
470
+ "ref": { "$ref": "#/components/schemas/CommitRef" },
471
+ "sha": {
472
+ "type": "string",
473
+ "description": "The full sha."
474
+ },
475
+ "message": { "type": "string" },
476
+ "author": {
477
+ "$ref": "#/components/schemas/CommitSignature",
478
+ "description": "Who wrote the change."
479
+ },
480
+ "committer": {
481
+ "$ref": "#/components/schemas/CommitSignature",
482
+ "description": "Who recorded the change."
483
+ },
484
+ "parents": {
485
+ "type": "array",
486
+ "items": { "type": "string" }
487
+ },
488
+ "url": { "type": "string" },
489
+ "stats": {
490
+ "type": "object",
491
+ "properties": {
492
+ "additions": { "type": "number" },
493
+ "deletions": { "type": "number" },
494
+ "total": { "type": "number" }
495
+ },
496
+ "required": ["additions", "deletions"]
497
+ },
498
+ "files": {
499
+ "type": "array",
500
+ "items": { "$ref": "#/components/schemas/ChangedFile" },
501
+ "description": "Present on `contents.commit`; absent from listings."
502
+ },
503
+ "raw": {}
504
+ },
505
+ "required": [
506
+ "ref",
507
+ "sha",
508
+ "message",
509
+ "parents",
510
+ "raw"
511
+ ],
512
+ "description": "A commit.",
513
+ "x-forges-type": "Commit"
514
+ },
515
+ CommitRef: {
516
+ "type": "object",
517
+ "properties": {
518
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
519
+ "instance": {
520
+ "$ref": "#/components/schemas/ForgeInstance",
521
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
522
+ },
523
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
524
+ "sha": {
525
+ "type": "string",
526
+ "description": "The full sha of the commit."
527
+ }
528
+ },
529
+ "required": [
530
+ "forge",
531
+ "instance",
532
+ "repo",
533
+ "sha"
534
+ ],
535
+ "description": "A commit addressed by its full sha.",
536
+ "x-forges-type": "CommitRef"
537
+ },
538
+ CommitSignature: {
539
+ "type": "object",
540
+ "properties": {
541
+ "actor": {
542
+ "$ref": "#/components/schemas/Actor",
543
+ "description": "The account, where the forge can match it."
544
+ },
545
+ "name": { "type": "string" },
546
+ "email": { "type": "string" },
547
+ "date": {
548
+ "type": "string",
549
+ "format": "date-time",
550
+ "description": "When the commit was authored or committed."
551
+ }
552
+ },
553
+ "description": "Git authorship, with the forge account behind it where the forge matched one.",
554
+ "x-forges-type": "CommitSignature"
555
+ },
556
+ Comparison: {
557
+ "type": "object",
558
+ "properties": {
559
+ "base": {
560
+ "type": "string",
561
+ "description": "The revision that the comparison starts from."
562
+ },
563
+ "head": {
564
+ "type": "string",
565
+ "description": "The revision that the comparison ends at."
566
+ },
567
+ "aheadBy": {
568
+ "type": "number",
569
+ "description": "The number of commits that `head` has and `base` lacks."
570
+ },
571
+ "behindBy": {
572
+ "type": "number",
573
+ "description": "The number of commits that `base` has and `head` lacks."
574
+ },
575
+ "commits": {
576
+ "type": "array",
577
+ "items": { "$ref": "#/components/schemas/Commit" },
578
+ "description": "The commits between the two revisions."
579
+ },
580
+ "files": {
581
+ "type": "array",
582
+ "items": { "$ref": "#/components/schemas/ChangedFile" }
583
+ },
584
+ "mergeBaseSha": {
585
+ "type": "string",
586
+ "description": "The merge base, where the forge reports it."
587
+ },
588
+ "raw": {}
589
+ },
590
+ "required": [
591
+ "base",
592
+ "head",
593
+ "commits",
594
+ "files",
595
+ "raw"
596
+ ],
597
+ "description": "The difference between two revisions.",
598
+ "x-forges-type": "Comparison"
599
+ },
600
+ Cursor: {
601
+ "type": "object",
602
+ "properties": {
603
+ "nextUrl": {
604
+ "type": "string",
605
+ "description": "Absolute URL of the next page, from a `Link` header or the body, on the requested origin."
606
+ },
607
+ "etag": {
608
+ "type": "string",
609
+ "description": "A validator for a conditional request."
610
+ },
611
+ "token": {
612
+ "type": "string",
613
+ "description": "Opaque forge-native cursor, for example a GraphQL `endCursor`."
614
+ }
615
+ },
616
+ "description": "Opaque-ish resumption token. Fields are optional because forges differ in what they support; callers should persist the whole object and hand it back.",
617
+ "x-forges-type": "Cursor"
618
+ },
619
+ EventAction: {
620
+ "type": "string",
621
+ "enum": [
622
+ "opened",
623
+ "closed",
624
+ "reopened",
625
+ "merged",
626
+ "edited",
627
+ "created",
628
+ "deleted",
629
+ "submitted",
630
+ "labelled",
631
+ "unlabelled",
632
+ "assigned",
633
+ "unassigned",
634
+ "review_requested",
635
+ "synchronised",
636
+ "ready_for_review",
637
+ "converted_to_draft",
638
+ "published",
639
+ "renamed",
640
+ "transferred",
641
+ "archived",
642
+ "unarchived",
643
+ "added",
644
+ "removed",
645
+ "other"
646
+ ],
647
+ "description": "What happened, independent of `kind`, so \"anything that closed\" is `action === 'closed'` whatever the subject.",
648
+ "x-forges-type": "EventAction"
649
+ },
650
+ EventDetail: {
651
+ "anyOf": [
652
+ {
653
+ "type": "object",
654
+ "properties": {
655
+ "type": {
656
+ "type": "string",
657
+ "const": "comment"
658
+ },
659
+ "comment": { "$ref": "#/components/schemas/CommentRef" },
660
+ "body": { "type": "string" }
661
+ },
662
+ "required": ["type"]
663
+ },
664
+ {
665
+ "type": "object",
666
+ "properties": {
667
+ "type": {
668
+ "type": "string",
669
+ "const": "review_comment"
670
+ },
671
+ "comment": { "$ref": "#/components/schemas/CommentRef" },
672
+ "body": { "type": "string" },
673
+ "path": { "type": "string" },
674
+ "line": { "type": "number" }
675
+ },
676
+ "required": ["type"]
677
+ },
678
+ {
679
+ "type": "object",
680
+ "properties": {
681
+ "type": {
682
+ "type": "string",
683
+ "const": "review"
684
+ },
685
+ "state": { "$ref": "#/components/schemas/ReviewState" },
686
+ "stateRaw": { "type": "string" },
687
+ "body": { "type": "string" }
688
+ },
689
+ "required": ["type", "state"]
690
+ },
691
+ {
692
+ "type": "object",
693
+ "properties": {
694
+ "type": {
695
+ "type": "string",
696
+ "const": "state_change"
697
+ },
698
+ "state": { "$ref": "#/components/schemas/ThreadState" },
699
+ "draft": { "type": "boolean" }
700
+ },
701
+ "required": ["type"]
702
+ },
703
+ {
704
+ "type": "object",
705
+ "properties": {
706
+ "type": {
707
+ "type": "string",
708
+ "const": "label"
709
+ },
710
+ "label": { "type": "string" }
711
+ },
712
+ "required": ["type", "label"]
713
+ },
714
+ {
715
+ "type": "object",
716
+ "properties": {
717
+ "type": {
718
+ "type": "string",
719
+ "const": "assignment"
720
+ },
721
+ "assignee": { "$ref": "#/components/schemas/Actor" }
722
+ },
723
+ "required": ["type"]
724
+ },
725
+ {
726
+ "type": "object",
727
+ "properties": {
728
+ "type": {
729
+ "type": "string",
730
+ "const": "push"
731
+ },
732
+ "ref": { "type": "string" },
733
+ "before": { "type": "string" },
734
+ "after": { "type": "string" },
735
+ "commitCount": { "type": "number" },
736
+ "forced": { "type": "boolean" },
737
+ "commits": {
738
+ "type": "array",
739
+ "items": { "$ref": "#/components/schemas/PushCommit" }
740
+ }
741
+ },
742
+ "required": [
743
+ "type",
744
+ "ref",
745
+ "commitCount",
746
+ "forced",
747
+ "commits"
748
+ ]
749
+ },
750
+ {
751
+ "type": "object",
752
+ "properties": {
753
+ "type": {
754
+ "type": "string",
755
+ "const": "ref"
756
+ },
757
+ "ref": { "type": "string" },
758
+ "refType": { "type": "string" }
759
+ },
760
+ "required": [
761
+ "type",
762
+ "ref",
763
+ "refType"
764
+ ]
765
+ },
766
+ {
767
+ "type": "object",
768
+ "properties": {
769
+ "type": {
770
+ "type": "string",
771
+ "const": "repo_renamed"
772
+ },
773
+ "from": { "type": "string" },
774
+ "to": { "type": "string" }
775
+ },
776
+ "required": [
777
+ "type",
778
+ "from",
779
+ "to"
780
+ ]
781
+ },
782
+ {
783
+ "type": "object",
784
+ "properties": {
785
+ "type": {
786
+ "type": "string",
787
+ "const": "repo_transferred"
788
+ },
789
+ "fromOwner": { "type": "string" },
790
+ "toOwner": { "type": "string" }
791
+ },
792
+ "required": ["type"]
793
+ },
794
+ {
795
+ "type": "object",
796
+ "properties": {
797
+ "type": {
798
+ "type": "string",
799
+ "const": "repo_archived"
800
+ },
801
+ "archived": { "type": "boolean" }
802
+ },
803
+ "required": ["type", "archived"]
804
+ },
805
+ {
806
+ "type": "object",
807
+ "properties": {
808
+ "type": {
809
+ "type": "string",
810
+ "const": "installation"
811
+ },
812
+ "actionRaw": { "type": "string" },
813
+ "installationId": { "type": "string" },
814
+ "added": {
815
+ "type": "array",
816
+ "items": { "$ref": "#/components/schemas/RepoRef" }
817
+ },
818
+ "removed": {
819
+ "type": "array",
820
+ "items": { "$ref": "#/components/schemas/RepoRef" }
821
+ }
822
+ },
823
+ "required": [
824
+ "type",
825
+ "actionRaw",
826
+ "added",
827
+ "removed"
828
+ ]
829
+ },
830
+ {
831
+ "type": "object",
832
+ "properties": {
833
+ "type": {
834
+ "type": "string",
835
+ "const": "membership"
836
+ },
837
+ "actionRaw": { "type": "string" },
838
+ "member": { "$ref": "#/components/schemas/Actor" }
839
+ },
840
+ "required": ["type", "actionRaw"]
841
+ },
842
+ {
843
+ "type": "object",
844
+ "properties": {
845
+ "type": {
846
+ "type": "string",
847
+ "const": "release"
848
+ },
849
+ "release": { "$ref": "#/components/schemas/ReleaseRef" },
850
+ "name": { "type": "string" }
851
+ },
852
+ "required": ["type", "release"]
853
+ },
854
+ {
855
+ "type": "object",
856
+ "properties": {
857
+ "type": {
858
+ "type": "string",
859
+ "const": "referenced"
860
+ },
861
+ "from": { "anyOf": [{ "$ref": "#/components/schemas/ThreadRef" }, { "$ref": "#/components/schemas/CommitRef" }] },
862
+ "fromRepo": { "$ref": "#/components/schemas/RepoRef" },
863
+ "text": { "type": "string" }
864
+ },
865
+ "required": ["type"]
866
+ }
867
+ ],
868
+ "description": "Typed detail for an event. Discriminated by `type`.",
869
+ "x-forges-type": "EventDetail"
870
+ },
871
+ EventKind: {
872
+ "type": "string",
873
+ "enum": [
874
+ "comment",
875
+ "review",
876
+ "review_comment",
877
+ "commit",
878
+ "label",
879
+ "state_change",
880
+ "assignment",
881
+ "mention",
882
+ "referenced",
883
+ "reaction",
884
+ "push",
885
+ "ref",
886
+ "repo",
887
+ "installation",
888
+ "membership",
889
+ "release",
890
+ "other"
891
+ ],
892
+ "description": "What an event is about.",
893
+ "x-forges-type": "EventKind"
894
+ },
895
+ FileContent: {
896
+ "anyOf": [{
897
+ "type": "object",
898
+ "properties": {
899
+ "encoding": {
900
+ "type": "string",
901
+ "const": "utf-8"
902
+ },
903
+ "content": { "type": "string" },
904
+ "path": {
905
+ "type": "string",
906
+ "description": "The path from the repository root."
907
+ },
908
+ "sha": {
909
+ "type": "string",
910
+ "description": "Blob sha, where the forge reports one."
911
+ },
912
+ "size": { "type": "number" },
913
+ "url": {
914
+ "type": "string",
915
+ "description": "Web page for the file at this ref, where the forge has one."
916
+ }
917
+ },
918
+ "required": [
919
+ "content",
920
+ "encoding",
921
+ "path"
922
+ ]
923
+ }, {
924
+ "type": "object",
925
+ "properties": {
926
+ "encoding": {
927
+ "type": "string",
928
+ "const": "binary"
929
+ },
930
+ "content": {
931
+ "description": "Bytes, as a `Uint8Array`. JSON cannot carry them.",
932
+ "x-forges-type": "Uint8Array"
933
+ },
934
+ "path": {
935
+ "type": "string",
936
+ "description": "The path from the repository root."
937
+ },
938
+ "sha": {
939
+ "type": "string",
940
+ "description": "Blob sha, where the forge reports one."
941
+ },
942
+ "size": { "type": "number" },
943
+ "url": {
944
+ "type": "string",
945
+ "description": "Web page for the file at this ref, where the forge has one."
946
+ }
947
+ },
948
+ "required": [
949
+ "content",
950
+ "encoding",
951
+ "path"
952
+ ]
953
+ }],
954
+ "description": "A file's contents. Narrow on `encoding` to get text or bytes.",
955
+ "x-forges-type": "FileContent"
956
+ },
957
+ FileStatus: {
958
+ "type": "string",
959
+ "enum": [
960
+ "added",
961
+ "modified",
962
+ "removed",
963
+ "renamed",
964
+ "copied",
965
+ "changed"
966
+ ],
967
+ "description": "How a commit or pull request changed a file.",
968
+ "x-forges-type": "FileStatus"
969
+ },
970
+ ForgeCapabilities: {
971
+ "type": "object",
972
+ "properties": {
973
+ "version": {
974
+ "type": "string",
975
+ "description": "Instance version the capabilities were computed for, when known."
976
+ },
977
+ "experimental": {
978
+ "type": "boolean",
979
+ "const": true,
980
+ "description": "The forge's API as a whole is unstable, so the provider can change with it."
981
+ },
982
+ "sources": {
983
+ "type": "object",
984
+ "properties": {
985
+ "poll": { "$ref": "#/components/schemas/Support" },
986
+ "webhook": { "$ref": "#/components/schemas/Support" },
987
+ "subscribe": { "$ref": "#/components/schemas/Support" }
988
+ },
989
+ "required": [
990
+ "poll",
991
+ "webhook",
992
+ "subscribe"
993
+ ],
994
+ "description": "`subscribe` is a long-lived push stream; see {@link SourcesApi}."
995
+ },
996
+ "repos": {
997
+ "type": "object",
998
+ "properties": {
999
+ "get": {
1000
+ "$ref": "#/components/schemas/Support",
1001
+ "description": "Support for `repos.get()`."
1002
+ },
1003
+ "list": {
1004
+ "$ref": "#/components/schemas/Support",
1005
+ "description": "Support for `repos.list()` and `repos.listPage()`."
1006
+ },
1007
+ "labels": {
1008
+ "$ref": "#/components/schemas/Support",
1009
+ "description": "Support for `repos.labels()` and `repos.labelsPage()`."
1010
+ },
1011
+ "createLabel": {
1012
+ "$ref": "#/components/schemas/Support",
1013
+ "description": "Support for `repos.createLabel()`."
1014
+ },
1015
+ "milestones": {
1016
+ "$ref": "#/components/schemas/Support",
1017
+ "description": "Support for `repos.milestones()` and `repos.milestonesPage()`."
1018
+ },
1019
+ "collaborators": {
1020
+ "$ref": "#/components/schemas/Support",
1021
+ "description": "Support for `repos.collaborators()` and `repos.collaboratorsPage()`."
1022
+ },
1023
+ "permissionFor": {
1024
+ "$ref": "#/components/schemas/Support",
1025
+ "description": "Support for `repos.permissionFor()`."
1026
+ },
1027
+ "addCollaborator": {
1028
+ "$ref": "#/components/schemas/Support",
1029
+ "description": "Support for `repos.addCollaborator()`."
1030
+ },
1031
+ "assignableUsers": {
1032
+ "$ref": "#/components/schemas/Support",
1033
+ "description": "Support for `repos.assignableUsers()` and `repos.assignableUsersPage()`."
1034
+ },
1035
+ "reviewerCandidates": {
1036
+ "$ref": "#/components/schemas/Support",
1037
+ "description": "Support for `repos.reviewerCandidates()` and `repos.reviewerCandidatesPage()`."
1038
+ }
1039
+ },
1040
+ "required": [
1041
+ "get",
1042
+ "list",
1043
+ "labels",
1044
+ "createLabel",
1045
+ "milestones",
1046
+ "collaborators",
1047
+ "permissionFor",
1048
+ "addCollaborator",
1049
+ "assignableUsers",
1050
+ "reviewerCandidates"
1051
+ ]
1052
+ },
1053
+ "users": {
1054
+ "type": "object",
1055
+ "properties": {
1056
+ "get": {
1057
+ "$ref": "#/components/schemas/Support",
1058
+ "description": "Support for `users.get()`."
1059
+ },
1060
+ "me": {
1061
+ "$ref": "#/components/schemas/Support",
1062
+ "description": "Support for `users.me()`."
1063
+ }
1064
+ },
1065
+ "required": ["get", "me"]
1066
+ },
1067
+ "threads": {
1068
+ "type": "object",
1069
+ "properties": {
1070
+ "get": {
1071
+ "$ref": "#/components/schemas/PerKind",
1072
+ "description": "Support for `threads.get()`, per thread kind."
1073
+ },
1074
+ "list": {
1075
+ "$ref": "#/components/schemas/PerKind",
1076
+ "description": "Support for `threads.list()` and `threads.listPage()`, per thread kind."
1077
+ },
1078
+ "getMany": {
1079
+ "$ref": "#/components/schemas/Support",
1080
+ "description": "Support for `threads.getMany()`."
1081
+ },
1082
+ "events": {
1083
+ "$ref": "#/components/schemas/PerKind",
1084
+ "description": "Support for `threads.events()` and `threads.eventsPage()`, per thread kind."
1085
+ }
1086
+ },
1087
+ "required": [
1088
+ "get",
1089
+ "list",
1090
+ "getMany",
1091
+ "events"
1092
+ ]
1093
+ },
1094
+ "comments": {
1095
+ "type": "object",
1096
+ "properties": {
1097
+ "list": {
1098
+ "$ref": "#/components/schemas/PerKind",
1099
+ "description": "Support for `threads.comments()` and `threads.commentsPage()`, per thread kind."
1100
+ },
1101
+ "edit": {
1102
+ "$ref": "#/components/schemas/PerKind",
1103
+ "description": "Support for `threads.editComment()`, per thread kind."
1104
+ },
1105
+ "delete": {
1106
+ "$ref": "#/components/schemas/PerKind",
1107
+ "description": "Support for `threads.deleteComment()`, per thread kind."
1108
+ }
1109
+ },
1110
+ "required": [
1111
+ "list",
1112
+ "edit",
1113
+ "delete"
1114
+ ]
1115
+ },
1116
+ "reactions": {
1117
+ "type": "object",
1118
+ "properties": { "list": {
1119
+ "$ref": "#/components/schemas/PerKind",
1120
+ "description": "Support for `threads.reactions()` and `threads.reactionsPage()`, per thread kind."
1121
+ } },
1122
+ "required": ["list"],
1123
+ "description": "Listing the reactions on a thread or one of its comments, per thread kind."
1124
+ },
1125
+ "notifications": {
1126
+ "type": "object",
1127
+ "properties": {
1128
+ "list": {
1129
+ "$ref": "#/components/schemas/Support",
1130
+ "description": "Support for `notifications.list()` and `notifications.listPage()`."
1131
+ },
1132
+ "markRead": {
1133
+ "$ref": "#/components/schemas/Support",
1134
+ "description": "Support for `notifications.markRead()`."
1135
+ },
1136
+ "markDone": {
1137
+ "$ref": "#/components/schemas/Support",
1138
+ "description": "Support for `notifications.markDone()`."
1139
+ },
1140
+ "unsubscribe": {
1141
+ "$ref": "#/components/schemas/Support",
1142
+ "description": "Support for `notifications.unsubscribe()`."
1143
+ },
1144
+ "markAllRead": {
1145
+ "$ref": "#/components/schemas/Support",
1146
+ "description": "Support for `notifications.markAllRead()`."
1147
+ },
1148
+ "markAllDone": {
1149
+ "$ref": "#/components/schemas/Support",
1150
+ "description": "Support for `notifications.markAllDone()`."
1151
+ },
1152
+ "unreadCount": {
1153
+ "$ref": "#/components/schemas/Support",
1154
+ "description": "Support for `notifications.unreadCount()`."
1155
+ }
1156
+ },
1157
+ "required": [
1158
+ "list",
1159
+ "markRead",
1160
+ "markDone",
1161
+ "unsubscribe",
1162
+ "markAllRead",
1163
+ "markAllDone",
1164
+ "unreadCount"
1165
+ ]
1166
+ },
1167
+ "writes": {
1168
+ "type": "object",
1169
+ "properties": {
1170
+ "comment": {
1171
+ "$ref": "#/components/schemas/PerKind",
1172
+ "description": "Support for `threads.comment()`, per thread kind."
1173
+ },
1174
+ "upsertComment": {
1175
+ "$ref": "#/components/schemas/PerKind",
1176
+ "description": "Composed from `comment`, `comments.list` and `comments.edit`, so `'emulated'` where it works at all, or `'unverified'` where a part is."
1177
+ },
1178
+ "close": {
1179
+ "$ref": "#/components/schemas/PerKind",
1180
+ "description": "Support for `threads.close()`, per thread kind."
1181
+ },
1182
+ "reopen": {
1183
+ "$ref": "#/components/schemas/PerKind",
1184
+ "description": "Support for `threads.reopen()`, per thread kind."
1185
+ },
1186
+ "create": {
1187
+ "$ref": "#/components/schemas/PerKind",
1188
+ "description": "Support for `threads.create()`, per thread kind."
1189
+ },
1190
+ "update": {
1191
+ "$ref": "#/components/schemas/PerKind",
1192
+ "description": "Support for `threads.update()`, per thread kind."
1193
+ },
1194
+ "setLabels": {
1195
+ "$ref": "#/components/schemas/PerKind",
1196
+ "description": "Support for `threads.setLabels()`, per thread kind."
1197
+ },
1198
+ "addLabels": {
1199
+ "$ref": "#/components/schemas/PerKind",
1200
+ "description": "Support for `threads.addLabels()`, per thread kind."
1201
+ },
1202
+ "removeLabels": {
1203
+ "$ref": "#/components/schemas/PerKind",
1204
+ "description": "Support for `threads.removeLabels()`, per thread kind."
1205
+ },
1206
+ "setMilestone": {
1207
+ "$ref": "#/components/schemas/PerKind",
1208
+ "description": "Support for `threads.setMilestone()`, per thread kind."
1209
+ },
1210
+ "react": {
1211
+ "$ref": "#/components/schemas/PerKind",
1212
+ "description": "Support for `threads.react()` and `threads.unreact()`, per thread kind."
1213
+ },
1214
+ "setAssignees": {
1215
+ "$ref": "#/components/schemas/PerKind",
1216
+ "description": "Support for `threads.setAssignees()`, per thread kind."
1217
+ },
1218
+ "requestReview": {
1219
+ "$ref": "#/components/schemas/PerKind",
1220
+ "description": "Support for `threads.requestReview()`, per thread kind."
1221
+ },
1222
+ "merge": {
1223
+ "$ref": "#/components/schemas/Support",
1224
+ "description": "Support for `threads.merge()`."
1225
+ },
1226
+ "approveAndMerge": {
1227
+ "$ref": "#/components/schemas/Support",
1228
+ "description": "Composed from `merge` and `reviews.approve`."
1229
+ },
1230
+ "transfer": {
1231
+ "$ref": "#/components/schemas/Support",
1232
+ "description": "Support for `threads.transfer()`."
1233
+ },
1234
+ "markDuplicate": {
1235
+ "$ref": "#/components/schemas/Support",
1236
+ "description": "Support for `threads.markDuplicate()`."
1237
+ }
1238
+ },
1239
+ "required": [
1240
+ "comment",
1241
+ "upsertComment",
1242
+ "close",
1243
+ "reopen",
1244
+ "create",
1245
+ "update",
1246
+ "setLabels",
1247
+ "addLabels",
1248
+ "removeLabels",
1249
+ "setMilestone",
1250
+ "react",
1251
+ "setAssignees",
1252
+ "requestReview",
1253
+ "merge",
1254
+ "approveAndMerge",
1255
+ "transfer",
1256
+ "markDuplicate"
1257
+ ],
1258
+ "description": "Write verbs, per thread kind except `merge`, `approveAndMerge`, `transfer` and `markDuplicate`."
1259
+ },
1260
+ "subscriptions": {
1261
+ "type": "object",
1262
+ "properties": {
1263
+ "get": {
1264
+ "$ref": "#/components/schemas/PerKind",
1265
+ "description": "Support for `threads.subscription()`, per thread kind."
1266
+ },
1267
+ "set": {
1268
+ "$ref": "#/components/schemas/PerKind",
1269
+ "description": "Support for `threads.subscribe()` and `threads.unsubscribe()`, per thread kind."
1270
+ }
1271
+ },
1272
+ "required": ["get", "set"],
1273
+ "description": "Reading a thread subscription (`get`) and changing it (`set`), per kind. Distinct from notification unsubscribe."
1274
+ },
1275
+ "checks": {
1276
+ "type": "object",
1277
+ "properties": {
1278
+ "thread": {
1279
+ "$ref": "#/components/schemas/PerKind",
1280
+ "description": "Support for `threads.checks()`, per thread kind."
1281
+ },
1282
+ "list": {
1283
+ "$ref": "#/components/schemas/Support",
1284
+ "description": "Support for `checks.list()`."
1285
+ },
1286
+ "report": {
1287
+ "$ref": "#/components/schemas/Support",
1288
+ "description": "Support for `checks.report()`."
1289
+ },
1290
+ "rerun": {
1291
+ "$ref": "#/components/schemas/Support",
1292
+ "description": "Support for `checks.rerun()`."
1293
+ }
1294
+ },
1295
+ "required": [
1296
+ "thread",
1297
+ "list",
1298
+ "report",
1299
+ "rerun"
1300
+ ],
1301
+ "description": "`thread` covers `Thread.checks` and `threads.checks()` (pull requests only); the rest are the commit-level surface. `report` is a commit status unless the credential can write check runs."
1302
+ },
1303
+ "ci": {
1304
+ "type": "object",
1305
+ "properties": {
1306
+ "runs": {
1307
+ "$ref": "#/components/schemas/Support",
1308
+ "description": "Support for `ci.runs()` and `ci.runsPage()`."
1309
+ },
1310
+ "run": {
1311
+ "$ref": "#/components/schemas/Support",
1312
+ "description": "Support for `ci.run()`."
1313
+ },
1314
+ "jobs": {
1315
+ "$ref": "#/components/schemas/Support",
1316
+ "description": "Support for `ci.jobs()` and `ci.jobsPage()`."
1317
+ },
1318
+ "log": {
1319
+ "$ref": "#/components/schemas/Support",
1320
+ "description": "Support for `ci.log()`."
1321
+ }
1322
+ },
1323
+ "required": [
1324
+ "runs",
1325
+ "run",
1326
+ "jobs",
1327
+ "log"
1328
+ ],
1329
+ "description": "Read-only CI surface. `log` is `false` where job logs are not reachable over the API."
1330
+ },
1331
+ "reviews": {
1332
+ "type": "object",
1333
+ "properties": {
1334
+ "list": {
1335
+ "$ref": "#/components/schemas/Support",
1336
+ "description": "Support for `threads.reviews()` and `threads.reviewsPage()`."
1337
+ },
1338
+ "create": {
1339
+ "$ref": "#/components/schemas/Support",
1340
+ "description": "Support for `threads.createReview()`."
1341
+ },
1342
+ "submit": {
1343
+ "$ref": "#/components/schemas/Support",
1344
+ "description": "Support for `threads.submitReview()`."
1345
+ },
1346
+ "approve": {
1347
+ "$ref": "#/components/schemas/Support",
1348
+ "description": "Support for `threads.approve()`."
1349
+ },
1350
+ "resolveThread": {
1351
+ "$ref": "#/components/schemas/Support",
1352
+ "description": "Support for `threads.resolveReviewThread()` and `threads.unresolveReviewThread()`."
1353
+ }
1354
+ },
1355
+ "required": [
1356
+ "list",
1357
+ "create",
1358
+ "submit",
1359
+ "approve",
1360
+ "resolveThread"
1361
+ ],
1362
+ "description": "Reviews on a pull request. `list` is `'emulated'` where reviews are synthesised from approvals or votes; `create` then covers only the events the forge's approval endpoint can express."
1363
+ },
1364
+ "contents": {
1365
+ "type": "object",
1366
+ "properties": {
1367
+ "file": {
1368
+ "$ref": "#/components/schemas/Support",
1369
+ "description": "Support for `contents.file()`."
1370
+ },
1371
+ "tree": {
1372
+ "$ref": "#/components/schemas/Support",
1373
+ "description": "Support for `contents.tree()` and `contents.treePage()`."
1374
+ },
1375
+ "branches": {
1376
+ "$ref": "#/components/schemas/Support",
1377
+ "description": "Support for `contents.branches()` and `contents.branchesPage()`."
1378
+ },
1379
+ "tags": {
1380
+ "$ref": "#/components/schemas/Support",
1381
+ "description": "Support for `contents.tags()` and `contents.tagsPage()`."
1382
+ },
1383
+ "resolveRef": {
1384
+ "$ref": "#/components/schemas/Support",
1385
+ "description": "Support for `contents.resolveRef()`."
1386
+ },
1387
+ "commits": {
1388
+ "$ref": "#/components/schemas/Support",
1389
+ "description": "Support for `contents.commits()` and `contents.commitsPage()`."
1390
+ },
1391
+ "commit": {
1392
+ "$ref": "#/components/schemas/Support",
1393
+ "description": "Support for `contents.commit()`."
1394
+ },
1395
+ "compare": {
1396
+ "$ref": "#/components/schemas/Support",
1397
+ "description": "Support for `contents.compare()`."
1398
+ },
1399
+ "threadFiles": {
1400
+ "$ref": "#/components/schemas/Support",
1401
+ "description": "`threads.files` and `threads.commits` on a pull request."
1402
+ },
1403
+ "threadCommits": {
1404
+ "$ref": "#/components/schemas/Support",
1405
+ "description": "Support for `threads.commits()` and `threads.commitsPage()`."
1406
+ }
1407
+ },
1408
+ "required": [
1409
+ "file",
1410
+ "tree",
1411
+ "branches",
1412
+ "tags",
1413
+ "resolveRef",
1414
+ "commits",
1415
+ "commit",
1416
+ "compare",
1417
+ "threadFiles",
1418
+ "threadCommits"
1419
+ ],
1420
+ "description": "Repository contents. `tree` is `'emulated'` where recursion is walked level by level rather than by the forge."
1421
+ },
1422
+ "webhooks": {
1423
+ "type": "object",
1424
+ "properties": {
1425
+ "list": {
1426
+ "$ref": "#/components/schemas/Support",
1427
+ "description": "Support for `webhooks.list()` and `webhooks.listPage()`."
1428
+ },
1429
+ "create": {
1430
+ "$ref": "#/components/schemas/Support",
1431
+ "description": "Support for `webhooks.create()`."
1432
+ },
1433
+ "update": {
1434
+ "$ref": "#/components/schemas/Support",
1435
+ "description": "Support for `webhooks.update()`."
1436
+ },
1437
+ "delete": {
1438
+ "$ref": "#/components/schemas/Support",
1439
+ "description": "Support for `webhooks.delete()`."
1440
+ },
1441
+ "rotateSecret": {
1442
+ "$ref": "#/components/schemas/Support",
1443
+ "description": "Support for `webhooks.rotateSecret()`."
1444
+ },
1445
+ "deliveries": {
1446
+ "$ref": "#/components/schemas/Support",
1447
+ "description": "Support for `webhooks.deliveries()` and `webhooks.deliveriesPage()`."
1448
+ },
1449
+ "redeliver": {
1450
+ "$ref": "#/components/schemas/Support",
1451
+ "description": "Support for `webhooks.redeliver()`."
1452
+ }
1453
+ },
1454
+ "required": [
1455
+ "list",
1456
+ "create",
1457
+ "update",
1458
+ "delete",
1459
+ "rotateSecret",
1460
+ "deliveries",
1461
+ "redeliver"
1462
+ ],
1463
+ "description": "Managing registered webhooks, beside receiving deliveries."
1464
+ },
1465
+ "releases": {
1466
+ "type": "object",
1467
+ "properties": {
1468
+ "list": {
1469
+ "$ref": "#/components/schemas/Support",
1470
+ "description": "Support for `releases.list()` and `releases.listPage()`."
1471
+ },
1472
+ "get": {
1473
+ "$ref": "#/components/schemas/Support",
1474
+ "description": "Support for `releases.get()`."
1475
+ },
1476
+ "latest": {
1477
+ "$ref": "#/components/schemas/Support",
1478
+ "description": "Support for `releases.latest()`."
1479
+ },
1480
+ "getByTag": {
1481
+ "$ref": "#/components/schemas/Support",
1482
+ "description": "Support for `releases.getByTag()`."
1483
+ },
1484
+ "downloadAsset": {
1485
+ "$ref": "#/components/schemas/Support",
1486
+ "description": "Support for `releases.downloadAsset()`."
1487
+ },
1488
+ "create": {
1489
+ "$ref": "#/components/schemas/Support",
1490
+ "description": "Support for `releases.create()`."
1491
+ },
1492
+ "update": {
1493
+ "$ref": "#/components/schemas/Support",
1494
+ "description": "Support for `releases.update()`."
1495
+ }
1496
+ },
1497
+ "required": [
1498
+ "list",
1499
+ "get",
1500
+ "latest",
1501
+ "getByTag",
1502
+ "downloadAsset",
1503
+ "create",
1504
+ "update"
1505
+ ]
1506
+ },
1507
+ "search": {
1508
+ "type": "object",
1509
+ "properties": {
1510
+ "threads": {
1511
+ "$ref": "#/components/schemas/Support",
1512
+ "description": "Support for `search.threads()` and `search.threadsPage()`."
1513
+ },
1514
+ "repos": {
1515
+ "$ref": "#/components/schemas/Support",
1516
+ "description": "Support for `search.repos()` and `search.reposPage()`."
1517
+ },
1518
+ "commits": {
1519
+ "$ref": "#/components/schemas/Support",
1520
+ "description": "Support for `search.commits()` and `search.commitsPage()`."
1521
+ },
1522
+ "code": {
1523
+ "$ref": "#/components/schemas/Support",
1524
+ "description": "Support for `search.code()` and `search.codePage()`."
1525
+ }
1526
+ },
1527
+ "required": [
1528
+ "threads",
1529
+ "repos",
1530
+ "commits",
1531
+ "code"
1532
+ ],
1533
+ "description": "Cross-repository search of issues and pull requests, repositories, commits and code."
1534
+ },
1535
+ "securityAlerts": {
1536
+ "$ref": "#/components/schemas/AlertSupport",
1537
+ "description": "Per alert kind, since each needs its own token scope on GitHub."
1538
+ },
1539
+ "installations": {
1540
+ "$ref": "#/components/schemas/Support",
1541
+ "description": "Enumerating app installations and deriving one provider per installation."
1542
+ },
1543
+ "eventKinds": {
1544
+ "type": "string",
1545
+ "enum": ["native", "heuristic"],
1546
+ "description": "`'heuristic'` when event kinds are inferred from free text (GitLab system notes) rather than reported by the forge, so `kind` may be `'other'` or wrong for unrecognised wording; `kindRaw` and `payload` stay exact."
1547
+ },
1548
+ "authKinds": {
1549
+ "type": "array",
1550
+ "items": { "$ref": "#/components/schemas/AuthKind" },
1551
+ "description": "Auth types the provider accepts. The type this provider was created with is `ForgeProvider.authKind`."
1552
+ },
1553
+ "limits": {
1554
+ "$ref": "#/components/schemas/TextLimits",
1555
+ "description": "Maximum text lengths the forge accepts."
1556
+ }
1557
+ },
1558
+ "required": [
1559
+ "sources",
1560
+ "repos",
1561
+ "users",
1562
+ "threads",
1563
+ "comments",
1564
+ "reactions",
1565
+ "notifications",
1566
+ "writes",
1567
+ "subscriptions",
1568
+ "checks",
1569
+ "ci",
1570
+ "reviews",
1571
+ "contents",
1572
+ "webhooks",
1573
+ "releases",
1574
+ "search",
1575
+ "securityAlerts",
1576
+ "installations",
1577
+ "eventKinds",
1578
+ "authKinds"
1579
+ ],
1580
+ "description": "What a provider supports, operation by operation. It is computed without a request, and `refreshCapabilities()` refines it with the instance version. Each group holds one entry per capability, and the [capability matrix](/reference/capability-matrix) lists them for every forge.",
1581
+ "x-forges-type": "ForgeCapabilities"
1582
+ },
1583
+ ForgeEvent: {
1584
+ "type": "object",
1585
+ "properties": {
1586
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
1587
+ "instance": {
1588
+ "$ref": "#/components/schemas/ForgeInstance",
1589
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
1590
+ },
1591
+ "id": { "type": "string" },
1592
+ "kind": { "$ref": "#/components/schemas/EventKind" },
1593
+ "kindRaw": {
1594
+ "type": "string",
1595
+ "description": "Forge-native event name the normalised `kind` was derived from."
1596
+ },
1597
+ "action": {
1598
+ "$ref": "#/components/schemas/EventAction",
1599
+ "description": "Normalised verb; `other` when the forge's wording has no equivalent."
1600
+ },
1601
+ "actionRaw": {
1602
+ "type": "string",
1603
+ "description": "Forge-native verb `action` was derived from."
1604
+ },
1605
+ "summary": {
1606
+ "type": "string",
1607
+ "description": "Single line describing the event, suitable for a list row."
1608
+ },
1609
+ "occurredAt": {
1610
+ "type": "string",
1611
+ "format": "date-time"
1612
+ },
1613
+ "actor": { "$ref": "#/components/schemas/Actor" },
1614
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
1615
+ "thread": { "$ref": "#/components/schemas/ThreadRef" },
1616
+ "detail": {
1617
+ "$ref": "#/components/schemas/EventDetail",
1618
+ "description": "The details that belong to the kind of event."
1619
+ },
1620
+ "installationId": {
1621
+ "type": "string",
1622
+ "description": "App installation the delivery belongs to, for app webhooks."
1623
+ },
1624
+ "source": {
1625
+ "$ref": "#/components/schemas/SourceKind",
1626
+ "description": "Delivery mechanism the event arrived through."
1627
+ },
1628
+ "payload": { "description": "Unnormalised forge payload, retained for fidelity." }
1629
+ },
1630
+ "required": [
1631
+ "action",
1632
+ "forge",
1633
+ "id",
1634
+ "instance",
1635
+ "kind",
1636
+ "occurredAt",
1637
+ "payload",
1638
+ "source",
1639
+ "summary"
1640
+ ],
1641
+ "description": "An event on a forge, such as a comment, a state change or a push.",
1642
+ "x-forges-type": "ForgeEvent"
1643
+ },
1644
+ ForgeInstance: {
1645
+ "type": "string",
1646
+ "description": "Host of a single forge deployment, for example `github.com` or `codeberg.org`.",
1647
+ "x-forges-type": "ForgeInstance"
1648
+ },
1649
+ ForgeKind: {
1650
+ "anyOf": [{ "$ref": "#/components/schemas/KnownForgeKind" }, { "type": "string" }],
1651
+ "description": "Identifier of a forge implementation. Unknown forges are permitted so that third-party providers can be registered without a core release.",
1652
+ "x-forges-type": "ForgeKind"
1653
+ },
1654
+ ForgeWarning: {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "code": {
1658
+ "$ref": "#/components/schemas/ForgeWarningCode",
1659
+ "description": "Stable machine-readable code."
1660
+ },
1661
+ "message": {
1662
+ "type": "string",
1663
+ "description": "A description of the problem, for a person."
1664
+ },
1665
+ "subject": {
1666
+ "type": "string",
1667
+ "description": "Key or URI of the item the warning concerns, when it concerns one."
1668
+ },
1669
+ "cause": {
1670
+ "type": "object",
1671
+ "properties": {
1672
+ "name": { "type": "string" },
1673
+ "message": { "type": "string" },
1674
+ "status": { "type": "number" }
1675
+ },
1676
+ "required": ["name", "message"]
1677
+ }
1678
+ },
1679
+ "required": ["code", "message"],
1680
+ "description": "A non-fatal problem encountered while producing a result.",
1681
+ "x-forges-type": "ForgeWarning"
1682
+ },
1683
+ ForgeWarningCode: {
1684
+ "type": "string",
1685
+ "description": "The warning codes providers emit; providers may add codes in a minor release.",
1686
+ "x-forges-type": "ForgeWarningCode"
1687
+ },
1688
+ GetManyResult: {
1689
+ "anyOf": [{
1690
+ "type": "object",
1691
+ "properties": {
1692
+ "ok": {
1693
+ "type": "boolean",
1694
+ "const": true
1695
+ },
1696
+ "ref": { "$ref": "#/components/schemas/ThreadRef" },
1697
+ "thread": { "$ref": "#/components/schemas/Thread" }
1698
+ },
1699
+ "required": [
1700
+ "ok",
1701
+ "ref",
1702
+ "thread"
1703
+ ]
1704
+ }, {
1705
+ "type": "object",
1706
+ "properties": {
1707
+ "ok": {
1708
+ "type": "boolean",
1709
+ "const": false
1710
+ },
1711
+ "ref": { "$ref": "#/components/schemas/ThreadRef" },
1712
+ "warning": { "$ref": "#/components/schemas/ForgeWarning" }
1713
+ },
1714
+ "required": [
1715
+ "ok",
1716
+ "ref",
1717
+ "warning"
1718
+ ]
1719
+ }],
1720
+ "description": "One `threads.getMany()` entry, in input order; narrow on `ok`.",
1721
+ "x-forges-type": "GetManyResult"
1722
+ },
1723
+ Installation: {
1724
+ "type": "object",
1725
+ "properties": {
1726
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
1727
+ "instance": {
1728
+ "$ref": "#/components/schemas/ForgeInstance",
1729
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
1730
+ },
1731
+ "id": { "type": "string" },
1732
+ "account": { "$ref": "#/components/schemas/Actor" },
1733
+ "targetTypeRaw": {
1734
+ "type": "string",
1735
+ "description": "Forge-native target type, for example `Organization` or `User`."
1736
+ },
1737
+ "repositorySelectionRaw": {
1738
+ "type": "string",
1739
+ "description": "Forge-native repository selection, for example `all` or `selected`."
1740
+ },
1741
+ "raw": {}
1742
+ },
1743
+ "required": [
1744
+ "forge",
1745
+ "id",
1746
+ "instance",
1747
+ "raw"
1748
+ ],
1749
+ "description": "An app installation on an account, with its own credential scope.",
1750
+ "x-forges-type": "Installation"
1751
+ },
1752
+ InstallationToken: {
1753
+ "type": "object",
1754
+ "properties": {
1755
+ "token": { "type": "string" },
1756
+ "expiresAt": {
1757
+ "type": "string",
1758
+ "format": "date-time"
1759
+ },
1760
+ "permissions": {
1761
+ "type": "object",
1762
+ "additionalProperties": { "type": "string" }
1763
+ },
1764
+ "repositorySelection": {
1765
+ "type": "string",
1766
+ "description": "Whether the token reaches all repositories or only selected ones."
1767
+ }
1768
+ },
1769
+ "required": [
1770
+ "token",
1771
+ "expiresAt",
1772
+ "permissions"
1773
+ ],
1774
+ "description": "A short-lived token that acts as one app installation.",
1775
+ "x-forges-type": "InstallationToken"
1776
+ },
1777
+ KnownForgeKind: {
1778
+ "type": "string",
1779
+ "enum": [
1780
+ "github",
1781
+ "gitlab",
1782
+ "bitbucket",
1783
+ "forgejo",
1784
+ "gitea",
1785
+ "tangled",
1786
+ "gitee",
1787
+ "azure-devops",
1788
+ "cursor-origin",
1789
+ "pushin"
1790
+ ],
1791
+ "description": "The forges this package ships providers for.",
1792
+ "x-forges-type": "KnownForgeKind"
1793
+ },
1794
+ Label: {
1795
+ "type": "object",
1796
+ "properties": {
1797
+ "name": { "type": "string" },
1798
+ "colour": {
1799
+ "type": "string",
1800
+ "description": "The colour as hex digits, without a leading `#`."
1801
+ },
1802
+ "description": { "type": "string" }
1803
+ },
1804
+ "required": ["name"],
1805
+ "description": "A label that a repository defines.",
1806
+ "x-forges-type": "Label"
1807
+ },
1808
+ MergeMethod: {
1809
+ "type": "string",
1810
+ "enum": [
1811
+ "merge",
1812
+ "squash",
1813
+ "rebase",
1814
+ "rebase_merge",
1815
+ "fast_forward_only"
1816
+ ],
1817
+ "description": "How a pull request is merged.",
1818
+ "x-forges-type": "MergeMethod"
1819
+ },
1820
+ Milestone: {
1821
+ "type": "object",
1822
+ "properties": {
1823
+ "id": {
1824
+ "type": "string",
1825
+ "description": "Forge-native milestone id, as `threads.setMilestone` takes it."
1826
+ },
1827
+ "title": { "type": "string" },
1828
+ "state": {
1829
+ "type": "string",
1830
+ "enum": ["open", "closed"]
1831
+ },
1832
+ "description": { "type": "string" },
1833
+ "dueOn": {
1834
+ "type": "string",
1835
+ "format": "date-time"
1836
+ },
1837
+ "url": { "type": "string" },
1838
+ "raw": {}
1839
+ },
1840
+ "required": [
1841
+ "id",
1842
+ "title",
1843
+ "state",
1844
+ "raw"
1845
+ ],
1846
+ "description": "A milestone that groups threads.",
1847
+ "x-forges-type": "Milestone"
1848
+ },
1849
+ Notification: {
1850
+ "type": "object",
1851
+ "properties": {
1852
+ "ref": { "$ref": "#/components/schemas/NotificationRef" },
1853
+ "subject": { "$ref": "#/components/schemas/NotificationSubject" },
1854
+ "reason": {
1855
+ "$ref": "#/components/schemas/NotificationReason",
1856
+ "description": "Why the account got the notification."
1857
+ },
1858
+ "reasonRaw": {
1859
+ "type": "string",
1860
+ "description": "Forge-native reason string. Absent when the forge reports no reason at all."
1861
+ },
1862
+ "subjectTypeRaw": {
1863
+ "type": "string",
1864
+ "description": "Forge-native subject type, for example `PullRequest`, `Release` or `followed`."
1865
+ },
1866
+ "unread": { "type": "boolean" },
1867
+ "title": { "type": "string" },
1868
+ "subjectState": {
1869
+ "$ref": "#/components/schemas/ThreadState",
1870
+ "description": "State of a thread subject as reported by the notification payload."
1871
+ },
1872
+ "subjectStateRaw": { "type": "string" },
1873
+ "updatedAt": {
1874
+ "type": "string",
1875
+ "format": "date-time"
1876
+ },
1877
+ "lastReadAt": {
1878
+ "type": "string",
1879
+ "format": "date-time"
1880
+ },
1881
+ "url": { "type": "string" },
1882
+ "raw": { "description": "Unnormalised forge payload, retained for fidelity." }
1883
+ },
1884
+ "required": [
1885
+ "ref",
1886
+ "subject",
1887
+ "reason",
1888
+ "unread",
1889
+ "title",
1890
+ "subjectState",
1891
+ "updatedAt",
1892
+ "raw"
1893
+ ],
1894
+ "description": "A notification of the authenticated account.",
1895
+ "x-forges-type": "Notification"
1896
+ },
1897
+ NotificationReason: {
1898
+ "type": "string",
1899
+ "enum": [
1900
+ "access_requested",
1901
+ "approval_requested",
1902
+ "assigned",
1903
+ "author",
1904
+ "ci_activity",
1905
+ "comment",
1906
+ "followed",
1907
+ "invitation",
1908
+ "manual",
1909
+ "mention",
1910
+ "merge_blocked",
1911
+ "review_requested",
1912
+ "review_submitted",
1913
+ "security_alert",
1914
+ "starred",
1915
+ "state_change",
1916
+ "subscribed",
1917
+ "team_mention",
1918
+ "unknown"
1919
+ ],
1920
+ "description": "Why a notification was delivered. `'unknown'` covers forges that report no reason and native reasons with no normalised equivalent; `reasonRaw` keeps the original.",
1921
+ "x-forges-type": "NotificationReason"
1922
+ },
1923
+ NotificationRef: {
1924
+ "type": "object",
1925
+ "properties": {
1926
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
1927
+ "instance": {
1928
+ "$ref": "#/components/schemas/ForgeInstance",
1929
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
1930
+ },
1931
+ "id": {
1932
+ "type": "string",
1933
+ "description": "Forge-native notification identifier, used for read/done/unsubscribe writes."
1934
+ }
1935
+ },
1936
+ "required": [
1937
+ "forge",
1938
+ "id",
1939
+ "instance"
1940
+ ],
1941
+ "description": "Reference to a notification. Distinct from {@link ThreadRef}: a notification is a per-user delivery record whose lifetime and identity are independent of the thread it points at.",
1942
+ "x-forges-type": "NotificationRef"
1943
+ },
1944
+ NotificationSubject: {
1945
+ "anyOf": [
1946
+ {
1947
+ "type": "object",
1948
+ "properties": {
1949
+ "type": {
1950
+ "type": "string",
1951
+ "const": "thread"
1952
+ },
1953
+ "thread": { "$ref": "#/components/schemas/ThreadRef" }
1954
+ },
1955
+ "required": ["type", "thread"]
1956
+ },
1957
+ {
1958
+ "type": "object",
1959
+ "properties": {
1960
+ "type": {
1961
+ "type": "string",
1962
+ "const": "repo"
1963
+ },
1964
+ "repo": { "$ref": "#/components/schemas/RepoRef" }
1965
+ },
1966
+ "required": ["type", "repo"]
1967
+ },
1968
+ {
1969
+ "type": "object",
1970
+ "properties": {
1971
+ "type": {
1972
+ "type": "string",
1973
+ "const": "actor"
1974
+ },
1975
+ "actor": { "$ref": "#/components/schemas/Actor" }
1976
+ },
1977
+ "required": ["type", "actor"]
1978
+ },
1979
+ {
1980
+ "type": "object",
1981
+ "properties": {
1982
+ "type": {
1983
+ "type": "string",
1984
+ "const": "release"
1985
+ },
1986
+ "release": { "$ref": "#/components/schemas/ReleaseRef" }
1987
+ },
1988
+ "required": ["type", "release"]
1989
+ },
1990
+ {
1991
+ "type": "object",
1992
+ "properties": {
1993
+ "type": {
1994
+ "type": "string",
1995
+ "const": "security_alert"
1996
+ },
1997
+ "alert": { "$ref": "#/components/schemas/SecurityAlertRef" }
1998
+ },
1999
+ "required": ["type", "alert"]
2000
+ },
2001
+ {
2002
+ "type": "object",
2003
+ "properties": {
2004
+ "type": {
2005
+ "type": "string",
2006
+ "const": "other"
2007
+ },
2008
+ "typeRaw": { "type": "string" },
2009
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
2010
+ "id": { "type": "string" },
2011
+ "url": { "type": "string" }
2012
+ },
2013
+ "required": ["type", "typeRaw"]
2014
+ }
2015
+ ],
2016
+ "description": "What a notification is about. Not every notification concerns a thread.",
2017
+ "x-forges-type": "NotificationSubject"
2018
+ },
2019
+ PerKind: {
2020
+ "type": "object",
2021
+ "properties": {
2022
+ "issue": { "$ref": "#/components/schemas/Support" },
2023
+ "pull_request": { "$ref": "#/components/schemas/Support" },
2024
+ "discussion": { "$ref": "#/components/schemas/Support" },
2025
+ "commit": { "$ref": "#/components/schemas/Support" }
2026
+ },
2027
+ "required": [
2028
+ "issue",
2029
+ "pull_request",
2030
+ "discussion",
2031
+ "commit"
2032
+ ],
2033
+ "description": "Per-thread-kind support. `'other'` subjects have no verbs, so they have no entry.",
2034
+ "x-forges-type": "PerKind"
2035
+ },
2036
+ PullBranches: {
2037
+ "type": "object",
2038
+ "properties": {
2039
+ "head": {
2040
+ "type": "object",
2041
+ "properties": {
2042
+ "ref": { "type": "string" },
2043
+ "sha": { "type": "string" },
2044
+ "repo": {
2045
+ "$ref": "#/components/schemas/RepoRef",
2046
+ "description": "The repository that holds the head branch, which differs for a fork."
2047
+ }
2048
+ },
2049
+ "required": ["ref"],
2050
+ "description": "`sha` is absent on forges where a pull is a patch rather than a branch (Tangled)."
2051
+ },
2052
+ "base": {
2053
+ "type": "object",
2054
+ "properties": {
2055
+ "ref": { "type": "string" },
2056
+ "sha": { "type": "string" }
2057
+ },
2058
+ "required": ["ref"]
2059
+ },
2060
+ "mergeCommitSha": {
2061
+ "type": "string",
2062
+ "description": "The merge commit, once the pull request is merged."
2063
+ }
2064
+ },
2065
+ "required": ["head", "base"],
2066
+ "description": "The branches of a pull request.",
2067
+ "x-forges-type": "PullBranches"
2068
+ },
2069
+ PushCommit: {
2070
+ "type": "object",
2071
+ "properties": {
2072
+ "sha": { "type": "string" },
2073
+ "message": { "type": "string" },
2074
+ "author": { "type": "string" },
2075
+ "url": { "type": "string" }
2076
+ },
2077
+ "required": ["sha"],
2078
+ "description": "A commit as a push delivery reports it.",
2079
+ "x-forges-type": "PushCommit"
2080
+ },
2081
+ Reaction: {
2082
+ "type": "object",
2083
+ "properties": {
2084
+ "content": {
2085
+ "anyOf": [{ "$ref": "#/components/schemas/ReactionContent" }, {
2086
+ "type": "string",
2087
+ "const": "other"
2088
+ }],
2089
+ "description": "`'other'` where the forge's name has no entry in {@link ReactionContent}."
2090
+ },
2091
+ "contentRaw": {
2092
+ "type": "string",
2093
+ "description": "The forge's own name for the reaction, such as a GitLab award emoji or a Forgejo emoji."
2094
+ },
2095
+ "actor": { "$ref": "#/components/schemas/Actor" },
2096
+ "createdAt": {
2097
+ "type": "string",
2098
+ "format": "date-time"
2099
+ },
2100
+ "raw": {}
2101
+ },
2102
+ "required": [
2103
+ "content",
2104
+ "contentRaw",
2105
+ "actor",
2106
+ "raw"
2107
+ ],
2108
+ "description": "One reaction left on a thread or a comment, as `threads.reactions()` lists them.",
2109
+ "x-forges-type": "Reaction"
2110
+ },
2111
+ ReactionContent: {
2112
+ "type": "string",
2113
+ "enum": [
2114
+ "+1",
2115
+ "-1",
2116
+ "laugh",
2117
+ "confused",
2118
+ "heart",
2119
+ "hooray",
2120
+ "rocket",
2121
+ "eyes"
2122
+ ],
2123
+ "description": "The reactions every forge with reactions has in common, named as GitHub names them. A {@link Reaction} whose forge-native name has no entry here has `content: 'other'`, with the forge-native name in `contentRaw`.",
2124
+ "x-forges-type": "ReactionContent"
2125
+ },
2126
+ ReactionSummary: {
2127
+ "type": "object",
2128
+ "properties": {
2129
+ "total": {
2130
+ "type": "number",
2131
+ "description": "The number of reactions of every kind."
2132
+ },
2133
+ "counts": {
2134
+ "type": "object",
2135
+ "properties": {
2136
+ "+1": { "type": "number" },
2137
+ "-1": { "type": "number" },
2138
+ "laugh": { "type": "number" },
2139
+ "confused": { "type": "number" },
2140
+ "heart": { "type": "number" },
2141
+ "hooray": { "type": "number" },
2142
+ "rocket": { "type": "number" },
2143
+ "eyes": { "type": "number" }
2144
+ },
2145
+ "description": "The number of reactions of each kind. A reaction with no {@link ReactionContent} entry has no key here."
2146
+ },
2147
+ "viewerReacted": {
2148
+ "type": "array",
2149
+ "items": { "$ref": "#/components/schemas/ReactionContent" },
2150
+ "description": "Reactions the authenticated account has left. Absent when the forge does not report them."
2151
+ }
2152
+ },
2153
+ "required": ["total", "counts"],
2154
+ "description": "The reactions on a thread or comment, counted.",
2155
+ "x-forges-type": "ReactionSummary"
2156
+ },
2157
+ Release: {
2158
+ "type": "object",
2159
+ "properties": {
2160
+ "ref": { "$ref": "#/components/schemas/ReleaseRef" },
2161
+ "name": { "type": "string" },
2162
+ "tag": { "type": "string" },
2163
+ "body": {
2164
+ "type": "string",
2165
+ "description": "The release notes."
2166
+ },
2167
+ "isDraft": { "type": "boolean" },
2168
+ "isPrerelease": { "type": "boolean" },
2169
+ "immutable": {
2170
+ "type": "boolean",
2171
+ "description": "The release is immutable: its tag and assets are locked. `true` where the forge supports immutable releases and this one is published as immutable (GitHub). The name, notes, prerelease and latest flags stay editable."
2172
+ },
2173
+ "author": { "$ref": "#/components/schemas/Actor" },
2174
+ "publishedAt": {
2175
+ "type": "string",
2176
+ "format": "date-time"
2177
+ },
2178
+ "createdAt": {
2179
+ "type": "string",
2180
+ "format": "date-time"
2181
+ },
2182
+ "url": { "type": "string" },
2183
+ "assets": {
2184
+ "type": "array",
2185
+ "items": { "$ref": "#/components/schemas/ReleaseAsset" }
2186
+ },
2187
+ "raw": {}
2188
+ },
2189
+ "required": [
2190
+ "ref",
2191
+ "tag",
2192
+ "isDraft",
2193
+ "isPrerelease",
2194
+ "raw"
2195
+ ],
2196
+ "description": "A release of a repository.",
2197
+ "x-forges-type": "Release"
2198
+ },
2199
+ ReleaseAsset: {
2200
+ "type": "object",
2201
+ "properties": {
2202
+ "ref": {
2203
+ "$ref": "#/components/schemas/ReleaseAssetRef",
2204
+ "description": "Absent where the forge publishes a download URL but nothing to address the asset by."
2205
+ },
2206
+ "name": { "type": "string" },
2207
+ "url": { "type": "string" },
2208
+ "size": { "type": "number" },
2209
+ "downloadCount": { "type": "number" },
2210
+ "contentType": {
2211
+ "type": "string",
2212
+ "description": "The media type."
2213
+ }
2214
+ },
2215
+ "required": ["name", "url"],
2216
+ "description": "A file attached to a release.",
2217
+ "x-forges-type": "ReleaseAsset"
2218
+ },
2219
+ ReleaseAssetRef: {
2220
+ "type": "object",
2221
+ "properties": {
2222
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2223
+ "instance": {
2224
+ "$ref": "#/components/schemas/ForgeInstance",
2225
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2226
+ },
2227
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
2228
+ "release": { "$ref": "#/components/schemas/ReleaseRef" },
2229
+ "id": {
2230
+ "type": "string",
2231
+ "description": "Forge-native asset id; the asset name, or the link id, on forges that have no asset id."
2232
+ }
2233
+ },
2234
+ "required": [
2235
+ "forge",
2236
+ "id",
2237
+ "instance",
2238
+ "release",
2239
+ "repo"
2240
+ ],
2241
+ "description": "A release asset, addressable for download with `releases.downloadAsset`.",
2242
+ "x-forges-type": "ReleaseAssetRef"
2243
+ },
2244
+ ReleaseRef: {
2245
+ "type": "object",
2246
+ "properties": {
2247
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2248
+ "instance": {
2249
+ "$ref": "#/components/schemas/ForgeInstance",
2250
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2251
+ },
2252
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
2253
+ "id": {
2254
+ "type": "string",
2255
+ "description": "Forge-native release id; the tag name on forges that key releases by tag."
2256
+ },
2257
+ "tag": { "type": "string" }
2258
+ },
2259
+ "required": [
2260
+ "forge",
2261
+ "id",
2262
+ "instance",
2263
+ "repo"
2264
+ ],
2265
+ "description": "A release, as a notification subject or event target.",
2266
+ "x-forges-type": "ReleaseRef"
2267
+ },
2268
+ Repo: {
2269
+ "type": "object",
2270
+ "properties": {
2271
+ "ref": { "$ref": "#/components/schemas/RepoRef" },
2272
+ "displayName": {
2273
+ "type": "string",
2274
+ "description": "The repository's name where `ref.name` is an identifier rather than the name (a Tangled record key)."
2275
+ },
2276
+ "description": { "type": "string" },
2277
+ "defaultBranch": { "type": "string" },
2278
+ "visibility": {
2279
+ "$ref": "#/components/schemas/RepoVisibility",
2280
+ "description": "Who can see the repository."
2281
+ },
2282
+ "visibilityRaw": { "type": "string" },
2283
+ "isFork": { "type": "boolean" },
2284
+ "isArchived": {
2285
+ "type": "boolean",
2286
+ "description": "The repository is archived and read-only."
2287
+ },
2288
+ "parent": {
2289
+ "$ref": "#/components/schemas/RepoRef",
2290
+ "description": "The repository that this one was forked from."
2291
+ },
2292
+ "topics": {
2293
+ "type": "array",
2294
+ "items": { "type": "string" },
2295
+ "description": "Topics, also called tags, that describe the repository."
2296
+ },
2297
+ "url": { "type": "string" },
2298
+ "cloneUrls": {
2299
+ "type": "object",
2300
+ "properties": {
2301
+ "https": { "type": "string" },
2302
+ "ssh": { "type": "string" }
2303
+ },
2304
+ "description": "Git remotes. Tangled maps the hosting knot to its SSH host."
2305
+ },
2306
+ "createdAt": {
2307
+ "type": "string",
2308
+ "format": "date-time"
2309
+ },
2310
+ "updatedAt": {
2311
+ "type": "string",
2312
+ "format": "date-time"
2313
+ },
2314
+ "pushedAt": {
2315
+ "type": "string",
2316
+ "format": "date-time",
2317
+ "description": "Last push, where the listing endpoint reports it."
2318
+ },
2319
+ "openIssueCount": {
2320
+ "type": "number",
2321
+ "description": "Open issues only, never combined with pull requests. Absent where the forge reports only the combined count (GitHub)."
2322
+ },
2323
+ "openPullCount": {
2324
+ "type": "number",
2325
+ "description": "The number of open pull requests, where the forge reports it."
2326
+ },
2327
+ "owner": {
2328
+ "$ref": "#/components/schemas/Actor",
2329
+ "description": "The account or organisation that owns the repository, where the forge reports one."
2330
+ },
2331
+ "language": {
2332
+ "type": "string",
2333
+ "description": "Primary language, as the forge detects it."
2334
+ },
2335
+ "homepage": {
2336
+ "type": "string",
2337
+ "description": "Project website, apart from the repository's own `url`."
2338
+ },
2339
+ "licence": {
2340
+ "type": "string",
2341
+ "description": "SPDX identifier of the licence the forge detects, for example `MIT`. SPDX identifiers are case-insensitive, and GitLab reports them in lower case, such as `mit`."
2342
+ },
2343
+ "stars": { "type": "number" },
2344
+ "forks": { "type": "number" },
2345
+ "watchers": {
2346
+ "type": "number",
2347
+ "description": "Accounts watching the repository's activity, apart from stars."
2348
+ },
2349
+ "permissions": {
2350
+ "$ref": "#/components/schemas/RepoPermissions",
2351
+ "description": "What the authenticated account may do."
2352
+ },
2353
+ "mergeMethods": {
2354
+ "type": "array",
2355
+ "items": { "$ref": "#/components/schemas/MergeMethod" },
2356
+ "description": "Merge methods the repository allows, where the forge reports them. Empty means the forge reported none."
2357
+ },
2358
+ "features": { "$ref": "#/components/schemas/RepoFeatures" },
2359
+ "raw": {}
2360
+ },
2361
+ "required": [
2362
+ "ref",
2363
+ "visibility",
2364
+ "isFork",
2365
+ "isArchived",
2366
+ "topics",
2367
+ "raw"
2368
+ ],
2369
+ "description": "A repository as every forge reports it. Fields that not every forge has, such as `openPullCount`, are optional.",
2370
+ "x-forges-type": "Repo"
2371
+ },
2372
+ RepoFeatures: {
2373
+ "type": "object",
2374
+ "properties": {
2375
+ "issues": { "type": "boolean" },
2376
+ "pullRequests": { "type": "boolean" },
2377
+ "discussions": { "type": "boolean" },
2378
+ "wiki": { "type": "boolean" },
2379
+ "projects": { "type": "boolean" },
2380
+ "releases": { "type": "boolean" }
2381
+ },
2382
+ "required": [
2383
+ "issues",
2384
+ "pullRequests",
2385
+ "discussions",
2386
+ "wiki",
2387
+ "projects",
2388
+ "releases"
2389
+ ],
2390
+ "description": "Which subjects a repository has switched on, where the forge makes them per repository.",
2391
+ "x-forges-type": "RepoFeatures"
2392
+ },
2393
+ RepoPermissions: {
2394
+ "type": "object",
2395
+ "properties": {
2396
+ "admin": {
2397
+ "type": "boolean",
2398
+ "description": "Full administrative access."
2399
+ },
2400
+ "maintain": {
2401
+ "type": "boolean",
2402
+ "description": "Manage the repository without access to sensitive or destructive settings."
2403
+ },
2404
+ "push": { "type": "boolean" },
2405
+ "triage": {
2406
+ "type": "boolean",
2407
+ "description": "Manage issues and pull requests without write access."
2408
+ },
2409
+ "pull": {
2410
+ "type": "boolean",
2411
+ "description": "Read and clone the repository."
2412
+ }
2413
+ },
2414
+ "required": [
2415
+ "admin",
2416
+ "maintain",
2417
+ "push",
2418
+ "triage",
2419
+ "pull"
2420
+ ],
2421
+ "description": "The authenticated account's access to a repository.",
2422
+ "x-forges-type": "RepoPermissions"
2423
+ },
2424
+ RepoRef: {
2425
+ "type": "object",
2426
+ "properties": {
2427
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2428
+ "instance": {
2429
+ "$ref": "#/components/schemas/ForgeInstance",
2430
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2431
+ },
2432
+ "owner": {
2433
+ "type": "string",
2434
+ "description": "Full namespace path. On forges with nested groups (GitLab) this contains slashes, for example `acme/platform`; `name` never does."
2435
+ },
2436
+ "name": {
2437
+ "type": "string",
2438
+ "description": "Repository name. Empty for namespace-scoped refs."
2439
+ },
2440
+ "kind": {
2441
+ "type": "string",
2442
+ "enum": ["repo", "namespace"],
2443
+ "description": "`'namespace'` for subjects that belong to a group rather than a repository (GitLab epics). Absent means a repository."
2444
+ },
2445
+ "externalId": {
2446
+ "type": "string",
2447
+ "description": "Stable forge-native identifier that survives renames and transfers: a GitHub, Forgejo or Gitea numeric id, a GitLab project or group id, a Bitbucket UUID or a Tangled repo DID. {@link repoKey} prefers it over `owner` and `name`."
2448
+ }
2449
+ },
2450
+ "required": [
2451
+ "forge",
2452
+ "instance",
2453
+ "name",
2454
+ "owner"
2455
+ ],
2456
+ "description": "Addresses a repository by its forge, instance, owner and name.",
2457
+ "x-forges-type": "RepoRef"
2458
+ },
2459
+ RepoRole: {
2460
+ "type": "string",
2461
+ "enum": [
2462
+ "admin",
2463
+ "maintain",
2464
+ "write",
2465
+ "triage",
2466
+ "read",
2467
+ "none"
2468
+ ],
2469
+ "description": "A collaborator's role, highest first. `'none'` is an explicit absence of access.",
2470
+ "x-forges-type": "RepoRole"
2471
+ },
2472
+ RepoVisibility: {
2473
+ "type": "string",
2474
+ "enum": [
2475
+ "public",
2476
+ "private",
2477
+ "internal"
2478
+ ],
2479
+ "description": "Who can see a repository.",
2480
+ "x-forges-type": "RepoVisibility"
2481
+ },
2482
+ Review: {
2483
+ "type": "object",
2484
+ "properties": {
2485
+ "ref": { "$ref": "#/components/schemas/ReviewRef" },
2486
+ "author": { "$ref": "#/components/schemas/Actor" },
2487
+ "state": { "$ref": "#/components/schemas/ReviewState" },
2488
+ "stateRaw": { "type": "string" },
2489
+ "body": { "type": "string" },
2490
+ "submittedAt": {
2491
+ "type": "string",
2492
+ "format": "date-time"
2493
+ },
2494
+ "comments": {
2495
+ "anyOf": [{
2496
+ "type": "array",
2497
+ "items": { "$ref": "#/components/schemas/ReviewComment" }
2498
+ }, {
2499
+ "type": "boolean",
2500
+ "const": false
2501
+ }],
2502
+ "description": "Inline comments submitted with the review. `false` where the forge has approvals but no review objects to hang comments on."
2503
+ },
2504
+ "url": { "type": "string" },
2505
+ "raw": {}
2506
+ },
2507
+ "required": [
2508
+ "ref",
2509
+ "state",
2510
+ "comments",
2511
+ "raw"
2512
+ ],
2513
+ "description": "A review of a pull request.",
2514
+ "x-forges-type": "Review"
2515
+ },
2516
+ ReviewComment: {
2517
+ "type": "object",
2518
+ "properties": {
2519
+ "ref": { "$ref": "#/components/schemas/CommentRef" },
2520
+ "body": { "type": "string" },
2521
+ "author": { "$ref": "#/components/schemas/Actor" },
2522
+ "path": { "type": "string" },
2523
+ "line": {
2524
+ "type": "number",
2525
+ "description": "Line in the file the comment is anchored to, in the side it is anchored to."
2526
+ },
2527
+ "side": {
2528
+ "type": "string",
2529
+ "enum": ["left", "right"],
2530
+ "description": "`'left'` is the base of the diff, `'right'` the head."
2531
+ },
2532
+ "inReplyTo": {
2533
+ "type": "string",
2534
+ "description": "Forge-native id of the comment this one replies to."
2535
+ },
2536
+ "thread": {
2537
+ "type": "object",
2538
+ "properties": {
2539
+ "id": { "type": "string" },
2540
+ "resolved": { "type": "boolean" }
2541
+ },
2542
+ "required": ["id", "resolved"],
2543
+ "description": "The resolvable conversation the comment belongs to, where the forge has one."
2544
+ },
2545
+ "createdAt": {
2546
+ "type": "string",
2547
+ "format": "date-time"
2548
+ },
2549
+ "url": { "type": "string" },
2550
+ "raw": {}
2551
+ },
2552
+ "required": ["body", "raw"],
2553
+ "description": "A comment left on a line of the diff as part of a review.",
2554
+ "x-forges-type": "ReviewComment"
2555
+ },
2556
+ ReviewCommentInput: {
2557
+ "type": "object",
2558
+ "properties": {
2559
+ "path": { "type": "string" },
2560
+ "line": {
2561
+ "type": "number",
2562
+ "description": "Line in the diff, in `side`."
2563
+ },
2564
+ "side": {
2565
+ "type": "string",
2566
+ "enum": ["left", "right"]
2567
+ },
2568
+ "startLine": {
2569
+ "type": "number",
2570
+ "description": "First line of a multi-line comment."
2571
+ },
2572
+ "body": { "type": "string" }
2573
+ },
2574
+ "required": ["path", "body"],
2575
+ "description": "An inline comment to send with a review.",
2576
+ "x-forges-type": "ReviewCommentInput"
2577
+ },
2578
+ ReviewRef: {
2579
+ "type": "object",
2580
+ "properties": {
2581
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2582
+ "instance": {
2583
+ "$ref": "#/components/schemas/ForgeInstance",
2584
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2585
+ },
2586
+ "thread": { "$ref": "#/components/schemas/ThreadRef" },
2587
+ "id": {
2588
+ "type": "string",
2589
+ "description": "Forge-native review id; a synthesised `approval:<login>` where the forge has approvals but no review objects."
2590
+ }
2591
+ },
2592
+ "required": [
2593
+ "forge",
2594
+ "id",
2595
+ "instance",
2596
+ "thread"
2597
+ ],
2598
+ "description": "Reference to a review on a pull request.",
2599
+ "x-forges-type": "ReviewRef"
2600
+ },
2601
+ ReviewState: {
2602
+ "type": "string",
2603
+ "enum": [
2604
+ "approved",
2605
+ "changes_requested",
2606
+ "commented",
2607
+ "pending",
2608
+ "dismissed",
2609
+ "unknown"
2610
+ ],
2611
+ "description": "What a review or a reviewer says about a pull request. `unknown` is a state that the model does not name.",
2612
+ "x-forges-type": "ReviewState"
2613
+ },
2614
+ Reviewer: {
2615
+ "type": "object",
2616
+ "properties": {
2617
+ "actor": { "$ref": "#/components/schemas/Actor" },
2618
+ "state": { "$ref": "#/components/schemas/ReviewState" },
2619
+ "stateRaw": { "type": "string" },
2620
+ "isTeam": {
2621
+ "type": "boolean",
2622
+ "description": "True when the reviewer is a team rather than an account."
2623
+ }
2624
+ },
2625
+ "required": ["actor", "state"],
2626
+ "description": "A reviewer who was asked to review a pull request, and what they said.",
2627
+ "x-forges-type": "Reviewer"
2628
+ },
2629
+ SecurityAlert: {
2630
+ "type": "object",
2631
+ "properties": {
2632
+ "ref": { "$ref": "#/components/schemas/SecurityAlertRef" },
2633
+ "kind": { "$ref": "#/components/schemas/SecurityAlertKind" },
2634
+ "kindRaw": { "type": "string" },
2635
+ "severity": { "$ref": "#/components/schemas/SecuritySeverity" },
2636
+ "severityRaw": { "type": "string" },
2637
+ "state": {
2638
+ "type": "string",
2639
+ "enum": [
2640
+ "open",
2641
+ "fixed",
2642
+ "dismissed",
2643
+ "unknown"
2644
+ ]
2645
+ },
2646
+ "stateRaw": { "type": "string" },
2647
+ "title": {
2648
+ "type": "string",
2649
+ "description": "A short description of the problem."
2650
+ },
2651
+ "package": {
2652
+ "type": "object",
2653
+ "properties": {
2654
+ "ecosystem": { "type": "string" },
2655
+ "name": { "type": "string" },
2656
+ "vulnerableRange": { "type": "string" },
2657
+ "fixedIn": { "type": "string" }
2658
+ },
2659
+ "required": ["name"],
2660
+ "description": "`ecosystem` is absent where the forge reports only the package name."
2661
+ },
2662
+ "url": { "type": "string" },
2663
+ "createdAt": {
2664
+ "type": "string",
2665
+ "format": "date-time"
2666
+ },
2667
+ "updatedAt": {
2668
+ "type": "string",
2669
+ "format": "date-time"
2670
+ },
2671
+ "dismissedAt": {
2672
+ "type": "string",
2673
+ "format": "date-time"
2674
+ },
2675
+ "raw": {}
2676
+ },
2677
+ "required": [
2678
+ "ref",
2679
+ "kind",
2680
+ "kindRaw",
2681
+ "severity",
2682
+ "state",
2683
+ "stateRaw",
2684
+ "title",
2685
+ "raw"
2686
+ ],
2687
+ "description": "A security alert on a repository.",
2688
+ "x-forges-type": "SecurityAlert"
2689
+ },
2690
+ SecurityAlertKind: {
2691
+ "type": "string",
2692
+ "enum": [
2693
+ "dependency",
2694
+ "code_scanning",
2695
+ "secret",
2696
+ "advisory",
2697
+ "other"
2698
+ ],
2699
+ "description": "What an alert is about. `other` is a kind that the model does not name.",
2700
+ "x-forges-type": "SecurityAlertKind"
2701
+ },
2702
+ SecurityAlertRef: {
2703
+ "type": "object",
2704
+ "properties": {
2705
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2706
+ "instance": {
2707
+ "$ref": "#/components/schemas/ForgeInstance",
2708
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2709
+ },
2710
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
2711
+ "id": {
2712
+ "type": "string",
2713
+ "description": "Forge-native alert id. GitHub numbers each alert kind separately, so `kind` is needed to address one."
2714
+ },
2715
+ "kind": { "$ref": "#/components/schemas/SecurityAlertKind" },
2716
+ "severityRaw": { "type": "string" }
2717
+ },
2718
+ "required": [
2719
+ "forge",
2720
+ "id",
2721
+ "instance",
2722
+ "repo"
2723
+ ],
2724
+ "description": "A security alert: a vulnerable dependency, a code scanning result, a leaked secret or an advisory.",
2725
+ "x-forges-type": "SecurityAlertRef"
2726
+ },
2727
+ SecuritySeverity: {
2728
+ "type": "string",
2729
+ "enum": [
2730
+ "critical",
2731
+ "high",
2732
+ "medium",
2733
+ "low",
2734
+ "unknown"
2735
+ ],
2736
+ "description": "How severe an alert is. `unknown` is a level that the model does not name.",
2737
+ "x-forges-type": "SecuritySeverity"
2738
+ },
2739
+ SourceKind: {
2740
+ "type": "string",
2741
+ "enum": [
2742
+ "poll",
2743
+ "webhook",
2744
+ "subscribe"
2745
+ ],
2746
+ "description": "How an event reached the caller.",
2747
+ "x-forges-type": "SourceKind"
2748
+ },
2749
+ SubscriptionState: {
2750
+ "type": "string",
2751
+ "enum": [
2752
+ "subscribed",
2753
+ "ignored",
2754
+ "none"
2755
+ ],
2756
+ "description": "Whether the account gets notifications for a thread.",
2757
+ "x-forges-type": "SubscriptionState"
2758
+ },
2759
+ Support: {
2760
+ "anyOf": [
2761
+ { "type": "boolean" },
2762
+ {
2763
+ "type": "string",
2764
+ "const": "emulated"
2765
+ },
2766
+ {
2767
+ "type": "string",
2768
+ "const": "experimental"
2769
+ },
2770
+ {
2771
+ "type": "string",
2772
+ "const": "unverified"
2773
+ }
2774
+ ],
2775
+ "description": "Capability flag. Every value other than `false` means the operation is available:\n\n- `true`: native, and verified against the forge's responses.\n- `'experimental'`: native and verified, but built on an API the forge marks unstable, so it can change.\n- `'emulated'`: composed from other calls, so the result is approximate.\n- `'unverified'`: implemented, but not yet verified against the forge's responses, so it may not work.",
2776
+ "x-forges-type": "Support"
2777
+ },
2778
+ Tag: {
2779
+ "type": "object",
2780
+ "properties": {
2781
+ "name": { "type": "string" },
2782
+ "sha": {
2783
+ "type": "string",
2784
+ "description": "Commit the tag points at, after dereferencing an annotated tag where the forge does so."
2785
+ },
2786
+ "url": { "type": "string" },
2787
+ "raw": {}
2788
+ },
2789
+ "required": [
2790
+ "name",
2791
+ "sha",
2792
+ "raw"
2793
+ ],
2794
+ "description": "A tag of a repository.",
2795
+ "x-forges-type": "Tag"
2796
+ },
2797
+ TextLimits: {
2798
+ "type": "object",
2799
+ "properties": {
2800
+ "bodyLength": { "type": "number" },
2801
+ "commentLength": { "type": "number" },
2802
+ "labelLength": { "type": "number" }
2803
+ },
2804
+ "description": "Maximum lengths the forge accepts, in characters.",
2805
+ "x-forges-type": "TextLimits"
2806
+ },
2807
+ Thread: {
2808
+ "type": "object",
2809
+ "properties": {
2810
+ "ref": { "$ref": "#/components/schemas/ThreadRef" },
2811
+ "kind": { "$ref": "#/components/schemas/ThreadKind" },
2812
+ "title": { "type": "string" },
2813
+ "body": { "type": "string" },
2814
+ "state": { "$ref": "#/components/schemas/ThreadState" },
2815
+ "stateRaw": {
2816
+ "type": "string",
2817
+ "description": "Forge-native state string the normalised `state` was derived from."
2818
+ },
2819
+ "stateReason": {
2820
+ "type": "string",
2821
+ "description": "Forge-native state qualifier, for example `completed` or `not_planned`."
2822
+ },
2823
+ "isDraft": { "type": "boolean" },
2824
+ "author": { "$ref": "#/components/schemas/Actor" },
2825
+ "assignees": {
2826
+ "type": "array",
2827
+ "items": { "$ref": "#/components/schemas/Actor" }
2828
+ },
2829
+ "reviewers": {
2830
+ "type": "array",
2831
+ "items": { "$ref": "#/components/schemas/Reviewer" },
2832
+ "description": "Reviewers the thread read reports. Some forges report outstanding requests only, others each reviewer's verdict; `threads.reviews()` has every submitted review."
2833
+ },
2834
+ "labels": {
2835
+ "type": "array",
2836
+ "items": { "$ref": "#/components/schemas/Label" }
2837
+ },
2838
+ "url": { "type": "string" },
2839
+ "createdAt": {
2840
+ "type": "string",
2841
+ "format": "date-time"
2842
+ },
2843
+ "updatedAt": {
2844
+ "type": "string",
2845
+ "format": "date-time"
2846
+ },
2847
+ "closedAt": {
2848
+ "type": "string",
2849
+ "format": "date-time"
2850
+ },
2851
+ "lastActivityAt": {
2852
+ "type": "string",
2853
+ "format": "date-time",
2854
+ "description": "Latest activity the forge reports for the thread."
2855
+ },
2856
+ "locked": { "type": "boolean" },
2857
+ "commentCount": { "type": "number" },
2858
+ "participants": {
2859
+ "type": "array",
2860
+ "items": { "$ref": "#/components/schemas/Actor" },
2861
+ "description": "Everyone who authored or commented on the thread, where the forge reports them."
2862
+ },
2863
+ "readState": {
2864
+ "type": "string",
2865
+ "enum": ["read", "unread"],
2866
+ "description": "Whether the authenticated account has read the thread, where the forge tracks it per thread."
2867
+ },
2868
+ "subscription": {
2869
+ "$ref": "#/components/schemas/SubscriptionState",
2870
+ "description": "The authenticated account's subscription, where the thread read already carries it."
2871
+ },
2872
+ "milestone": { "$ref": "#/components/schemas/Milestone" },
2873
+ "reactions": { "$ref": "#/components/schemas/ReactionSummary" },
2874
+ "branches": {
2875
+ "$ref": "#/components/schemas/PullBranches",
2876
+ "description": "Pull requests only."
2877
+ },
2878
+ "checks": {
2879
+ "$ref": "#/components/schemas/ChecksSummary",
2880
+ "description": "Pull requests only."
2881
+ },
2882
+ "stack": {
2883
+ "$ref": "#/components/schemas/ThreadStack",
2884
+ "description": "Pull requests in a stack: a chain of dependent pull requests, each based on the one before."
2885
+ },
2886
+ "warnings": {
2887
+ "type": "array",
2888
+ "items": { "$ref": "#/components/schemas/ForgeWarning" },
2889
+ "description": "Non-fatal problems hit while reading the thread, for example an unreachable record."
2890
+ },
2891
+ "raw": { "description": "Unnormalised forge payload, retained for fidelity." }
2892
+ },
2893
+ "required": [
2894
+ "ref",
2895
+ "kind",
2896
+ "title",
2897
+ "state",
2898
+ "isDraft",
2899
+ "assignees",
2900
+ "reviewers",
2901
+ "labels",
2902
+ "raw"
2903
+ ],
2904
+ "description": "An issue, pull request, discussion or commit conversation.",
2905
+ "x-forges-type": "Thread"
2906
+ },
2907
+ ThreadKind: {
2908
+ "type": "string",
2909
+ "enum": [
2910
+ "issue",
2911
+ "pull_request",
2912
+ "discussion",
2913
+ "commit",
2914
+ "other"
2915
+ ],
2916
+ "description": "Kind of thread. `'other'` holds forge-specific subjects with no shared kind (check suites, epics); `ThreadRef.typeRaw` names them.",
2917
+ "x-forges-type": "ThreadKind"
2918
+ },
2919
+ ThreadRef: {
2920
+ "type": "object",
2921
+ "properties": {
2922
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
2923
+ "instance": {
2924
+ "$ref": "#/components/schemas/ForgeInstance",
2925
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
2926
+ },
2927
+ "repo": { "$ref": "#/components/schemas/RepoRef" },
2928
+ "kind": { "$ref": "#/components/schemas/ThreadKind" },
2929
+ "typeRaw": {
2930
+ "type": "string",
2931
+ "description": "Forge-native subject type, for example `PullRequest` or `MergeRequest`."
2932
+ },
2933
+ "number": {
2934
+ "type": "string",
2935
+ "description": "Per-repo thread number, the commit sha for `kind: 'commit'`, or the forge-native id for `kind: 'other'`. Absent when the forge did not identify the thread; such a ref cannot be fetched or keyed until enriched."
2936
+ },
2937
+ "displayNumber": {
2938
+ "type": "string",
2939
+ "description": "Human-facing per-repo number, when it differs from `number`. Tangled identifies threads by AT-URI but shows numbers in its UI and webhooks."
2940
+ },
2941
+ "externalId": {
2942
+ "type": "string",
2943
+ "description": "Globally unique forge-native identifier, where one exists: a GitHub `node_id`, a GitLab global id, or an atproto record URI."
2944
+ }
2945
+ },
2946
+ "required": [
2947
+ "forge",
2948
+ "instance",
2949
+ "kind",
2950
+ "repo"
2951
+ ],
2952
+ "description": "Reference to a thread. A thread `number` is unique only within its repo, so the repo is always carried alongside it.",
2953
+ "x-forges-type": "ThreadRef"
2954
+ },
2955
+ ThreadStack: {
2956
+ "type": "object",
2957
+ "properties": {
2958
+ "id": {
2959
+ "type": "string",
2960
+ "description": "Forge-native stack id, where the forge names stacks."
2961
+ },
2962
+ "parent": {
2963
+ "$ref": "#/components/schemas/ThreadRef",
2964
+ "description": "The pull request this one is stacked on. Absent for the root of the stack."
2965
+ }
2966
+ },
2967
+ "description": "Where a pull request sits in a stack of pull requests.",
2968
+ "x-forges-type": "ThreadStack"
2969
+ },
2970
+ ThreadState: {
2971
+ "type": "string",
2972
+ "enum": [
2973
+ "open",
2974
+ "closed",
2975
+ "merged",
2976
+ "unknown"
2977
+ ],
2978
+ "description": "Thread state. `'unknown'` is distinct from any real state and signals that the value was not present in the payload, so the caller may enrich it with `threads.get()`. Draft status is orthogonal; see `Thread.isDraft`.",
2979
+ "x-forges-type": "ThreadState"
2980
+ },
2981
+ TreeEntry: {
2982
+ "type": "object",
2983
+ "properties": {
2984
+ "path": {
2985
+ "type": "string",
2986
+ "description": "Path from the repository root, without a leading slash."
2987
+ },
2988
+ "type": { "$ref": "#/components/schemas/TreeEntryType" },
2989
+ "sha": { "type": "string" },
2990
+ "size": {
2991
+ "type": "number",
2992
+ "description": "The size in bytes, for a file."
2993
+ },
2994
+ "mode": {
2995
+ "type": "string",
2996
+ "description": "POSIX mode as the forge reports it, for example `100644`."
2997
+ },
2998
+ "url": { "type": "string" }
2999
+ },
3000
+ "required": ["path", "type"],
3001
+ "description": "One entry of a repository tree.",
3002
+ "x-forges-type": "TreeEntry"
3003
+ },
3004
+ TreeEntryType: {
3005
+ "type": "string",
3006
+ "enum": [
3007
+ "file",
3008
+ "directory",
3009
+ "symlink",
3010
+ "submodule"
3011
+ ],
3012
+ "description": "What a tree entry is.",
3013
+ "x-forges-type": "TreeEntryType"
3014
+ },
3015
+ UpsertCommentResult: {
3016
+ "type": "object",
3017
+ "properties": {
3018
+ "comment": {
3019
+ "$ref": "#/components/schemas/Comment",
3020
+ "description": "The comment that was created or edited."
3021
+ },
3022
+ "created": {
3023
+ "type": "boolean",
3024
+ "description": "`false` when an existing comment with the same key was edited."
3025
+ }
3026
+ },
3027
+ "required": ["comment", "created"],
3028
+ "description": "What `threads.upsertComment()` did.",
3029
+ "x-forges-type": "UpsertCommentResult"
3030
+ },
3031
+ User: {
3032
+ "type": "object",
3033
+ "properties": {
3034
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
3035
+ "instance": {
3036
+ "$ref": "#/components/schemas/ForgeInstance",
3037
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
3038
+ },
3039
+ "login": { "type": "string" },
3040
+ "id": { "type": "string" },
3041
+ "name": { "type": "string" },
3042
+ "avatarUrl": { "type": "string" },
3043
+ "url": { "type": "string" },
3044
+ "typeRaw": {
3045
+ "type": "string",
3046
+ "description": "Forge-reported account type, retained verbatim for callers that classify further."
3047
+ },
3048
+ "isBotHint": {
3049
+ "type": "boolean",
3050
+ "description": "Hint derived from forge metadata that the actor is automation. Callers own the classification policy."
3051
+ },
3052
+ "app": {
3053
+ "type": "object",
3054
+ "properties": {
3055
+ "slug": { "type": "string" },
3056
+ "id": { "type": "string" }
3057
+ },
3058
+ "required": ["slug"],
3059
+ "description": "The app behind a bot account, where the forge ties one to it (GitHub Apps' `slug[bot]` users)."
3060
+ },
3061
+ "bio": { "type": "string" },
3062
+ "company": { "type": "string" },
3063
+ "location": { "type": "string" },
3064
+ "websiteUrl": { "type": "string" },
3065
+ "createdAt": {
3066
+ "type": "string",
3067
+ "format": "date-time"
3068
+ },
3069
+ "followers": { "type": "number" },
3070
+ "following": { "type": "number" },
3071
+ "publicRepos": { "type": "number" },
3072
+ "raw": {}
3073
+ },
3074
+ "required": [
3075
+ "forge",
3076
+ "id",
3077
+ "instance",
3078
+ "isBotHint",
3079
+ "login",
3080
+ "raw"
3081
+ ],
3082
+ "description": "A user or organisation account, as `users.get()` reads it.",
3083
+ "x-forges-type": "User"
3084
+ },
3085
+ Webhook: {
3086
+ "type": "object",
3087
+ "properties": {
3088
+ "ref": { "$ref": "#/components/schemas/WebhookRef" },
3089
+ "url": { "type": "string" },
3090
+ "events": {
3091
+ "type": "array",
3092
+ "items": { "$ref": "#/components/schemas/EventKind" },
3093
+ "description": "Normalised kinds the subscription covers, derived from `nativeEvents`."
3094
+ },
3095
+ "nativeEvents": {
3096
+ "type": "array",
3097
+ "items": { "type": "string" },
3098
+ "description": "Forge-native event names exactly as the forge stores them."
3099
+ },
3100
+ "active": { "type": "boolean" },
3101
+ "contentType": {
3102
+ "type": "string",
3103
+ "enum": ["json", "form"],
3104
+ "description": "`'json'` or `'form'` where the forge offers a choice."
3105
+ },
3106
+ "createdAt": {
3107
+ "type": "string",
3108
+ "format": "date-time"
3109
+ },
3110
+ "updatedAt": {
3111
+ "type": "string",
3112
+ "format": "date-time"
3113
+ },
3114
+ "secret": {
3115
+ "not": {},
3116
+ "description": "Never returned: no forge reads a webhook secret back."
3117
+ },
3118
+ "raw": {}
3119
+ },
3120
+ "required": [
3121
+ "ref",
3122
+ "url",
3123
+ "events",
3124
+ "nativeEvents",
3125
+ "active",
3126
+ "raw"
3127
+ ],
3128
+ "description": "A registered webhook. The secret is never readable, so it is never returned.",
3129
+ "x-forges-type": "Webhook"
3130
+ },
3131
+ WebhookDeliveryRecord: {
3132
+ "type": "object",
3133
+ "properties": {
3134
+ "ref": { "$ref": "#/components/schemas/WebhookDeliveryRef" },
3135
+ "event": {
3136
+ "type": "string",
3137
+ "description": "Forge-native event name of the delivery."
3138
+ },
3139
+ "status": {
3140
+ "type": "number",
3141
+ "description": "The HTTP status that the receiver answered with."
3142
+ },
3143
+ "ok": {
3144
+ "type": "boolean",
3145
+ "description": "`true` when the forge considered the delivery successful."
3146
+ },
3147
+ "deliveredAt": {
3148
+ "type": "string",
3149
+ "format": "date-time"
3150
+ },
3151
+ "duration": {
3152
+ "type": "number",
3153
+ "description": "Round trip in milliseconds, where the forge reports it."
3154
+ },
3155
+ "raw": {}
3156
+ },
3157
+ "required": [
3158
+ "ref",
3159
+ "event",
3160
+ "status",
3161
+ "ok",
3162
+ "raw"
3163
+ ],
3164
+ "description": "One recorded delivery attempt.",
3165
+ "x-forges-type": "WebhookDeliveryRecord"
3166
+ },
3167
+ WebhookDeliveryRef: {
3168
+ "type": "object",
3169
+ "properties": {
3170
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
3171
+ "instance": {
3172
+ "$ref": "#/components/schemas/ForgeInstance",
3173
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
3174
+ },
3175
+ "hook": { "$ref": "#/components/schemas/WebhookRef" },
3176
+ "id": { "type": "string" },
3177
+ "guid": {
3178
+ "type": "string",
3179
+ "description": "Delivery guid, where the forge needs it to redeliver."
3180
+ }
3181
+ },
3182
+ "required": [
3183
+ "forge",
3184
+ "hook",
3185
+ "id",
3186
+ "instance"
3187
+ ],
3188
+ "description": "Reference to one delivery of a webhook.",
3189
+ "x-forges-type": "WebhookDeliveryRef"
3190
+ },
3191
+ WebhookRef: {
3192
+ "type": "object",
3193
+ "properties": {
3194
+ "forge": { "$ref": "#/components/schemas/ForgeKind" },
3195
+ "instance": {
3196
+ "$ref": "#/components/schemas/ForgeInstance",
3197
+ "description": "The host of the instance, such as `github.com` or `git.example.com`."
3198
+ },
3199
+ "target": {
3200
+ "$ref": "#/components/schemas/RepoRef",
3201
+ "description": "The repository or namespace that the hook is registered on."
3202
+ },
3203
+ "id": {
3204
+ "type": "string",
3205
+ "description": "Forge-native hook id."
3206
+ }
3207
+ },
3208
+ "required": [
3209
+ "forge",
3210
+ "id",
3211
+ "instance",
3212
+ "target"
3213
+ ],
3214
+ "description": "Reference to a registered webhook. `target` is the repository, or a namespace ref (`kind: 'namespace'`, empty `name`) for an organisation or workspace hook.",
3215
+ "x-forges-type": "WebhookRef"
3216
+ }
3217
+ };
3218
+ //#endregion
3219
+ export { schemas };