@gitkraken/core-gitlens 0.3.1 → 0.4.100

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 (1070) hide show
  1. package/CHANGELOG.md +83 -1
  2. package/README.md +22 -12
  3. package/dist/git/cache.d.ts +29 -2
  4. package/dist/git/cache.d.ts.map +1 -1
  5. package/dist/git/cache.js +67 -7
  6. package/dist/git/cache.js.map +1 -1
  7. package/dist/git/context.d.ts +4 -3
  8. package/dist/git/context.d.ts.map +1 -1
  9. package/dist/git/context.js.map +1 -1
  10. package/dist/git/errors.d.ts +31 -1
  11. package/dist/git/errors.d.ts.map +1 -1
  12. package/dist/git/errors.js +29 -0
  13. package/dist/git/errors.js.map +1 -1
  14. package/dist/git/models/author.d.ts.map +1 -1
  15. package/dist/git/models/author.js.map +1 -1
  16. package/dist/git/models/autolink.d.ts.map +1 -1
  17. package/dist/git/models/autolink.js.map +1 -1
  18. package/dist/git/models/blame.d.ts.map +1 -1
  19. package/dist/git/models/blame.js.map +1 -1
  20. package/dist/git/models/branch.d.ts.map +1 -1
  21. package/dist/git/models/branch.js.map +1 -1
  22. package/dist/git/models/commit.d.ts.map +1 -1
  23. package/dist/git/models/commit.js +1 -1
  24. package/dist/git/models/commit.js.map +1 -1
  25. package/dist/git/models/contributor.d.ts.map +1 -1
  26. package/dist/git/models/contributor.js.map +1 -1
  27. package/dist/git/models/defaultBranch.d.ts.map +1 -1
  28. package/dist/git/models/defaultBranch.js.map +1 -1
  29. package/dist/git/models/diff.d.ts.map +1 -1
  30. package/dist/git/models/diff.js.map +1 -1
  31. package/dist/git/models/file.d.ts.map +1 -1
  32. package/dist/git/models/file.js.map +1 -1
  33. package/dist/git/models/fileChange.d.ts.map +1 -1
  34. package/dist/git/models/fileChange.js.map +1 -1
  35. package/dist/git/models/fileStatus.d.ts +22 -22
  36. package/dist/git/models/fileStatus.d.ts.map +1 -1
  37. package/dist/git/models/fileStatus.js.map +1 -1
  38. package/dist/git/models/graph.d.ts +122 -1
  39. package/dist/git/models/graph.d.ts.map +1 -1
  40. package/dist/git/models/graph.js +4 -0
  41. package/dist/git/models/graph.js.map +1 -1
  42. package/dist/git/models/graphSearch.d.ts.map +1 -1
  43. package/dist/git/models/graphSearch.js.map +1 -1
  44. package/dist/git/models/graphSession.d.ts +177 -0
  45. package/dist/git/models/graphSession.d.ts.map +1 -0
  46. package/dist/git/models/graphSession.js +7 -0
  47. package/dist/git/models/graphSession.js.map +1 -0
  48. package/dist/git/models/issue.d.ts +12 -2
  49. package/dist/git/models/issue.d.ts.map +1 -1
  50. package/dist/git/models/issue.js +3 -1
  51. package/dist/git/models/issue.js.map +1 -1
  52. package/dist/git/models/issueOrPullRequest.d.ts.map +1 -1
  53. package/dist/git/models/issueOrPullRequest.js.map +1 -1
  54. package/dist/git/models/lineRange.d.ts.map +1 -1
  55. package/dist/git/models/lineRange.js.map +1 -1
  56. package/dist/git/models/log.d.ts.map +1 -1
  57. package/dist/git/models/log.js.map +1 -1
  58. package/dist/git/models/mergeConflicts.d.ts.map +1 -1
  59. package/dist/git/models/mergeConflicts.js.map +1 -1
  60. package/dist/git/models/patch.d.ts.map +1 -1
  61. package/dist/git/models/patch.js.map +1 -1
  62. package/dist/git/models/pausedOperationStatus.d.ts.map +1 -1
  63. package/dist/git/models/pausedOperationStatus.js.map +1 -1
  64. package/dist/git/models/pullRequest.d.ts +27 -2
  65. package/dist/git/models/pullRequest.d.ts.map +1 -1
  66. package/dist/git/models/pullRequest.js +7 -1
  67. package/dist/git/models/pullRequest.js.map +1 -1
  68. package/dist/git/models/rebase.d.ts.map +1 -1
  69. package/dist/git/models/rebase.js.map +1 -1
  70. package/dist/git/models/reference.d.ts.map +1 -1
  71. package/dist/git/models/reference.js.map +1 -1
  72. package/dist/git/models/reflog.d.ts.map +1 -1
  73. package/dist/git/models/reflog.js.map +1 -1
  74. package/dist/git/models/remote.d.ts.map +1 -1
  75. package/dist/git/models/remote.js.map +1 -1
  76. package/dist/git/models/remoteProvider.d.ts.map +1 -1
  77. package/dist/git/models/remoteProvider.js.map +1 -1
  78. package/dist/git/models/remoteResource.d.ts.map +1 -1
  79. package/dist/git/models/remoteResource.js.map +1 -1
  80. package/dist/git/models/repository.d.ts +20 -2
  81. package/dist/git/models/repository.d.ts.map +1 -1
  82. package/dist/git/models/repository.js +19 -0
  83. package/dist/git/models/repository.js.map +1 -1
  84. package/dist/git/models/repositoryChangeEvent.d.ts.map +1 -1
  85. package/dist/git/models/repositoryChangeEvent.js.map +1 -1
  86. package/dist/git/models/repositoryIdentities.d.ts.map +1 -1
  87. package/dist/git/models/repositoryIdentities.js.map +1 -1
  88. package/dist/git/models/repositoryMetadata.d.ts.map +1 -1
  89. package/dist/git/models/repositoryMetadata.js.map +1 -1
  90. package/dist/git/models/resourceDescriptor.d.ts +16 -0
  91. package/dist/git/models/resourceDescriptor.d.ts.map +1 -1
  92. package/dist/git/models/resourceDescriptor.js.map +1 -1
  93. package/dist/git/models/revision.d.ts.map +1 -1
  94. package/dist/git/models/revision.js.map +1 -1
  95. package/dist/git/models/search.d.ts.map +1 -1
  96. package/dist/git/models/search.js.map +1 -1
  97. package/dist/git/models/shortlog.d.ts.map +1 -1
  98. package/dist/git/models/shortlog.js.map +1 -1
  99. package/dist/git/models/signature.d.ts +14 -0
  100. package/dist/git/models/signature.d.ts.map +1 -1
  101. package/dist/git/models/signature.js.map +1 -1
  102. package/dist/git/models/staging.d.ts.map +1 -1
  103. package/dist/git/models/staging.js.map +1 -1
  104. package/dist/git/models/stash.d.ts.map +1 -1
  105. package/dist/git/models/stash.js.map +1 -1
  106. package/dist/git/models/status.d.ts.map +1 -1
  107. package/dist/git/models/status.js.map +1 -1
  108. package/dist/git/models/statusFile.d.ts.map +1 -1
  109. package/dist/git/models/statusFile.js.map +1 -1
  110. package/dist/git/models/tag.d.ts +11 -1
  111. package/dist/git/models/tag.d.ts.map +1 -1
  112. package/dist/git/models/tag.js +9 -2
  113. package/dist/git/models/tag.js.map +1 -1
  114. package/dist/git/models/tree.d.ts.map +1 -1
  115. package/dist/git/models/tree.js.map +1 -1
  116. package/dist/git/models/user.d.ts.map +1 -1
  117. package/dist/git/models/user.js.map +1 -1
  118. package/dist/git/models/worktree.d.ts.map +1 -1
  119. package/dist/git/models/worktree.js.map +1 -1
  120. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  121. package/dist/git/parsers/diffParser.js +1 -1
  122. package/dist/git/parsers/diffParser.js.map +1 -1
  123. package/dist/git/parsers/rebaseTodoParser.d.ts.map +1 -1
  124. package/dist/git/parsers/rebaseTodoParser.js.map +1 -1
  125. package/dist/git/providers/blame.d.ts.map +1 -1
  126. package/dist/git/providers/blame.js.map +1 -1
  127. package/dist/git/providers/branches.d.ts +8 -1
  128. package/dist/git/providers/branches.d.ts.map +1 -1
  129. package/dist/git/providers/branches.js.map +1 -1
  130. package/dist/git/providers/commits.d.ts +6 -1
  131. package/dist/git/providers/commits.d.ts.map +1 -1
  132. package/dist/git/providers/commits.js.map +1 -1
  133. package/dist/git/providers/config.d.ts +6 -2
  134. package/dist/git/providers/config.d.ts.map +1 -1
  135. package/dist/git/providers/config.js.map +1 -1
  136. package/dist/git/providers/contributors.d.ts.map +1 -1
  137. package/dist/git/providers/contributors.js.map +1 -1
  138. package/dist/git/providers/diff.d.ts.map +1 -1
  139. package/dist/git/providers/diff.js.map +1 -1
  140. package/dist/git/providers/graph.d.ts +55 -1
  141. package/dist/git/providers/graph.d.ts.map +1 -1
  142. package/dist/git/providers/graph.js.map +1 -1
  143. package/dist/git/providers/operations.d.ts +1 -0
  144. package/dist/git/providers/operations.d.ts.map +1 -1
  145. package/dist/git/providers/operations.js.map +1 -1
  146. package/dist/git/providers/patch.d.ts.map +1 -1
  147. package/dist/git/providers/patch.js.map +1 -1
  148. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  149. package/dist/git/providers/pausedOperations.js.map +1 -1
  150. package/dist/git/providers/provider.d.ts.map +1 -1
  151. package/dist/git/providers/provider.js.map +1 -1
  152. package/dist/git/providers/refs.d.ts.map +1 -1
  153. package/dist/git/providers/refs.js.map +1 -1
  154. package/dist/git/providers/remotes.d.ts.map +1 -1
  155. package/dist/git/providers/remotes.js.map +1 -1
  156. package/dist/git/providers/revision.d.ts.map +1 -1
  157. package/dist/git/providers/revision.js.map +1 -1
  158. package/dist/git/providers/shared/remotes.d.ts.map +1 -1
  159. package/dist/git/providers/shared/remotes.js.map +1 -1
  160. package/dist/git/providers/staging.d.ts.map +1 -1
  161. package/dist/git/providers/staging.js.map +1 -1
  162. package/dist/git/providers/stash.d.ts.map +1 -1
  163. package/dist/git/providers/stash.js.map +1 -1
  164. package/dist/git/providers/status.d.ts +1 -0
  165. package/dist/git/providers/status.d.ts.map +1 -1
  166. package/dist/git/providers/status.js.map +1 -1
  167. package/dist/git/providers/tags.d.ts.map +1 -1
  168. package/dist/git/providers/tags.js.map +1 -1
  169. package/dist/git/providers/types.d.ts.map +1 -1
  170. package/dist/git/providers/types.js.map +1 -1
  171. package/dist/git/providers/worktrees.d.ts +5 -1
  172. package/dist/git/providers/worktrees.d.ts.map +1 -1
  173. package/dist/git/providers/worktrees.js.map +1 -1
  174. package/dist/git/remotes/azure-devops.d.ts.map +1 -1
  175. package/dist/git/remotes/azure-devops.js +27 -31
  176. package/dist/git/remotes/azure-devops.js.map +1 -1
  177. package/dist/git/remotes/bitbucket-server.d.ts.map +1 -1
  178. package/dist/git/remotes/bitbucket-server.js +21 -23
  179. package/dist/git/remotes/bitbucket-server.js.map +1 -1
  180. package/dist/git/remotes/bitbucket.d.ts.map +1 -1
  181. package/dist/git/remotes/bitbucket.js +21 -23
  182. package/dist/git/remotes/bitbucket.js.map +1 -1
  183. package/dist/git/remotes/custom.d.ts.map +1 -1
  184. package/dist/git/remotes/custom.js.map +1 -1
  185. package/dist/git/remotes/gerrit.d.ts.map +1 -1
  186. package/dist/git/remotes/gerrit.js +11 -13
  187. package/dist/git/remotes/gerrit.js.map +1 -1
  188. package/dist/git/remotes/gitea.d.ts.map +1 -1
  189. package/dist/git/remotes/gitea.js +12 -14
  190. package/dist/git/remotes/gitea.js.map +1 -1
  191. package/dist/git/remotes/github.d.ts.map +1 -1
  192. package/dist/git/remotes/github.js +54 -56
  193. package/dist/git/remotes/github.js.map +1 -1
  194. package/dist/git/remotes/gitlab.d.ts.map +1 -1
  195. package/dist/git/remotes/gitlab.js +93 -95
  196. package/dist/git/remotes/gitlab.js.map +1 -1
  197. package/dist/git/remotes/google-source.d.ts.map +1 -1
  198. package/dist/git/remotes/google-source.js.map +1 -1
  199. package/dist/git/remotes/matcher.d.ts.map +1 -1
  200. package/dist/git/remotes/matcher.js.map +1 -1
  201. package/dist/git/run.types.d.ts +62 -3
  202. package/dist/git/run.types.d.ts.map +1 -1
  203. package/dist/git/service.d.ts.map +1 -1
  204. package/dist/git/utils/autolink.utils.d.ts.map +1 -1
  205. package/dist/git/utils/autolink.utils.js.map +1 -1
  206. package/dist/git/utils/blame.utils.d.ts.map +1 -1
  207. package/dist/git/utils/blame.utils.js.map +1 -1
  208. package/dist/git/utils/branch.utils.d.ts.map +1 -1
  209. package/dist/git/utils/branch.utils.js +12 -1
  210. package/dist/git/utils/branch.utils.js.map +1 -1
  211. package/dist/git/utils/commit.utils.d.ts.map +1 -1
  212. package/dist/git/utils/commit.utils.js.map +1 -1
  213. package/dist/git/utils/conflictResolution.utils.d.ts +32 -0
  214. package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -1
  215. package/dist/git/utils/conflictResolution.utils.js +95 -0
  216. package/dist/git/utils/conflictResolution.utils.js.map +1 -1
  217. package/dist/git/utils/contributor.utils.d.ts +1 -1
  218. package/dist/git/utils/contributor.utils.d.ts.map +1 -1
  219. package/dist/git/utils/contributor.utils.js +1 -2
  220. package/dist/git/utils/contributor.utils.js.map +1 -1
  221. package/dist/git/utils/fetch.utils.d.ts.map +1 -1
  222. package/dist/git/utils/fetch.utils.js.map +1 -1
  223. package/dist/git/utils/fileStatus.utils.d.ts +7 -0
  224. package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
  225. package/dist/git/utils/fileStatus.utils.js +6 -0
  226. package/dist/git/utils/fileStatus.utils.js.map +1 -1
  227. package/dist/git/utils/graph.utils.d.ts +20 -0
  228. package/dist/git/utils/graph.utils.d.ts.map +1 -0
  229. package/dist/git/utils/graph.utils.js +40 -0
  230. package/dist/git/utils/graph.utils.js.map +1 -0
  231. package/dist/git/utils/issue.utils.d.ts.map +1 -1
  232. package/dist/git/utils/issue.utils.js +1 -0
  233. package/dist/git/utils/issue.utils.js.map +1 -1
  234. package/dist/git/utils/issueOrPullRequest.utils.d.ts.map +1 -1
  235. package/dist/git/utils/issueOrPullRequest.utils.js.map +1 -1
  236. package/dist/git/utils/mergeConflicts.utils.d.ts.map +1 -1
  237. package/dist/git/utils/mergeConflicts.utils.js.map +1 -1
  238. package/dist/git/utils/pausedOperationStatus.utils.d.ts +13 -13
  239. package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
  240. package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
  241. package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
  242. package/dist/git/utils/pullRequest.utils.js +9 -0
  243. package/dist/git/utils/pullRequest.utils.js.map +1 -1
  244. package/dist/git/utils/reachability.utils.d.ts +20 -2
  245. package/dist/git/utils/reachability.utils.d.ts.map +1 -1
  246. package/dist/git/utils/reachability.utils.js +68 -7
  247. package/dist/git/utils/reachability.utils.js.map +1 -1
  248. package/dist/git/utils/rebase.utils.d.ts.map +1 -1
  249. package/dist/git/utils/rebase.utils.js.map +1 -1
  250. package/dist/git/utils/reference.utils.d.ts.map +1 -1
  251. package/dist/git/utils/reference.utils.js.map +1 -1
  252. package/dist/git/utils/remote.utils.d.ts.map +1 -1
  253. package/dist/git/utils/remote.utils.js.map +1 -1
  254. package/dist/git/utils/repository.utils.d.ts.map +1 -1
  255. package/dist/git/utils/repository.utils.js.map +1 -1
  256. package/dist/git/utils/resourceDescriptor.utils.d.ts.map +1 -1
  257. package/dist/git/utils/resourceDescriptor.utils.js.map +1 -1
  258. package/dist/git/utils/revision.utils.d.ts.map +1 -1
  259. package/dist/git/utils/revision.utils.js.map +1 -1
  260. package/dist/git/utils/search.utils.d.ts.map +1 -1
  261. package/dist/git/utils/search.utils.js.map +1 -1
  262. package/dist/git/utils/sorting.d.ts.map +1 -1
  263. package/dist/git/utils/sorting.js.map +1 -1
  264. package/dist/git/utils/sshKey.utils.d.ts +7 -0
  265. package/dist/git/utils/sshKey.utils.d.ts.map +1 -0
  266. package/dist/git/utils/sshKey.utils.js +25 -0
  267. package/dist/git/utils/sshKey.utils.js.map +1 -0
  268. package/dist/git/utils/status.utils.d.ts.map +1 -1
  269. package/dist/git/utils/status.utils.js.map +1 -1
  270. package/dist/git/utils/statusFile.utils.d.ts.map +1 -1
  271. package/dist/git/utils/statusFile.utils.js.map +1 -1
  272. package/dist/git/utils/tag.utils.d.ts.map +1 -1
  273. package/dist/git/utils/tag.utils.js.map +1 -1
  274. package/dist/git/utils/tooltip.utils.d.ts.map +1 -1
  275. package/dist/git/utils/tooltip.utils.js.map +1 -1
  276. package/dist/git/utils/uriAuthority.d.ts.map +1 -1
  277. package/dist/git/utils/uriAuthority.js.map +1 -1
  278. package/dist/git/utils/user.utils.d.ts.map +1 -1
  279. package/dist/git/utils/user.utils.js.map +1 -1
  280. package/dist/git/utils/worktree.utils.d.ts.map +1 -1
  281. package/dist/git/utils/worktree.utils.js.map +1 -1
  282. package/dist/git/watching/changeEvent.d.ts.map +1 -1
  283. package/dist/git/watching/changeEvent.js.map +1 -1
  284. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  285. package/dist/git/watching/classifyChange.js.map +1 -1
  286. package/dist/git/watching/gitIgnoreFilter.d.ts.map +1 -1
  287. package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
  288. package/dist/git/watching/initWatcher.d.ts.map +1 -1
  289. package/dist/git/watching/initWatcher.js.map +1 -1
  290. package/dist/git/watching/provider.d.ts.map +1 -1
  291. package/dist/git/watching/provider.js.map +1 -1
  292. package/dist/git/watching/watchGroup.d.ts.map +1 -1
  293. package/dist/git/watching/watchGroup.js.map +1 -1
  294. package/dist/git/watching/watchService.d.ts +4 -0
  295. package/dist/git/watching/watchService.d.ts.map +1 -1
  296. package/dist/git/watching/watchService.js +15 -1
  297. package/dist/git/watching/watchService.js.map +1 -1
  298. package/dist/git/watching/watchSession.d.ts +7 -0
  299. package/dist/git/watching/watchSession.d.ts.map +1 -1
  300. package/dist/git/watching/watchSession.js +14 -2
  301. package/dist/git/watching/watchSession.js.map +1 -1
  302. package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
  303. package/dist/git/watching/watcherPatterns.js.map +1 -1
  304. package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
  305. package/dist/git-cli/exec/exec.d.ts.map +1 -1
  306. package/dist/git-cli/exec/exec.errors.d.ts.map +1 -1
  307. package/dist/git-cli/exec/exec.errors.js.map +1 -1
  308. package/dist/git-cli/exec/exec.js.map +1 -1
  309. package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
  310. package/dist/git-cli/exec/exec.types.js.map +1 -1
  311. package/dist/git-cli/exec/features.d.ts.map +1 -1
  312. package/dist/git-cli/exec/features.js.map +1 -1
  313. package/dist/git-cli/exec/git.d.ts +19 -27
  314. package/dist/git-cli/exec/git.d.ts.map +1 -1
  315. package/dist/git-cli/exec/git.js +126 -34
  316. package/dist/git-cli/exec/git.js.map +1 -1
  317. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  318. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  319. package/dist/git-cli/exec/locator.d.ts.map +1 -1
  320. package/dist/git-cli/exec/locator.js.map +1 -1
  321. package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
  322. package/dist/git-cli/parsers/blameParser.js.map +1 -1
  323. package/dist/git-cli/parsers/indexParser.d.ts.map +1 -1
  324. package/dist/git-cli/parsers/indexParser.js.map +1 -1
  325. package/dist/git-cli/parsers/logParser.d.ts +9 -1
  326. package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
  327. package/dist/git-cli/parsers/logParser.js +141 -60
  328. package/dist/git-cli/parsers/logParser.js.map +1 -1
  329. package/dist/git-cli/parsers/mergeTreeParser.d.ts.map +1 -1
  330. package/dist/git-cli/parsers/mergeTreeParser.js.map +1 -1
  331. package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
  332. package/dist/git-cli/parsers/refParser.js.map +1 -1
  333. package/dist/git-cli/parsers/reflogParser.d.ts.map +1 -1
  334. package/dist/git-cli/parsers/reflogParser.js.map +1 -1
  335. package/dist/git-cli/parsers/remoteParser.d.ts.map +1 -1
  336. package/dist/git-cli/parsers/remoteParser.js.map +1 -1
  337. package/dist/git-cli/parsers/shortlogParser.d.ts.map +1 -1
  338. package/dist/git-cli/parsers/shortlogParser.js.map +1 -1
  339. package/dist/git-cli/parsers/signatureParser.d.ts.map +1 -1
  340. package/dist/git-cli/parsers/signatureParser.js.map +1 -1
  341. package/dist/git-cli/parsers/sshSignatureParser.d.ts +21 -0
  342. package/dist/git-cli/parsers/sshSignatureParser.d.ts.map +1 -0
  343. package/dist/git-cli/parsers/sshSignatureParser.js +78 -0
  344. package/dist/git-cli/parsers/sshSignatureParser.js.map +1 -0
  345. package/dist/git-cli/parsers/statusParser.d.ts.map +1 -1
  346. package/dist/git-cli/parsers/statusParser.js.map +1 -1
  347. package/dist/git-cli/parsers/treeParser.d.ts.map +1 -1
  348. package/dist/git-cli/parsers/treeParser.js.map +1 -1
  349. package/dist/git-cli/parsers/worktreeParser.d.ts.map +1 -1
  350. package/dist/git-cli/parsers/worktreeParser.js +5 -7
  351. package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
  352. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  353. package/dist/git-cli/providers/blame.js.map +1 -1
  354. package/dist/git-cli/providers/branches.d.ts +1 -0
  355. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  356. package/dist/git-cli/providers/branches.js +51 -32
  357. package/dist/git-cli/providers/branches.js.map +1 -1
  358. package/dist/git-cli/providers/commitFilesetUtils.d.ts.map +1 -1
  359. package/dist/git-cli/providers/commitFilesetUtils.js.map +1 -1
  360. package/dist/git-cli/providers/commits.d.ts +12 -1
  361. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  362. package/dist/git-cli/providers/commits.js +89 -8
  363. package/dist/git-cli/providers/commits.js.map +1 -1
  364. package/dist/git-cli/providers/config.d.ts.map +1 -1
  365. package/dist/git-cli/providers/config.js.map +1 -1
  366. package/dist/git-cli/providers/contributors.d.ts.map +1 -1
  367. package/dist/git-cli/providers/contributors.js.map +1 -1
  368. package/dist/git-cli/providers/diff.d.ts.map +1 -1
  369. package/dist/git-cli/providers/diff.js.map +1 -1
  370. package/dist/git-cli/providers/graph.d.ts +35 -1
  371. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  372. package/dist/git-cli/providers/graph.js +1434 -330
  373. package/dist/git-cli/providers/graph.js.map +1 -1
  374. package/dist/git-cli/providers/operations.d.ts +1 -0
  375. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  376. package/dist/git-cli/providers/operations.js +22 -1
  377. package/dist/git-cli/providers/operations.js.map +1 -1
  378. package/dist/git-cli/providers/patch.d.ts.map +1 -1
  379. package/dist/git-cli/providers/patch.js.map +1 -1
  380. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  381. package/dist/git-cli/providers/pausedOperations.js +3 -3
  382. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  383. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  384. package/dist/git-cli/providers/refs.js.map +1 -1
  385. package/dist/git-cli/providers/remotes.d.ts.map +1 -1
  386. package/dist/git-cli/providers/remotes.js.map +1 -1
  387. package/dist/git-cli/providers/revision.d.ts +1 -0
  388. package/dist/git-cli/providers/revision.d.ts.map +1 -1
  389. package/dist/git-cli/providers/revision.js +33 -0
  390. package/dist/git-cli/providers/revision.js.map +1 -1
  391. package/dist/git-cli/providers/staging.d.ts.map +1 -1
  392. package/dist/git-cli/providers/staging.js.map +1 -1
  393. package/dist/git-cli/providers/stash.d.ts.map +1 -1
  394. package/dist/git-cli/providers/stash.js.map +1 -1
  395. package/dist/git-cli/providers/status.d.ts +28 -0
  396. package/dist/git-cli/providers/status.d.ts.map +1 -1
  397. package/dist/git-cli/providers/status.js +240 -154
  398. package/dist/git-cli/providers/status.js.map +1 -1
  399. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  400. package/dist/git-cli/providers/tags.js +2 -1
  401. package/dist/git-cli/providers/tags.js.map +1 -1
  402. package/dist/git-cli/providers/worktrees.d.ts +4 -1
  403. package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
  404. package/dist/git-cli/providers/worktrees.js +31 -3
  405. package/dist/git-cli/providers/worktrees.js.map +1 -1
  406. package/dist/git-cli/service.d.ts.map +1 -1
  407. package/dist/git-cli/service.js +8 -0
  408. package/dist/git-cli/service.js.map +1 -1
  409. package/dist/ipc/ipcServer.d.ts.map +1 -1
  410. package/dist/ipc/ipcServer.js +1 -1
  411. package/dist/ipc/ipcServer.js.map +1 -1
  412. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +6 -1
  413. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
  414. package/dist/plus/agents/providers/claudeCodeProvider.js +19 -0
  415. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
  416. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +68 -0
  417. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
  418. package/dist/plus/agents/providers/claudeCodeTranscript.js +262 -8
  419. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
  420. package/dist/plus/agents/types.d.ts +36 -2
  421. package/dist/plus/agents/types.d.ts.map +1 -1
  422. package/dist/plus/ai/constants.d.ts +1 -2
  423. package/dist/plus/ai/constants.d.ts.map +1 -1
  424. package/dist/plus/ai/constants.js +1 -8
  425. package/dist/plus/ai/constants.js.map +1 -1
  426. package/dist/plus/ai/errors.d.ts.map +1 -1
  427. package/dist/plus/ai/errors.js.map +1 -1
  428. package/dist/plus/ai/models/conversation.d.ts.map +1 -1
  429. package/dist/plus/ai/models/conversation.js.map +1 -1
  430. package/dist/plus/ai/models/model.d.ts +2 -1
  431. package/dist/plus/ai/models/model.d.ts.map +1 -1
  432. package/dist/plus/ai/models/model.js +50 -1
  433. package/dist/plus/ai/models/model.js.map +1 -1
  434. package/dist/plus/ai/models/promptTemplates.d.ts +5 -2
  435. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  436. package/dist/plus/ai/models/promptTemplates.js.map +1 -1
  437. package/dist/plus/ai/models/provider.d.ts.map +1 -1
  438. package/dist/plus/ai/models/provider.js.map +1 -1
  439. package/dist/plus/ai/models/results.d.ts.map +1 -1
  440. package/dist/plus/ai/models/results.js.map +1 -1
  441. package/dist/plus/ai/prompts.d.ts +1 -1
  442. package/dist/plus/ai/prompts.d.ts.map +1 -1
  443. package/dist/plus/ai/prompts.js +15 -47
  444. package/dist/plus/ai/prompts.js.map +1 -1
  445. package/dist/plus/ai/providers/anthropicProvider.d.ts +5 -0
  446. package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
  447. package/dist/plus/ai/providers/anthropicProvider.js +40 -3
  448. package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
  449. package/dist/plus/ai/providers/azureProvider.d.ts.map +1 -1
  450. package/dist/plus/ai/providers/azureProvider.js.map +1 -1
  451. package/dist/plus/ai/providers/context.d.ts.map +1 -1
  452. package/dist/plus/ai/providers/context.js.map +1 -1
  453. package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
  454. package/dist/plus/ai/providers/deepSeekProvider.js +17 -1
  455. package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
  456. package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
  457. package/dist/plus/ai/providers/geminiProvider.js +25 -6
  458. package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
  459. package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
  460. package/dist/plus/ai/providers/gitkrakenProvider.js +1 -0
  461. package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
  462. package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -1
  463. package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
  464. package/dist/plus/ai/providers/huggingFaceProvider.js +21 -18
  465. package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
  466. package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
  467. package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
  468. package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
  469. package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
  470. package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
  471. package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
  472. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +10 -1
  473. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
  474. package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -1
  475. package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
  476. package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
  477. package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
  478. package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
  479. package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
  480. package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
  481. package/dist/plus/ai/providers/xaiProvider.js +14 -1
  482. package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
  483. package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
  484. package/dist/plus/ai/utils/ai.utils.js +5 -7
  485. package/dist/plus/ai/utils/ai.utils.js.map +1 -1
  486. package/dist/plus/ai/utils/results.utils.d.ts +3 -0
  487. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  488. package/dist/plus/ai/utils/results.utils.js +26 -0
  489. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  490. package/dist/plus/ai/utils/truncation.utils.d.ts +1 -1
  491. package/dist/plus/ai/utils/truncation.utils.d.ts.map +1 -1
  492. package/dist/plus/ai/utils/truncation.utils.js.map +1 -1
  493. package/dist/plus/git-github/api/config.d.ts.map +1 -1
  494. package/dist/plus/git-github/api/config.js.map +1 -1
  495. package/dist/plus/git-github/api/github.d.ts +71 -15
  496. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  497. package/dist/plus/git-github/api/github.js +350 -84
  498. package/dist/plus/git-github/api/github.js.map +1 -1
  499. package/dist/plus/git-github/api/github.utils.d.ts.map +1 -1
  500. package/dist/plus/git-github/api/github.utils.js.map +1 -1
  501. package/dist/plus/git-github/api/token.d.ts.map +1 -1
  502. package/dist/plus/git-github/api/token.js.map +1 -1
  503. package/dist/plus/git-github/api/tokenUtils.d.ts.map +1 -1
  504. package/dist/plus/git-github/api/tokenUtils.js.map +1 -1
  505. package/dist/plus/git-github/api/types.d.ts.map +1 -1
  506. package/dist/plus/git-github/api/types.js.map +1 -1
  507. package/dist/plus/git-github/context.d.ts.map +1 -1
  508. package/dist/plus/git-github/models.d.ts +5 -0
  509. package/dist/plus/git-github/models.d.ts.map +1 -1
  510. package/dist/plus/git-github/models.js +27 -2
  511. package/dist/plus/git-github/models.js.map +1 -1
  512. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  513. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  514. package/dist/plus/git-github/providers/github/branches.d.ts +2 -1
  515. package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
  516. package/dist/plus/git-github/providers/github/branches.js +7 -3
  517. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  518. package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
  519. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  520. package/dist/plus/git-github/providers/github/config.d.ts.map +1 -1
  521. package/dist/plus/git-github/providers/github/config.js.map +1 -1
  522. package/dist/plus/git-github/providers/github/contributors.d.ts.map +1 -1
  523. package/dist/plus/git-github/providers/github/contributors.js.map +1 -1
  524. package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
  525. package/dist/plus/git-github/providers/github/diff.js +2 -2
  526. package/dist/plus/git-github/providers/github/diff.js.map +1 -1
  527. package/dist/plus/git-github/providers/github/graph.d.ts +12 -1
  528. package/dist/plus/git-github/providers/github/graph.d.ts.map +1 -1
  529. package/dist/plus/git-github/providers/github/graph.js +85 -0
  530. package/dist/plus/git-github/providers/github/graph.js.map +1 -1
  531. package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
  532. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  533. package/dist/plus/git-github/providers/github/remotes.d.ts.map +1 -1
  534. package/dist/plus/git-github/providers/github/remotes.js.map +1 -1
  535. package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
  536. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  537. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  538. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  539. package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
  540. package/dist/plus/git-github/providers/github/tags.js +3 -1
  541. package/dist/plus/git-github/providers/github/tags.js.map +1 -1
  542. package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
  543. package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
  544. package/dist/plus/git-github/providers/githubProvider.d.ts.map +1 -1
  545. package/dist/plus/git-github/providers/githubProvider.js.map +1 -1
  546. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts +30 -0
  547. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts.map +1 -0
  548. package/dist/plus/integrations/authentication/cloudIntegrationService.js +214 -0
  549. package/dist/plus/integrations/authentication/cloudIntegrationService.js.map +1 -0
  550. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts +114 -0
  551. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts.map +1 -0
  552. package/dist/plus/integrations/authentication/configuredIntegrationService.js +497 -0
  553. package/dist/plus/integrations/authentication/configuredIntegrationService.js.map +1 -0
  554. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts +112 -0
  555. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts.map +1 -0
  556. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js +217 -0
  557. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js.map +1 -0
  558. package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts +62 -0
  559. package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts.map +1 -0
  560. package/dist/plus/integrations/authentication/integrationAuthenticationService.js +126 -0
  561. package/dist/plus/integrations/authentication/integrationAuthenticationService.js.map +1 -0
  562. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts +16 -0
  563. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts.map +1 -0
  564. package/dist/plus/integrations/authentication/manualTokenProvider.js +53 -0
  565. package/dist/plus/integrations/authentication/manualTokenProvider.js.map +1 -0
  566. package/dist/plus/integrations/authentication/models.d.ts +120 -0
  567. package/dist/plus/integrations/authentication/models.d.ts.map +1 -0
  568. package/dist/plus/integrations/authentication/models.js +64 -0
  569. package/dist/plus/integrations/authentication/models.js.map +1 -0
  570. package/dist/plus/integrations/collectionMetadata.d.ts +21 -0
  571. package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -0
  572. package/dist/plus/integrations/collectionMetadata.js +121 -0
  573. package/dist/plus/integrations/collectionMetadata.js.map +1 -0
  574. package/dist/plus/integrations/constants.d.ts +57 -0
  575. package/dist/plus/integrations/constants.d.ts.map +1 -0
  576. package/dist/plus/integrations/constants.js +138 -0
  577. package/dist/plus/integrations/constants.js.map +1 -0
  578. package/dist/plus/integrations/context.d.ts +358 -0
  579. package/dist/plus/integrations/context.d.ts.map +1 -0
  580. package/dist/plus/integrations/context.js +2 -0
  581. package/dist/plus/integrations/context.js.map +1 -0
  582. package/dist/plus/integrations/errors.d.ts +79 -0
  583. package/dist/plus/integrations/errors.d.ts.map +1 -0
  584. package/dist/plus/integrations/errors.js +150 -0
  585. package/dist/plus/integrations/errors.js.map +1 -0
  586. package/dist/plus/integrations/index.d.ts +77 -0
  587. package/dist/plus/integrations/index.d.ts.map +1 -0
  588. package/dist/plus/integrations/index.js +64 -0
  589. package/dist/plus/integrations/index.js.map +1 -0
  590. package/dist/plus/integrations/integrationService.d.ts +379 -0
  591. package/dist/plus/integrations/integrationService.d.ts.map +1 -0
  592. package/dist/plus/integrations/integrationService.js +1895 -0
  593. package/dist/plus/integrations/integrationService.js.map +1 -0
  594. package/dist/plus/integrations/lite.d.ts +47 -0
  595. package/dist/plus/integrations/lite.d.ts.map +1 -0
  596. package/dist/plus/integrations/lite.js +141 -0
  597. package/dist/plus/integrations/lite.js.map +1 -0
  598. package/dist/plus/integrations/manager.d.ts +332 -0
  599. package/dist/plus/integrations/manager.d.ts.map +1 -0
  600. package/dist/plus/integrations/manager.js +2 -0
  601. package/dist/plus/integrations/manager.js.map +1 -0
  602. package/dist/plus/integrations/models/gitHostIntegration.d.ts +341 -0
  603. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -0
  604. package/dist/plus/integrations/models/gitHostIntegration.js +1146 -0
  605. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -0
  606. package/dist/plus/integrations/models/integration.d.ts +212 -0
  607. package/dist/plus/integrations/models/integration.d.ts.map +1 -0
  608. package/dist/plus/integrations/models/integration.js +627 -0
  609. package/dist/plus/integrations/models/integration.js.map +1 -0
  610. package/dist/plus/integrations/models/issuesIntegration.d.ts +108 -0
  611. package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -0
  612. package/dist/plus/integrations/models/issuesIntegration.js +216 -0
  613. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -0
  614. package/dist/plus/integrations/providerFilters.d.ts +12 -0
  615. package/dist/plus/integrations/providerFilters.d.ts.map +1 -0
  616. package/dist/plus/integrations/providerFilters.js +14 -0
  617. package/dist/plus/integrations/providerFilters.js.map +1 -0
  618. package/dist/plus/integrations/providers/apiClients.d.ts +25 -0
  619. package/dist/plus/integrations/providers/apiClients.d.ts.map +1 -0
  620. package/dist/plus/integrations/providers/apiClients.js +39 -0
  621. package/dist/plus/integrations/providers/apiClients.js.map +1 -0
  622. package/dist/plus/integrations/providers/apiConfig.d.ts +52 -0
  623. package/dist/plus/integrations/providers/apiConfig.d.ts.map +1 -0
  624. package/dist/plus/integrations/providers/apiConfig.js +19 -0
  625. package/dist/plus/integrations/providers/apiConfig.js.map +1 -0
  626. package/dist/plus/integrations/providers/azure/azure.d.ts +59 -0
  627. package/dist/plus/integrations/providers/azure/azure.d.ts.map +1 -0
  628. package/dist/plus/integrations/providers/azure/azure.js +519 -0
  629. package/dist/plus/integrations/providers/azure/azure.js.map +1 -0
  630. package/dist/plus/integrations/providers/azure/models.d.ts +302 -0
  631. package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -0
  632. package/dist/plus/integrations/providers/azure/models.js +203 -0
  633. package/dist/plus/integrations/providers/azure/models.js.map +1 -0
  634. package/dist/plus/integrations/providers/azureDevOps.d.ts +141 -0
  635. package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -0
  636. package/dist/plus/integrations/providers/azureDevOps.js +925 -0
  637. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -0
  638. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +53 -0
  639. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts.map +1 -0
  640. package/dist/plus/integrations/providers/bitbucket/bitbucket.js +589 -0
  641. package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -0
  642. package/dist/plus/integrations/providers/bitbucket/models.d.ts +222 -0
  643. package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -0
  644. package/dist/plus/integrations/providers/bitbucket/models.js +158 -0
  645. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -0
  646. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +138 -0
  647. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts.map +1 -0
  648. package/dist/plus/integrations/providers/bitbucket-server/models.js +130 -0
  649. package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -0
  650. package/dist/plus/integrations/providers/bitbucket-server.d.ts +84 -0
  651. package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -0
  652. package/dist/plus/integrations/providers/bitbucket-server.js +242 -0
  653. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -0
  654. package/dist/plus/integrations/providers/bitbucket.d.ts +84 -0
  655. package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -0
  656. package/dist/plus/integrations/providers/bitbucket.js +477 -0
  657. package/dist/plus/integrations/providers/bitbucket.js.map +1 -0
  658. package/dist/plus/integrations/providers/github/github.d.ts +5 -0
  659. package/dist/plus/integrations/providers/github/github.d.ts.map +1 -0
  660. package/dist/plus/integrations/providers/github/github.js +47 -0
  661. package/dist/plus/integrations/providers/github/github.js.map +1 -0
  662. package/dist/plus/integrations/providers/github/github.utils.d.ts +11 -0
  663. package/dist/plus/integrations/providers/github/github.utils.d.ts.map +1 -0
  664. package/dist/plus/integrations/providers/github/github.utils.js +6 -0
  665. package/dist/plus/integrations/providers/github/github.utils.js.map +1 -0
  666. package/dist/plus/integrations/providers/github/models.d.ts +3 -0
  667. package/dist/plus/integrations/providers/github/models.d.ts.map +1 -0
  668. package/dist/plus/integrations/providers/github/models.js +2 -0
  669. package/dist/plus/integrations/providers/github/models.js.map +1 -0
  670. package/dist/plus/integrations/providers/github.d.ts +116 -0
  671. package/dist/plus/integrations/providers/github.d.ts.map +1 -0
  672. package/dist/plus/integrations/providers/github.js +445 -0
  673. package/dist/plus/integrations/providers/github.js.map +1 -0
  674. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +71 -0
  675. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts.map +1 -0
  676. package/dist/plus/integrations/providers/gitlab/gitlab.js +902 -0
  677. package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -0
  678. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts +27 -0
  679. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts.map +1 -0
  680. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js +53 -0
  681. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js.map +1 -0
  682. package/dist/plus/integrations/providers/gitlab/models.d.ts +138 -0
  683. package/dist/plus/integrations/providers/gitlab/models.d.ts.map +1 -0
  684. package/dist/plus/integrations/providers/gitlab/models.js +99 -0
  685. package/dist/plus/integrations/providers/gitlab/models.js.map +1 -0
  686. package/dist/plus/integrations/providers/gitlab.d.ts +124 -0
  687. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -0
  688. package/dist/plus/integrations/providers/gitlab.js +519 -0
  689. package/dist/plus/integrations/providers/gitlab.js.map +1 -0
  690. package/dist/plus/integrations/providers/jira.d.ts +57 -0
  691. package/dist/plus/integrations/providers/jira.d.ts.map +1 -0
  692. package/dist/plus/integrations/providers/jira.js +425 -0
  693. package/dist/plus/integrations/providers/jira.js.map +1 -0
  694. package/dist/plus/integrations/providers/linear.d.ts +58 -0
  695. package/dist/plus/integrations/providers/linear.d.ts.map +1 -0
  696. package/dist/plus/integrations/providers/linear.js +304 -0
  697. package/dist/plus/integrations/providers/linear.js.map +1 -0
  698. package/dist/plus/integrations/providers/models.d.ts +712 -0
  699. package/dist/plus/integrations/providers/models.d.ts.map +1 -0
  700. package/dist/plus/integrations/providers/models.js +850 -0
  701. package/dist/plus/integrations/providers/models.js.map +1 -0
  702. package/dist/plus/integrations/providers/providersApi.d.ts +262 -0
  703. package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -0
  704. package/dist/plus/integrations/providers/providersApi.js +1033 -0
  705. package/dist/plus/integrations/providers/providersApi.js.map +1 -0
  706. package/dist/plus/integrations/providers/trello.d.ts +47 -0
  707. package/dist/plus/integrations/providers/trello.d.ts.map +1 -0
  708. package/dist/plus/integrations/providers/trello.js +141 -0
  709. package/dist/plus/integrations/providers/trello.js.map +1 -0
  710. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +29 -0
  711. package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -0
  712. package/dist/plus/integrations/providers/utils/providerPaging.js +154 -0
  713. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -0
  714. package/dist/plus/integrations/providers/utils.d.ts +75 -0
  715. package/dist/plus/integrations/providers/utils.d.ts.map +1 -0
  716. package/dist/plus/integrations/providers/utils.js +313 -0
  717. package/dist/plus/integrations/providers/utils.js.map +1 -0
  718. package/dist/plus/integrations/reads/context.d.ts +52 -0
  719. package/dist/plus/integrations/reads/context.d.ts.map +1 -0
  720. package/dist/plus/integrations/reads/context.js +2 -0
  721. package/dist/plus/integrations/reads/context.js.map +1 -0
  722. package/dist/plus/integrations/reads/cursors.d.ts +66 -0
  723. package/dist/plus/integrations/reads/cursors.d.ts.map +1 -0
  724. package/dist/plus/integrations/reads/cursors.js +133 -0
  725. package/dist/plus/integrations/reads/cursors.js.map +1 -0
  726. package/dist/plus/integrations/reads/drains.d.ts +60 -0
  727. package/dist/plus/integrations/reads/drains.d.ts.map +1 -0
  728. package/dist/plus/integrations/reads/drains.js +255 -0
  729. package/dist/plus/integrations/reads/drains.js.map +1 -0
  730. package/dist/plus/integrations/reads/filters.d.ts +81 -0
  731. package/dist/plus/integrations/reads/filters.d.ts.map +1 -0
  732. package/dist/plus/integrations/reads/filters.js +87 -0
  733. package/dist/plus/integrations/reads/filters.js.map +1 -0
  734. package/dist/plus/integrations/reads/hierarchy.d.ts +17 -0
  735. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -0
  736. package/dist/plus/integrations/reads/hierarchy.js +348 -0
  737. package/dist/plus/integrations/reads/hierarchy.js.map +1 -0
  738. package/dist/plus/integrations/reads/hierarchy.utils.d.ts +53 -0
  739. package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -0
  740. package/dist/plus/integrations/reads/hierarchy.utils.js +85 -0
  741. package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -0
  742. package/dist/plus/integrations/reads/issueTracker.d.ts +19 -0
  743. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -0
  744. package/dist/plus/integrations/reads/issueTracker.js +346 -0
  745. package/dist/plus/integrations/reads/issueTracker.js.map +1 -0
  746. package/dist/plus/integrations/reads/issues.d.ts +34 -0
  747. package/dist/plus/integrations/reads/issues.d.ts.map +1 -0
  748. package/dist/plus/integrations/reads/issues.js +244 -0
  749. package/dist/plus/integrations/reads/issues.js.map +1 -0
  750. package/dist/plus/integrations/reads/paging.d.ts +136 -0
  751. package/dist/plus/integrations/reads/paging.d.ts.map +1 -0
  752. package/dist/plus/integrations/reads/paging.js +221 -0
  753. package/dist/plus/integrations/reads/paging.js.map +1 -0
  754. package/dist/plus/integrations/reads/pullRequests.d.ts +32 -0
  755. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -0
  756. package/dist/plus/integrations/reads/pullRequests.js +151 -0
  757. package/dist/plus/integrations/reads/pullRequests.js.map +1 -0
  758. package/dist/plus/integrations/reads/warnings.d.ts +47 -0
  759. package/dist/plus/integrations/reads/warnings.d.ts.map +1 -0
  760. package/dist/plus/integrations/reads/warnings.js +81 -0
  761. package/dist/plus/integrations/reads/warnings.js.map +1 -0
  762. package/dist/plus/integrations/results.d.ts +189 -0
  763. package/dist/plus/integrations/results.d.ts.map +1 -0
  764. package/dist/plus/integrations/results.js +62 -0
  765. package/dist/plus/integrations/results.js.map +1 -0
  766. package/dist/plus/integrations/telemetry.d.ts +26 -0
  767. package/dist/plus/integrations/telemetry.d.ts.map +1 -0
  768. package/dist/plus/integrations/telemetry.js +11 -0
  769. package/dist/plus/integrations/telemetry.js.map +1 -0
  770. package/dist/plus/integrations/utils/domain.utils.d.ts +5 -0
  771. package/dist/plus/integrations/utils/domain.utils.d.ts.map +1 -0
  772. package/dist/plus/integrations/utils/domain.utils.js +27 -0
  773. package/dist/plus/integrations/utils/domain.utils.js.map +1 -0
  774. package/dist/plus/integrations/utils/integration.utils.d.ts +40 -0
  775. package/dist/plus/integrations/utils/integration.utils.d.ts.map +1 -0
  776. package/dist/plus/integrations/utils/integration.utils.js +182 -0
  777. package/dist/plus/integrations/utils/integration.utils.js.map +1 -0
  778. package/dist/utils/array.d.ts.map +1 -1
  779. package/dist/utils/array.js.map +1 -1
  780. package/dist/utils/brand.d.ts.map +1 -1
  781. package/dist/utils/cancellation.d.ts +13 -0
  782. package/dist/utils/cancellation.d.ts.map +1 -1
  783. package/dist/utils/cancellation.js +52 -7
  784. package/dist/utils/cancellation.js.map +1 -1
  785. package/dist/utils/charCode.d.ts.map +1 -1
  786. package/dist/utils/coalescedRun.d.ts +16 -0
  787. package/dist/utils/coalescedRun.d.ts.map +1 -0
  788. package/dist/utils/coalescedRun.js +43 -0
  789. package/dist/utils/coalescedRun.js.map +1 -0
  790. package/dist/utils/color.d.ts.map +1 -1
  791. package/dist/utils/color.js +3 -3
  792. package/dist/utils/color.js.map +1 -1
  793. package/dist/utils/date.d.ts +24 -0
  794. package/dist/utils/date.d.ts.map +1 -1
  795. package/dist/utils/date.js +62 -0
  796. package/dist/utils/date.js.map +1 -1
  797. package/dist/utils/debounce.js +1 -1
  798. package/dist/utils/debounce.js.map +1 -1
  799. package/dist/utils/decorators/debounce.d.ts.map +1 -1
  800. package/dist/utils/decorators/debounce.js.map +1 -1
  801. package/dist/utils/decorators/gate.d.ts.map +1 -1
  802. package/dist/utils/decorators/gate.js +2 -2
  803. package/dist/utils/decorators/gate.js.map +1 -1
  804. package/dist/utils/decorators/log.d.ts.map +1 -1
  805. package/dist/utils/decorators/log.js +5 -5
  806. package/dist/utils/decorators/log.js.map +1 -1
  807. package/dist/utils/decorators/memoize.d.ts.map +1 -1
  808. package/dist/utils/decorators/memoize.js +2 -2
  809. package/dist/utils/decorators/memoize.js.map +1 -1
  810. package/dist/utils/decorators/resolver.d.ts.map +1 -1
  811. package/dist/utils/decorators/resolver.js.map +1 -1
  812. package/dist/utils/decorators/sequentialize.d.ts.map +1 -1
  813. package/dist/utils/decorators/sequentialize.js +2 -2
  814. package/dist/utils/decorators/sequentialize.js.map +1 -1
  815. package/dist/utils/decorators/serializable.d.ts.map +1 -1
  816. package/dist/utils/decorators/serializable.js +1 -1
  817. package/dist/utils/decorators/serializable.js.map +1 -1
  818. package/dist/utils/dedupedAsyncCache.d.ts.map +1 -1
  819. package/dist/utils/disposable.d.ts +15 -2
  820. package/dist/utils/disposable.d.ts.map +1 -1
  821. package/dist/utils/disposable.js.map +1 -1
  822. package/dist/utils/env/browser/base64.d.ts.map +1 -1
  823. package/dist/utils/env/browser/base64.js.map +1 -1
  824. package/dist/utils/env/browser/crypto.d.ts.map +1 -1
  825. package/dist/utils/env/browser/crypto.js.map +1 -1
  826. package/dist/utils/env/browser/fs.d.ts.map +1 -1
  827. package/dist/utils/env/browser/fs.js.map +1 -1
  828. package/dist/utils/env/browser/hex.d.ts.map +1 -1
  829. package/dist/utils/env/browser/hex.js.map +1 -1
  830. package/dist/utils/env/browser/hrtime.d.ts.map +1 -1
  831. package/dist/utils/env/browser/hrtime.js.map +1 -1
  832. package/dist/utils/env/browser/logScope.d.ts.map +1 -1
  833. package/dist/utils/env/browser/logScope.js.map +1 -1
  834. package/dist/utils/env/browser/md5.d.ts.map +1 -1
  835. package/dist/utils/env/browser/md5.js.map +1 -1
  836. package/dist/utils/env/browser/platform.d.ts.map +1 -1
  837. package/dist/utils/env/browser/platform.js.map +1 -1
  838. package/dist/utils/env/node/base64.d.ts.map +1 -1
  839. package/dist/utils/env/node/base64.js.map +1 -1
  840. package/dist/utils/env/node/crypto.d.ts.map +1 -1
  841. package/dist/utils/env/node/crypto.js.map +1 -1
  842. package/dist/utils/env/node/exec.d.ts +9 -1
  843. package/dist/utils/env/node/exec.d.ts.map +1 -1
  844. package/dist/utils/env/node/exec.js +11 -4
  845. package/dist/utils/env/node/exec.js.map +1 -1
  846. package/dist/utils/env/node/fs.d.ts.map +1 -1
  847. package/dist/utils/env/node/fs.js.map +1 -1
  848. package/dist/utils/env/node/hex.d.ts.map +1 -1
  849. package/dist/utils/env/node/hex.js.map +1 -1
  850. package/dist/utils/env/node/hrtime.d.ts.map +1 -1
  851. package/dist/utils/env/node/hrtime.js.map +1 -1
  852. package/dist/utils/env/node/logScope.d.ts.map +1 -1
  853. package/dist/utils/env/node/logScope.js.map +1 -1
  854. package/dist/utils/env/node/platform.d.ts.map +1 -1
  855. package/dist/utils/env/node/platform.js.map +1 -1
  856. package/dist/utils/event.d.ts.map +1 -1
  857. package/dist/utils/event.js +18 -22
  858. package/dist/utils/event.js.map +1 -1
  859. package/dist/utils/formatter.d.ts.map +1 -1
  860. package/dist/utils/formatter.js.map +1 -1
  861. package/dist/utils/function.d.ts.map +1 -1
  862. package/dist/utils/function.js +3 -3
  863. package/dist/utils/function.js.map +1 -1
  864. package/dist/utils/hash.js.map +1 -1
  865. package/dist/utils/iterable.d.ts.map +1 -1
  866. package/dist/utils/iterable.js +2 -6
  867. package/dist/utils/iterable.js.map +1 -1
  868. package/dist/utils/lazy.d.ts.map +1 -1
  869. package/dist/utils/lazy.js.map +1 -1
  870. package/dist/utils/logger.d.ts.map +1 -1
  871. package/dist/utils/logger.js +1 -1
  872. package/dist/utils/logger.js.map +1 -1
  873. package/dist/utils/logger.scoped.js +1 -1
  874. package/dist/utils/logger.scoped.js.map +1 -1
  875. package/dist/utils/lruMap.d.ts.map +1 -1
  876. package/dist/utils/lruMap.js.map +1 -1
  877. package/dist/utils/mru.d.ts.map +1 -1
  878. package/dist/utils/mru.js.map +1 -1
  879. package/dist/utils/object.js.map +1 -1
  880. package/dist/utils/paging.d.ts +29 -0
  881. package/dist/utils/paging.d.ts.map +1 -1
  882. package/dist/utils/paging.js +18 -0
  883. package/dist/utils/paging.js.map +1 -1
  884. package/dist/utils/path.js.map +1 -1
  885. package/dist/utils/promise.d.ts +10 -0
  886. package/dist/utils/promise.d.ts.map +1 -1
  887. package/dist/utils/promise.js +26 -3
  888. package/dist/utils/promise.js.map +1 -1
  889. package/dist/utils/promiseCache.d.ts +12 -2
  890. package/dist/utils/promiseCache.d.ts.map +1 -1
  891. package/dist/utils/promiseCache.js +80 -50
  892. package/dist/utils/promiseCache.js.map +1 -1
  893. package/dist/utils/searchTree.d.ts.map +1 -1
  894. package/dist/utils/searchTree.js +4 -1
  895. package/dist/utils/searchTree.js.map +1 -1
  896. package/dist/utils/stopwatch.d.ts.map +1 -1
  897. package/dist/utils/string.js +1 -1
  898. package/dist/utils/string.js.map +1 -1
  899. package/dist/utils/subscriptionManager.d.ts.map +1 -1
  900. package/dist/utils/subscriptionManager.js.map +1 -1
  901. package/dist/utils/trie.d.ts.map +1 -1
  902. package/dist/utils/trie.js +1 -0
  903. package/dist/utils/trie.js.map +1 -1
  904. package/docs/integrations.md +372 -0
  905. package/docs/kepler-read-api-parity.md +112 -0
  906. package/package.json +238 -172
  907. package/src/git/cache.ts +75 -8
  908. package/src/git/context.ts +4 -3
  909. package/src/git/errors.ts +36 -1
  910. package/src/git/models/commit.ts +1 -1
  911. package/src/git/models/graph.ts +147 -0
  912. package/src/git/models/graphSession.ts +205 -0
  913. package/src/git/models/issue.ts +12 -1
  914. package/src/git/models/pullRequest.ts +27 -1
  915. package/src/git/models/repository.ts +24 -1
  916. package/src/git/models/resourceDescriptor.ts +17 -0
  917. package/src/git/models/signature.ts +16 -0
  918. package/src/git/models/tag.ts +6 -1
  919. package/src/git/parsers/diffParser.ts +1 -1
  920. package/src/git/providers/branches.ts +6 -1
  921. package/src/git/providers/commits.ts +6 -1
  922. package/src/git/providers/config.ts +5 -1
  923. package/src/git/providers/graph.ts +69 -2
  924. package/src/git/providers/operations.ts +1 -1
  925. package/src/git/providers/status.ts +1 -1
  926. package/src/git/providers/worktrees.ts +17 -3
  927. package/src/git/remotes/azure-devops.ts +29 -33
  928. package/src/git/remotes/bitbucket-server.ts +23 -25
  929. package/src/git/remotes/bitbucket.ts +23 -25
  930. package/src/git/remotes/gerrit.ts +12 -14
  931. package/src/git/remotes/gitea.ts +13 -15
  932. package/src/git/remotes/github.ts +56 -58
  933. package/src/git/remotes/gitlab.ts +102 -104
  934. package/src/git/run.types.ts +54 -4
  935. package/src/git/utils/branch.utils.ts +12 -1
  936. package/src/git/utils/conflictResolution.utils.ts +126 -0
  937. package/src/git/utils/contributor.utils.ts +1 -1
  938. package/src/git/utils/fileStatus.utils.ts +7 -0
  939. package/src/git/utils/graph.utils.ts +46 -0
  940. package/src/git/utils/issue.utils.ts +1 -0
  941. package/src/git/utils/pullRequest.utils.ts +9 -0
  942. package/src/git/utils/reachability.utils.ts +79 -8
  943. package/src/git/utils/sshKey.utils.ts +30 -0
  944. package/src/git/watching/watchService.ts +16 -1
  945. package/src/git/watching/watchSession.ts +20 -2
  946. package/src/git-cli/exec/git.ts +144 -42
  947. package/src/git-cli/parsers/logParser.ts +83 -1
  948. package/src/git-cli/parsers/sshSignatureParser.ts +85 -0
  949. package/src/git-cli/parsers/worktreeParser.ts +5 -7
  950. package/src/git-cli/providers/branches.ts +60 -38
  951. package/src/git-cli/providers/commits.ts +102 -9
  952. package/src/git-cli/providers/graph.ts +1771 -393
  953. package/src/git-cli/providers/operations.ts +22 -2
  954. package/src/git-cli/providers/pausedOperations.ts +3 -3
  955. package/src/git-cli/providers/revision.ts +42 -0
  956. package/src/git-cli/providers/status.ts +333 -178
  957. package/src/git-cli/providers/tags.ts +2 -0
  958. package/src/git-cli/providers/worktrees.ts +57 -6
  959. package/src/git-cli/service.ts +9 -0
  960. package/src/ipc/ipcServer.ts +1 -1
  961. package/src/plus/agents/providers/claudeCodeProvider.ts +25 -0
  962. package/src/plus/agents/providers/claudeCodeTranscript.ts +320 -8
  963. package/src/plus/agents/types.ts +34 -0
  964. package/src/plus/ai/constants.ts +1 -9
  965. package/src/plus/ai/models/model.ts +53 -2
  966. package/src/plus/ai/models/promptTemplates.ts +9 -2
  967. package/src/plus/ai/prompts.ts +16 -48
  968. package/src/plus/ai/providers/anthropicProvider.ts +45 -3
  969. package/src/plus/ai/providers/deepSeekProvider.ts +17 -1
  970. package/src/plus/ai/providers/geminiProvider.ts +25 -6
  971. package/src/plus/ai/providers/gitkrakenProvider.ts +2 -0
  972. package/src/plus/ai/providers/huggingFaceProvider.ts +28 -21
  973. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +16 -1
  974. package/src/plus/ai/providers/xaiProvider.ts +14 -1
  975. package/src/plus/ai/utils/ai.utils.ts +5 -7
  976. package/src/plus/ai/utils/results.utils.ts +32 -0
  977. package/src/plus/ai/utils/truncation.utils.ts +0 -1
  978. package/src/plus/git-github/api/github.ts +497 -129
  979. package/src/plus/git-github/models.ts +33 -0
  980. package/src/plus/git-github/providers/github/branches.ts +6 -3
  981. package/src/plus/git-github/providers/github/diff.ts +1 -1
  982. package/src/plus/git-github/providers/github/graph.ts +131 -0
  983. package/src/plus/git-github/providers/github/tags.ts +2 -0
  984. package/src/plus/integrations/authentication/cloudIntegrationService.ts +292 -0
  985. package/src/plus/integrations/authentication/configuredIntegrationService.ts +651 -0
  986. package/src/plus/integrations/authentication/integrationAuthenticationProvider.ts +363 -0
  987. package/src/plus/integrations/authentication/integrationAuthenticationService.ts +148 -0
  988. package/src/plus/integrations/authentication/manualTokenProvider.ts +79 -0
  989. package/src/plus/integrations/authentication/models.ts +202 -0
  990. package/src/plus/integrations/collectionMetadata.ts +143 -0
  991. package/src/plus/integrations/constants.ts +190 -0
  992. package/src/plus/integrations/context.ts +382 -0
  993. package/src/plus/integrations/errors.ts +184 -0
  994. package/src/plus/integrations/index.ts +216 -0
  995. package/src/plus/integrations/integrationService.ts +2589 -0
  996. package/src/plus/integrations/lite.ts +233 -0
  997. package/src/plus/integrations/manager.ts +359 -0
  998. package/src/plus/integrations/models/gitHostIntegration.ts +1631 -0
  999. package/src/plus/integrations/models/integration.ts +926 -0
  1000. package/src/plus/integrations/models/issuesIntegration.ts +264 -0
  1001. package/src/plus/integrations/providerFilters.ts +12 -0
  1002. package/src/plus/integrations/providers/apiClients.ts +69 -0
  1003. package/src/plus/integrations/providers/apiConfig.ts +71 -0
  1004. package/src/plus/integrations/providers/azure/azure.ts +822 -0
  1005. package/src/plus/integrations/providers/azure/models.ts +618 -0
  1006. package/src/plus/integrations/providers/azureDevOps.ts +1342 -0
  1007. package/src/plus/integrations/providers/bitbucket/bitbucket.ts +904 -0
  1008. package/src/plus/integrations/providers/bitbucket/models.ts +445 -0
  1009. package/src/plus/integrations/providers/bitbucket-server/models.ts +283 -0
  1010. package/src/plus/integrations/providers/bitbucket-server.ts +447 -0
  1011. package/src/plus/integrations/providers/bitbucket.ts +794 -0
  1012. package/src/plus/integrations/providers/github/github.ts +64 -0
  1013. package/src/plus/integrations/providers/github/github.utils.ts +23 -0
  1014. package/src/plus/integrations/providers/github/models.ts +29 -0
  1015. package/src/plus/integrations/providers/github.ts +750 -0
  1016. package/src/plus/integrations/providers/gitlab/gitlab.ts +1320 -0
  1017. package/src/plus/integrations/providers/gitlab/gitlab.utils.ts +80 -0
  1018. package/src/plus/integrations/providers/gitlab/models.ts +271 -0
  1019. package/src/plus/integrations/providers/gitlab.ts +832 -0
  1020. package/src/plus/integrations/providers/jira.ts +564 -0
  1021. package/src/plus/integrations/providers/linear.ts +402 -0
  1022. package/src/plus/integrations/providers/models.ts +1622 -0
  1023. package/src/plus/integrations/providers/providersApi.ts +1889 -0
  1024. package/src/plus/integrations/providers/trello.ts +205 -0
  1025. package/src/plus/integrations/providers/utils/providerPaging.ts +177 -0
  1026. package/src/plus/integrations/providers/utils.ts +419 -0
  1027. package/src/plus/integrations/reads/context.ts +75 -0
  1028. package/src/plus/integrations/reads/cursors.ts +224 -0
  1029. package/src/plus/integrations/reads/drains.ts +343 -0
  1030. package/src/plus/integrations/reads/filters.ts +124 -0
  1031. package/src/plus/integrations/reads/hierarchy.ts +493 -0
  1032. package/src/plus/integrations/reads/hierarchy.utils.ts +106 -0
  1033. package/src/plus/integrations/reads/issueTracker.ts +480 -0
  1034. package/src/plus/integrations/reads/issues.ts +407 -0
  1035. package/src/plus/integrations/reads/paging.ts +277 -0
  1036. package/src/plus/integrations/reads/pullRequests.ts +267 -0
  1037. package/src/plus/integrations/reads/warnings.ts +170 -0
  1038. package/src/plus/integrations/results.ts +275 -0
  1039. package/src/plus/integrations/telemetry.ts +29 -0
  1040. package/src/plus/integrations/utils/domain.utils.ts +26 -0
  1041. package/src/plus/integrations/utils/integration.utils.ts +215 -0
  1042. package/src/utils/brand.ts +0 -2
  1043. package/src/utils/cancellation.ts +56 -7
  1044. package/src/utils/coalescedRun.ts +45 -0
  1045. package/src/utils/color.ts +3 -3
  1046. package/src/utils/date.ts +72 -0
  1047. package/src/utils/debounce.ts +1 -1
  1048. package/src/utils/decorators/gate.ts +2 -2
  1049. package/src/utils/decorators/log.ts +5 -5
  1050. package/src/utils/decorators/memoize.ts +2 -2
  1051. package/src/utils/decorators/sequentialize.ts +2 -2
  1052. package/src/utils/decorators/serializable.ts +1 -1
  1053. package/src/utils/disposable.ts +15 -2
  1054. package/src/utils/env/node/exec.ts +20 -5
  1055. package/src/utils/event.ts +19 -25
  1056. package/src/utils/function.ts +3 -3
  1057. package/src/utils/iterable.ts +2 -6
  1058. package/src/utils/logger.scoped.ts +1 -1
  1059. package/src/utils/logger.ts +1 -1
  1060. package/src/utils/paging.ts +46 -0
  1061. package/src/utils/promise.ts +33 -3
  1062. package/src/utils/promiseCache.ts +81 -51
  1063. package/src/utils/searchTree.ts +4 -2
  1064. package/src/utils/string.ts +1 -1
  1065. package/src/utils/trie.ts +1 -0
  1066. package/dist/plus/ai/providers/githubModelsProvider.d.ts +0 -19
  1067. package/dist/plus/ai/providers/githubModelsProvider.d.ts.map +0 -1
  1068. package/dist/plus/ai/providers/githubModelsProvider.js +0 -51
  1069. package/dist/plus/ai/providers/githubModelsProvider.js.map +0 -1
  1070. package/src/plus/ai/providers/githubModelsProvider.ts +0 -92
@@ -0,0 +1,1320 @@
1
+ import type { Account } from '../../../../git/models/author.js';
2
+ import type { DefaultBranch } from '../../../../git/models/defaultBranch.js';
3
+ import type { IssueOrPullRequest } from '../../../../git/models/issueOrPullRequest.js';
4
+ import { PullRequest } from '../../../../git/models/pullRequest.js';
5
+ import type { PullRequestState } from '../../../../git/models/pullRequest.js';
6
+ import type { Provider } from '../../../../git/models/remoteProvider.js';
7
+ import type { RepositoryMetadata } from '../../../../git/models/repositoryMetadata.js';
8
+ import { CancellationError } from '../../../../utils/cancellation.js';
9
+ import { trace } from '../../../../utils/decorators/log.js';
10
+ import type { Disposable } from '../../../../utils/disposable.js';
11
+ import { Logger } from '../../../../utils/logger.js';
12
+ import type { ScopedLogger } from '../../../../utils/logger.scoped.js';
13
+ import { getScopedLogger } from '../../../../utils/logger.scoped.js';
14
+ import { maybeStopWatch } from '../../../../utils/stopwatch.js';
15
+ import { equalsIgnoreCase } from '../../../../utils/string.js';
16
+ import { joinUriPath, parseUri } from '../../../../utils/uri.js';
17
+ import type { TokenWithInfo } from '../../authentication/models.js';
18
+ import type { IntegrationServiceContext } from '../../context.js';
19
+ import {
20
+ AuthenticationError,
21
+ AuthenticationErrorReason,
22
+ isRateLimitResponse,
23
+ ProviderFetchError,
24
+ RequestClientError,
25
+ RequestNotFoundError,
26
+ toRateLimitError,
27
+ } from '../../errors.js';
28
+ import type { ProviderApiConfig } from '../apiConfig.js';
29
+ import { baseProviderApiConfig } from '../apiConfig.js';
30
+ import { selectGitLabUserForCommit } from './gitlab.utils.js';
31
+ import type {
32
+ GitLabCommit,
33
+ GitLabIssue,
34
+ GitLabMergeRequest,
35
+ GitLabMergeRequestFull,
36
+ GitLabMergeRequestREST,
37
+ GitLabMergeRequestState,
38
+ GitLabProjectREST,
39
+ GitLabSshKey,
40
+ GitLabUser,
41
+ } from './models.js';
42
+ import {
43
+ fromGitLabMergeRequest,
44
+ fromGitLabMergeRequestREST,
45
+ fromGitLabMergeRequestState,
46
+ toGitLabMergeRequestState,
47
+ } from './models.js';
48
+
49
+ // drop it as soon as we switch to @gitkraken/providers-api
50
+ const gitlabUserIdPrefix = 'gid://gitlab/User/';
51
+ const gitlabMergeRequestIdPrefix = 'gid://gitlab/MergeRequest/';
52
+
53
+ function buildGitLabUserId(id: string | number | undefined): string | undefined {
54
+ return typeof id === 'string' && id?.startsWith(gitlabUserIdPrefix)
55
+ ? id.substring(gitlabUserIdPrefix.length)
56
+ : String(id);
57
+ }
58
+
59
+ export class GitLabApi implements Disposable {
60
+ private readonly _disposable: Disposable | undefined;
61
+ private _projectIds = new Map<string, Promise<string | undefined>>();
62
+
63
+ constructor(private readonly config: ProviderApiConfig) {
64
+ this._disposable = config.onConfigChanged?.(() => this.resetCaches());
65
+ }
66
+
67
+ dispose(): void {
68
+ this._disposable?.dispose();
69
+ }
70
+
71
+ private resetCaches(): void {
72
+ this._projectIds.clear();
73
+ }
74
+
75
+ @trace({
76
+ args: (provider, token, owner, repo, rev) => ({
77
+ provider: provider.name,
78
+ token: `<token:${token.microHash}>`,
79
+ owner: owner,
80
+ repo: repo,
81
+ rev: rev,
82
+ }),
83
+ })
84
+ async getAccountForCommit(
85
+ provider: Provider,
86
+ token: TokenWithInfo,
87
+ owner: string,
88
+ repo: string,
89
+ rev: string,
90
+ options?: {
91
+ baseUrl?: string;
92
+ avatarSize?: number;
93
+ },
94
+ cancellation?: AbortSignal,
95
+ ): Promise<Account | undefined> {
96
+ const scope = getScopedLogger();
97
+
98
+ const projectId = await this.getProjectId(provider, token, owner, repo, options?.baseUrl, cancellation);
99
+ if (!projectId) return undefined;
100
+
101
+ try {
102
+ const commit = await this.request<GitLabCommit>(
103
+ provider,
104
+ token,
105
+ options?.baseUrl,
106
+ `v4/projects/${projectId}/repository/commits/${rev}?stats=false`,
107
+ {
108
+ method: 'GET',
109
+ // ...options,
110
+ },
111
+ cancellation,
112
+ scope,
113
+ );
114
+
115
+ let users = await this.findUser(provider, token, commit.author_name, options, cancellation);
116
+ let user = selectGitLabUserForCommit(users, commit.author_name, commit.author_email);
117
+
118
+ // If the name search was ambiguous (multiple users share the name), try an email-scoped search to
119
+ // disambiguate before giving up — otherwise we'd show a stranger's avatar (see #2205)
120
+ if (user == null && commit.author_email) {
121
+ const exactNameMatches = users.filter(u => equalsIgnoreCase(u.name, commit.author_name)).length;
122
+ if (exactNameMatches > 1) {
123
+ users = await this.findUser(provider, token, commit.author_email, options, cancellation);
124
+ user = selectGitLabUserForCommit(users, commit.author_name, commit.author_email);
125
+ }
126
+ }
127
+
128
+ if (user == null) return undefined;
129
+
130
+ // If the avatarUrl is a relative URL, make it absolute using the webUrl (assuming the webUrl is the root URL with the username tacked on)
131
+ if (user.avatarUrl && !/^([a-zA-Z][\w+.-]+):/.test(user.avatarUrl)) {
132
+ user.avatarUrl = joinUriPath(parseUri(user.webUrl), '..', user.avatarUrl).toString();
133
+ }
134
+
135
+ return {
136
+ provider: provider,
137
+ id: String(user.id),
138
+ name: user.name || undefined,
139
+ email: commit.author_email || undefined,
140
+ avatarUrl: user.avatarUrl || undefined,
141
+ username: user.username || undefined,
142
+ };
143
+ } catch (ex) {
144
+ if (ex instanceof RequestNotFoundError) return undefined;
145
+
146
+ throw this.handleException(ex, provider, scope);
147
+ }
148
+ }
149
+
150
+ @trace({
151
+ args: (provider, token, _owner, _repo, email) => ({
152
+ provider: provider.name,
153
+ token: `<token:${token.microHash}>`,
154
+ email: email,
155
+ }),
156
+ })
157
+ async getAccountForEmail(
158
+ provider: Provider,
159
+ token: TokenWithInfo,
160
+ _owner: string,
161
+ _repo: string,
162
+ email: string,
163
+ options?: {
164
+ baseUrl?: string;
165
+ avatarSize?: number;
166
+ },
167
+ ): Promise<Account | undefined> {
168
+ const scope = getScopedLogger();
169
+
170
+ try {
171
+ const [user] = await this.findUser(provider, token, email, options);
172
+ if (user == null) return undefined;
173
+
174
+ return {
175
+ provider: provider,
176
+ id: String(user.id),
177
+ name: user.name || undefined,
178
+ email: user.publicEmail || undefined,
179
+ avatarUrl: user.avatarUrl || undefined,
180
+ username: user.username || undefined,
181
+ };
182
+ } catch (ex) {
183
+ if (ex instanceof RequestNotFoundError) return undefined;
184
+
185
+ throw this.handleException(ex, provider, scope);
186
+ }
187
+ }
188
+
189
+ @trace({
190
+ args: (provider, token, userId) => ({
191
+ provider: provider.name,
192
+ token: `<token:${token.microHash}>`,
193
+ userId: userId,
194
+ }),
195
+ })
196
+ async getUserSigningKeys(
197
+ provider: Provider,
198
+ token: TokenWithInfo,
199
+ userId: string | number,
200
+ options?: { baseUrl?: string },
201
+ cancellation?: AbortSignal,
202
+ ): Promise<GitLabSshKey[]> {
203
+ const scope = getScopedLogger();
204
+
205
+ // SSH keys are public, so this works for any user with the current token (covered by the `read_user` scope).
206
+ try {
207
+ const keys = await this.request<GitLabSshKey[]>(
208
+ provider,
209
+ token,
210
+ options?.baseUrl,
211
+ `v4/users/${userId}/keys`,
212
+ { method: 'GET' },
213
+ cancellation,
214
+ scope,
215
+ );
216
+ // Exclude auth-only keys — only signing-capable keys belong in an allowed_signers file.
217
+ return keys?.filter(k => k.usage_type === 'signing' || k.usage_type === 'auth_and_signing') ?? [];
218
+ } catch (ex) {
219
+ if (ex instanceof RequestNotFoundError) return [];
220
+
221
+ this.handleException(ex, provider, scope);
222
+ return [];
223
+ }
224
+ }
225
+
226
+ @trace({
227
+ args: (provider, token, owner, repo) => ({
228
+ provider: provider.name,
229
+ token: `<token:${token.microHash}>`,
230
+ owner: owner,
231
+ repo: repo,
232
+ }),
233
+ })
234
+ async getDefaultBranch(
235
+ provider: Provider,
236
+ token: TokenWithInfo,
237
+ owner: string,
238
+ repo: string,
239
+ options?: {
240
+ baseUrl?: string;
241
+ },
242
+ cancellation?: AbortSignal,
243
+ ): Promise<DefaultBranch | undefined> {
244
+ const scope = getScopedLogger();
245
+
246
+ interface QueryResult {
247
+ data: {
248
+ project:
249
+ | {
250
+ repository: { rootRef: string } | null | undefined;
251
+ }
252
+ | null
253
+ | undefined;
254
+ };
255
+ }
256
+
257
+ try {
258
+ const query = `query getDefaultBranch(
259
+ $fullPath: ID!
260
+ ) {
261
+ project(fullPath: $fullPath) {
262
+ repository {
263
+ rootRef
264
+ }
265
+ }`;
266
+
267
+ const rsp = await this.graphql<QueryResult>(
268
+ provider,
269
+ token,
270
+ options?.baseUrl,
271
+ query,
272
+ {
273
+ fullPath: `${owner}/${repo}`,
274
+ },
275
+ cancellation,
276
+ scope,
277
+ );
278
+
279
+ const defaultBranch = rsp?.data?.project?.repository?.rootRef ?? undefined;
280
+ if (defaultBranch == null) return undefined;
281
+
282
+ return {
283
+ provider: provider,
284
+ name: defaultBranch,
285
+ };
286
+ } catch (ex) {
287
+ if (ex instanceof RequestNotFoundError) return undefined;
288
+
289
+ throw this.handleException(ex, provider, scope);
290
+ }
291
+ }
292
+
293
+ @trace({
294
+ args: (provider, token, owner, repo, number) => ({
295
+ provider: provider.name,
296
+ token: `<token:${token.microHash}>`,
297
+ owner: owner,
298
+ repo: repo,
299
+ number: number,
300
+ }),
301
+ })
302
+ async getIssueOrPullRequest(
303
+ provider: Provider,
304
+ token: TokenWithInfo,
305
+ owner: string,
306
+ repo: string,
307
+ number: number,
308
+ options?: {
309
+ baseUrl?: string;
310
+ },
311
+ cancellation?: AbortSignal,
312
+ ): Promise<IssueOrPullRequest | undefined> {
313
+ const scope = getScopedLogger();
314
+
315
+ interface QueryResult {
316
+ data: {
317
+ project: {
318
+ mergeRequest: GitLabMergeRequest | null;
319
+ issue: GitLabIssue | null;
320
+ } | null;
321
+ };
322
+ }
323
+
324
+ try {
325
+ const query = `query getIssueOrMergeRequest(
326
+ $fullPath: ID!
327
+ $iid: String!
328
+ ) {
329
+ project(fullPath: $fullPath) {
330
+ mergeRequest(iid: $iid) {
331
+ author {
332
+ id
333
+ name
334
+ avatarUrl
335
+ webUrl
336
+ }
337
+ iid
338
+ title
339
+ description
340
+ state
341
+ createdAt
342
+ updatedAt
343
+ mergedAt
344
+ webUrl
345
+ }
346
+ issue(iid: $iid) {
347
+ author {
348
+ id
349
+ name
350
+ avatarUrl
351
+ webUrl
352
+ }
353
+ iid
354
+ title
355
+ description
356
+ state
357
+ createdAt
358
+ updatedAt
359
+ closedAt
360
+ webUrl
361
+ }
362
+ }
363
+ }`;
364
+
365
+ const rsp = await this.graphql<QueryResult>(
366
+ provider,
367
+ token,
368
+ options?.baseUrl,
369
+ query,
370
+ {
371
+ fullPath: `${owner}/${repo}`,
372
+ iid: String(number),
373
+ },
374
+ cancellation,
375
+ scope,
376
+ );
377
+
378
+ if (rsp?.data?.project?.issue != null) {
379
+ const issue = rsp.data.project.issue;
380
+ return {
381
+ provider: provider,
382
+ type: 'issue',
383
+ id: issue.iid,
384
+ nodeId: undefined,
385
+ createdDate: new Date(issue.createdAt),
386
+ updatedDate: new Date(issue.updatedAt),
387
+ title: issue.title,
388
+ closed: issue.state === 'closed',
389
+ closedDate: issue.closedAt == null ? undefined : new Date(issue.closedAt),
390
+ url: issue.webUrl,
391
+ state: issue.state === 'locked' ? 'closed' : issue.state,
392
+ };
393
+ }
394
+
395
+ if (rsp?.data?.project?.mergeRequest != null) {
396
+ const mergeRequest = rsp.data.project.mergeRequest;
397
+ return {
398
+ provider: provider,
399
+ type: 'pullrequest',
400
+ id: mergeRequest.iid,
401
+ nodeId: undefined,
402
+ createdDate: new Date(mergeRequest.createdAt),
403
+ updatedDate: new Date(mergeRequest.updatedAt),
404
+ title: mergeRequest.title,
405
+ closed: mergeRequest.state === 'closed',
406
+ // TODO@eamodio this isn't right, but GitLab doesn't seem to provide a closedAt on merge requests in GraphQL
407
+ closedDate: mergeRequest.state === 'closed' ? new Date(mergeRequest.updatedAt) : undefined,
408
+ url: mergeRequest.webUrl,
409
+ state: mergeRequest.state === 'locked' ? 'closed' : mergeRequest.state,
410
+ };
411
+ }
412
+
413
+ return undefined;
414
+ } catch (ex) {
415
+ if (ex instanceof RequestNotFoundError) return undefined;
416
+
417
+ throw this.handleException(ex, provider, scope);
418
+ }
419
+ }
420
+
421
+ @trace({
422
+ args: (provider, token, owner, repo, branch) => ({
423
+ provider: provider.name,
424
+ token: `<token:${token.microHash}>`,
425
+ owner: owner,
426
+ repo: repo,
427
+ branch: branch,
428
+ }),
429
+ })
430
+ async getPullRequestForBranch(
431
+ provider: Provider,
432
+ token: TokenWithInfo,
433
+ owner: string,
434
+ repo: string,
435
+ branch: string,
436
+ options?: {
437
+ baseUrl?: string;
438
+ avatarSize?: number;
439
+ include?: GitLabMergeRequestState[];
440
+ },
441
+ cancellation?: AbortSignal,
442
+ ): Promise<PullRequest | undefined> {
443
+ const scope = getScopedLogger();
444
+
445
+ interface QueryResult {
446
+ data: {
447
+ project: {
448
+ mergeRequests?: {
449
+ nodes: GitLabMergeRequest[];
450
+ } | null;
451
+ opened?: {
452
+ nodes: GitLabMergeRequest[];
453
+ } | null;
454
+ closed?: {
455
+ nodes: GitLabMergeRequest[];
456
+ } | null;
457
+ merged?: {
458
+ nodes: GitLabMergeRequest[];
459
+ } | null;
460
+ } | null;
461
+ };
462
+ }
463
+
464
+ try {
465
+ const fragment = `
466
+ nodes {
467
+ iid
468
+ author {
469
+ id
470
+ name
471
+ avatarUrl
472
+ webUrl
473
+ }
474
+ title
475
+ description
476
+ state
477
+ createdAt
478
+ updatedAt
479
+ mergedAt
480
+ webUrl
481
+ }`;
482
+
483
+ const query = `query getMergeRequestForBranch(
484
+ $fullPath: ID!
485
+ $branches: [String!]
486
+ ) {
487
+ project(fullPath: $fullPath) {
488
+ ${
489
+ options?.include == null
490
+ ? `mergeRequests(sourceBranches: $branches sort: UPDATED_DESC first: 1) {
491
+ ${fragment}
492
+ }`
493
+ : ''
494
+ }
495
+ ${
496
+ options?.include?.includes('opened')
497
+ ? `opened: mergeRequests(sourceBranches: $branches state: opened sort: UPDATED_DESC first: 1) {
498
+ ${fragment}
499
+ }`
500
+ : ''
501
+ }
502
+ ${
503
+ options?.include?.includes('merged')
504
+ ? `merged: mergeRequests(sourceBranches: $branches state: merged sort: UPDATED_DESC first: 1) {
505
+ ${fragment}
506
+ }`
507
+ : ''
508
+ }
509
+ ${
510
+ options?.include?.includes('closed')
511
+ ? `closed: mergeRequests(sourceBranches: $branches state: closed sort: UPDATED_DESC first: 1) {
512
+ ${fragment}
513
+ }`
514
+ : ''
515
+ }
516
+ }
517
+ }`;
518
+
519
+ const rsp = await this.graphql<QueryResult>(
520
+ provider,
521
+ token,
522
+ options?.baseUrl,
523
+ query,
524
+ {
525
+ fullPath: `${owner}/${repo}`,
526
+ branches: [branch],
527
+ state: options?.include,
528
+ },
529
+ cancellation,
530
+ scope,
531
+ );
532
+
533
+ let pr: GitLabMergeRequest | undefined;
534
+
535
+ if (options?.include == null) {
536
+ pr = rsp?.data?.project?.mergeRequests?.nodes?.[0];
537
+ } else {
538
+ for (const state of options.include) {
539
+ let mr;
540
+ if (state === 'opened') {
541
+ mr = rsp?.data?.project?.opened?.nodes?.[0];
542
+ } else if (state === 'merged') {
543
+ mr = rsp?.data?.project?.merged?.nodes?.[0];
544
+ } else if (state === 'closed') {
545
+ mr = rsp?.data?.project?.closed?.nodes?.[0];
546
+ }
547
+
548
+ if (mr != null && (pr == null || new Date(mr.updatedAt) > new Date(pr.updatedAt))) {
549
+ pr = mr;
550
+ }
551
+ }
552
+ }
553
+
554
+ if (pr == null) return undefined;
555
+
556
+ return new PullRequest(
557
+ provider,
558
+ {
559
+ id: buildGitLabUserId(pr.author?.id) ?? '',
560
+ // An absent author stays absent: no `'Unknown'` name a consumer can't tell from a real one, and no
561
+ // `''` url/avatar that passes a presence check and renders as a link to nowhere. Matches
562
+ // `fromProviderAccount`/`toIssueShape`.
563
+ name: pr.author?.name ?? undefined,
564
+ avatarUrl: pr.author?.avatarUrl ?? undefined,
565
+ url: pr.author?.webUrl ?? undefined,
566
+ },
567
+ // oxlint-disable-next-line typescript/no-unnecessary-type-conversion
568
+ String(pr.iid),
569
+ undefined,
570
+ pr.title,
571
+ pr.webUrl,
572
+ { owner: owner, repo: repo },
573
+ fromGitLabMergeRequestState(pr.state),
574
+ new Date(pr.createdAt),
575
+ new Date(pr.updatedAt),
576
+ // TODO@eamodio this isn't right, but GitLab doesn't seem to provide a closedAt on merge requests in GraphQL
577
+ pr.state !== 'closed' ? undefined : new Date(pr.updatedAt),
578
+ pr.mergedAt == null ? undefined : new Date(pr.mergedAt),
579
+ );
580
+ } catch (ex) {
581
+ if (ex instanceof RequestNotFoundError) return undefined;
582
+
583
+ throw this.handleException(ex, provider, scope);
584
+ }
585
+ }
586
+
587
+ @trace({
588
+ args: (provider, token, owner, repo, rev) => ({
589
+ provider: provider.name,
590
+ token: `<token:${token.microHash}>`,
591
+ owner: owner,
592
+ repo: repo,
593
+ rev: rev,
594
+ }),
595
+ })
596
+ async getPullRequestForCommit(
597
+ provider: Provider,
598
+ token: TokenWithInfo,
599
+ owner: string,
600
+ repo: string,
601
+ rev: string,
602
+ options?: {
603
+ baseUrl?: string;
604
+ avatarSize?: number;
605
+ },
606
+ cancellation?: AbortSignal,
607
+ ): Promise<PullRequest | undefined> {
608
+ const scope = getScopedLogger();
609
+
610
+ const projectId = await this.getProjectId(provider, token, owner, repo, options?.baseUrl, cancellation);
611
+ if (!projectId) return undefined;
612
+
613
+ try {
614
+ const mrs = await this.request<GitLabMergeRequestREST[]>(
615
+ provider,
616
+ token,
617
+ options?.baseUrl,
618
+ `v4/projects/${projectId}/repository/commits/${rev}/merge_requests`,
619
+ {
620
+ method: 'GET',
621
+ // ...options,
622
+ },
623
+ cancellation,
624
+ scope,
625
+ );
626
+ if (mrs == null || mrs.length === 0) return undefined;
627
+
628
+ if (mrs.length > 1) {
629
+ mrs.sort(
630
+ (a, b) =>
631
+ (a.state === 'opened' ? -1 : 1) - (b.state === 'opened' ? -1 : 1) ||
632
+ new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime(),
633
+ );
634
+ }
635
+
636
+ return fromGitLabMergeRequestREST(mrs[0], provider, { owner: owner, repo: repo });
637
+ } catch (ex) {
638
+ if (ex instanceof RequestNotFoundError) return undefined;
639
+
640
+ throw this.handleException(ex, provider, scope);
641
+ }
642
+ }
643
+
644
+ @trace({
645
+ args: (provider, token, owner, repo, id) => ({
646
+ provider: provider.name,
647
+ token: `<token:${token.microHash}>`,
648
+ owner: owner,
649
+ repo: repo,
650
+ id: id,
651
+ }),
652
+ })
653
+ async getPullRequest(
654
+ provider: Provider,
655
+ token: TokenWithInfo,
656
+ owner: string,
657
+ repo: string,
658
+ id: number,
659
+ options?: {
660
+ baseUrl?: string;
661
+ },
662
+ cancellation?: AbortSignal,
663
+ ): Promise<PullRequest | undefined> {
664
+ const scope = getScopedLogger();
665
+
666
+ interface QueryResult {
667
+ data: {
668
+ project: {
669
+ mergeRequest: GitLabMergeRequestFull | null;
670
+ } | null;
671
+ };
672
+ }
673
+
674
+ try {
675
+ const query = `query getMergeRequest(
676
+ $fullPath: ID!
677
+ $iid: String!
678
+ ) {
679
+ project(fullPath: $fullPath) {
680
+ mergeRequest(iid: $iid) {
681
+ id,
682
+ iid
683
+ state,
684
+ author {
685
+ id
686
+ name
687
+ avatarUrl
688
+ webUrl
689
+ }
690
+ diffRefs {
691
+ baseSha
692
+ headSha
693
+ }
694
+ title
695
+ description
696
+ webUrl
697
+ createdAt
698
+ updatedAt
699
+ mergedAt
700
+ targetBranch
701
+ sourceBranch
702
+ project {
703
+ id
704
+ fullPath
705
+ webUrl
706
+ }
707
+ sourceProject {
708
+ id
709
+ fullPath
710
+ webUrl
711
+ }
712
+ }
713
+ }
714
+ }`;
715
+
716
+ const rsp = await this.graphql<QueryResult>(
717
+ provider,
718
+ token,
719
+ options?.baseUrl,
720
+ query,
721
+ {
722
+ fullPath: `${owner}/${repo}`,
723
+ iid: String(id),
724
+ },
725
+ cancellation,
726
+ scope,
727
+ );
728
+
729
+ if (rsp?.data?.project?.mergeRequest == null) return undefined;
730
+
731
+ const pr = rsp.data.project.mergeRequest;
732
+ return fromGitLabMergeRequest(pr, provider);
733
+ } catch (ex) {
734
+ if (ex instanceof RequestNotFoundError) return undefined;
735
+
736
+ throw this.handleException(ex, provider, scope);
737
+ }
738
+ }
739
+
740
+ @trace({
741
+ args: (provider, token, owner, repo) => ({
742
+ provider: provider.name,
743
+ token: `<token:${token.microHash}>`,
744
+ owner: owner,
745
+ repo: repo,
746
+ }),
747
+ })
748
+ async getRepositoryMetadata(
749
+ provider: Provider,
750
+ token: TokenWithInfo,
751
+ owner: string,
752
+ repo: string,
753
+ options?: {
754
+ baseUrl?: string;
755
+ },
756
+ cancellation?: AbortSignal,
757
+ ): Promise<RepositoryMetadata | undefined> {
758
+ const scope = getScopedLogger();
759
+
760
+ const projectId = await this.getProjectId(provider, token, owner, repo, options?.baseUrl, cancellation);
761
+ if (!projectId) return undefined;
762
+
763
+ try {
764
+ const proj = await this.request<GitLabProjectREST>(
765
+ provider,
766
+ token,
767
+ options?.baseUrl,
768
+ `v4/projects/${projectId}`,
769
+ {
770
+ method: 'GET',
771
+ // ...options,
772
+ },
773
+ cancellation,
774
+ scope,
775
+ );
776
+ if (proj == null) return undefined;
777
+
778
+ return {
779
+ provider: provider,
780
+ owner: proj.namespace.full_path,
781
+ name: proj.path,
782
+ isFork: proj.forked_from_project != null,
783
+ parent:
784
+ proj.forked_from_project != null
785
+ ? {
786
+ owner: proj.forked_from_project.namespace.full_path,
787
+ name: proj.forked_from_project.path,
788
+ }
789
+ : undefined,
790
+ } satisfies RepositoryMetadata;
791
+ } catch (ex) {
792
+ if (ex instanceof RequestNotFoundError) return undefined;
793
+
794
+ throw this.handleException(ex, provider, scope);
795
+ }
796
+ }
797
+
798
+ @trace({ args: (provider, token) => ({ provider: provider.name, token: `<token:${token.microHash}>` }) })
799
+ async searchPullRequests(
800
+ provider: Provider,
801
+ token: TokenWithInfo,
802
+ options?: {
803
+ search?: string;
804
+ user?: string;
805
+ repos?: string[];
806
+ baseUrl?: string;
807
+ avatarSize?: number;
808
+ include?: PullRequestState[];
809
+ },
810
+ cancellation?: AbortSignal,
811
+ ): Promise<PullRequest[]> {
812
+ const scope = getScopedLogger();
813
+ const search = options?.search;
814
+ if (!search) {
815
+ return [];
816
+ }
817
+
818
+ try {
819
+ const perPageLimit = 20; // with bigger amount we exceed the max GraphQL complexity in the next query
820
+ const include = options?.include?.length ? options.include : undefined;
821
+ // GitLab's search API takes a single `state` value, so push it server-side when exactly one state is
822
+ // requested; that keeps the requested state from being crowded out of the `perPageLimit` slice. For
823
+ // multiple states there's no single-value qualifier, so those are filtered client-side below.
824
+ let searchPath = `v4/search/?scope=merge_requests&search=${encodeURIComponent(search)}&per_page=${perPageLimit}`;
825
+ if (include?.length === 1) {
826
+ searchPath += `&state=${encodeURIComponent(toGitLabMergeRequestState(include[0]))}`;
827
+ }
828
+
829
+ let restPRs: GitLabMergeRequestREST[];
830
+ if (include == null) {
831
+ // Unfiltered search returns the first page as-is (as it did before state filtering existed).
832
+ restPRs = await this.request<GitLabMergeRequestREST[]>(
833
+ provider,
834
+ token,
835
+ options?.baseUrl,
836
+ searchPath,
837
+ { method: 'GET' },
838
+ cancellation,
839
+ scope,
840
+ );
841
+ } else {
842
+ // The search API returns MRs of all states in relevance order, so the requested state(s) may not
843
+ // appear on the first page. Server-side `&state=` narrows the single-state case when honored, but it
844
+ // can't express multiple states, so page through the results and accumulate matches until we fill the
845
+ // detail-query cap (`perPageLimit`) or exhaust the search results. This keeps correctness whether
846
+ // or not `&state=` takes effect. Bounded by `maxSearchPages` like the other paged provider drains in
847
+ // this package so a large, low-match result set can't fan out into an unbounded request loop.
848
+ const maxSearchPages = 20;
849
+ const matches: GitLabMergeRequestREST[] = [];
850
+ for (let page = 1; page <= maxSearchPages; page++) {
851
+ const pagePRs = await this.request<GitLabMergeRequestREST[]>(
852
+ provider,
853
+ token,
854
+ options?.baseUrl,
855
+ `${searchPath}&page=${page}`,
856
+ { method: 'GET' },
857
+ cancellation,
858
+ scope,
859
+ );
860
+ for (const pr of pagePRs) {
861
+ if (include.includes(fromGitLabMergeRequestState(pr.state))) {
862
+ matches.push(pr);
863
+ if (matches.length >= perPageLimit) break;
864
+ }
865
+ }
866
+ // Stop once we've filled the cap or hit the last (partial or empty) page.
867
+ if (matches.length >= perPageLimit || pagePRs.length < perPageLimit) break;
868
+ }
869
+ restPRs = matches;
870
+ }
871
+ if (restPRs.length === 0) {
872
+ return [];
873
+ }
874
+
875
+ interface QueryResult {
876
+ data: Record<`mergeRequest_${number}`, GitLabMergeRequestFull>;
877
+ }
878
+
879
+ const queryArgs = restPRs.map((_, i) => `$id_${i}: MergeRequestID!`).join('\n');
880
+ const queryFields = restPRs
881
+ .map((_, i) => `mergeRequest_${i}: mergeRequest(id: $id_${i}) { ...mergeRequestFields }`)
882
+ .join('\n');
883
+ // Set of fields includes only additional fields that are not included in GitLabMergeRequestREST.
884
+ // It's limited as much as possible to reduce complexity of the query.
885
+ const queryMrFields = `fragment mergeRequestFields on MergeRequest {
886
+ diffRefs {
887
+ baseSha
888
+ headSha
889
+ }
890
+ project {
891
+ id
892
+ fullPath
893
+ webUrl
894
+ }
895
+ sourceProject {
896
+ id
897
+ fullPath
898
+ webUrl
899
+ }
900
+ }`;
901
+ const query = `query getMergeRequests (${queryArgs}) {${queryFields}} ${queryMrFields}`;
902
+
903
+ const params = restPRs.reduce<Record<`id_${number}`, string>>((ids, gitlabRestPr, i) => {
904
+ ids[`id_${i}`] = `${gitlabMergeRequestIdPrefix}${gitlabRestPr.id}`;
905
+ return ids;
906
+ }, {});
907
+ const rsp = await this.graphql<QueryResult>(
908
+ provider,
909
+ token,
910
+ options?.baseUrl,
911
+ query,
912
+ params,
913
+ cancellation,
914
+ scope,
915
+ );
916
+ if (rsp?.data != null) {
917
+ const resultPRs = restPRs.reduce<PullRequest[]>((accum, restPR, i) => {
918
+ const graphQlPR = rsp.data[`mergeRequest_${i}`];
919
+ if (graphQlPR == null) {
920
+ return accum;
921
+ }
922
+
923
+ const fullPr: GitLabMergeRequestFull = {
924
+ ...graphQlPR,
925
+ iid: String(restPR.iid),
926
+ id: String(restPR.id),
927
+ state: restPR.state,
928
+ // An absent REST author stays absent (`null`, as GitLab's own shape expresses it) rather than a
929
+ // synthesized `'Unknown'` stub: `fromGitLabMergeRequest` collapses `null` to an absent
930
+ // `PullRequestMember.name`, whereas a placeholder here would launder into a real-looking name.
931
+ author:
932
+ restPR.author != null
933
+ ? {
934
+ id: buildGitLabUserId(restPR.author.id) ?? '',
935
+ name: restPR.author.name,
936
+ avatarUrl: restPR.author.avatar_url ?? null,
937
+ webUrl: restPR.author.web_url,
938
+ }
939
+ : null,
940
+ title: restPR.title,
941
+ description: restPR.description,
942
+ webUrl: restPR.web_url,
943
+ createdAt: restPR.created_at,
944
+ updatedAt: restPR.updated_at,
945
+ mergedAt: restPR.merged_at,
946
+ sourceBranch: restPR.source_branch,
947
+ targetBranch: restPR.target_branch,
948
+ };
949
+ accum.push(fromGitLabMergeRequest(fullPr, provider));
950
+ return accum;
951
+ }, []);
952
+ return resultPRs;
953
+ }
954
+ return [];
955
+ } catch (ex) {
956
+ if (ex instanceof RequestNotFoundError) return [];
957
+
958
+ throw this.handleException(ex, provider, scope);
959
+ }
960
+ }
961
+
962
+ private async findUser(
963
+ provider: Provider,
964
+ token: TokenWithInfo,
965
+ search: string,
966
+ options?: {
967
+ baseUrl?: string;
968
+ avatarSize?: number;
969
+ },
970
+ cancellation?: AbortSignal,
971
+ ): Promise<GitLabUser[]> {
972
+ const scope = getScopedLogger();
973
+
974
+ interface QueryResult {
975
+ data: {
976
+ users: {
977
+ nodes: {
978
+ id: string;
979
+ name: string;
980
+ username: string;
981
+ publicEmail?: string;
982
+ state: string;
983
+ avatarUrl: string;
984
+ webUrl: string;
985
+ }[];
986
+ };
987
+ };
988
+ }
989
+
990
+ try {
991
+ const query = `query findUser(
992
+ $search: String!
993
+ ) {
994
+ users(search: $search) {
995
+ nodes {
996
+ id
997
+ name
998
+ username,
999
+ publicEmail,
1000
+ state
1001
+ avatarUrl
1002
+ webUrl
1003
+ }
1004
+ }
1005
+ }`;
1006
+ const rsp = await this.graphql<QueryResult>(
1007
+ provider,
1008
+ token,
1009
+ options?.baseUrl,
1010
+ query,
1011
+ {
1012
+ search: search,
1013
+ },
1014
+ cancellation,
1015
+ scope,
1016
+ );
1017
+
1018
+ const matches = rsp?.data?.users?.nodes;
1019
+ if (matches == null || matches.length === 0) return [];
1020
+
1021
+ const users: GitLabUser[] = [];
1022
+
1023
+ for (const user of matches) {
1024
+ const match = /gid:\/\/gitlab\/User\/([0-9]+)\b/.exec(user.id);
1025
+ if (match == null) continue;
1026
+
1027
+ users.push({
1028
+ id: parseInt(match[1], 10),
1029
+ name: user.name,
1030
+ username: user.username,
1031
+ publicEmail: user.publicEmail || undefined,
1032
+ state: user.state,
1033
+ avatarUrl: user.avatarUrl,
1034
+ webUrl: user.webUrl,
1035
+ });
1036
+ }
1037
+
1038
+ return users;
1039
+ } catch (ex) {
1040
+ if (ex instanceof RequestNotFoundError) return [];
1041
+
1042
+ this.handleException(ex, provider, scope);
1043
+ return [];
1044
+ }
1045
+ }
1046
+
1047
+ getProjectId(
1048
+ provider: Provider,
1049
+ token: TokenWithInfo,
1050
+ group: string,
1051
+ repo: string,
1052
+ baseUrl: string | undefined,
1053
+ cancellation: AbortSignal | undefined,
1054
+ ): Promise<string | undefined> {
1055
+ const { accessToken } = token;
1056
+ const key = `${accessToken}|${group}/${repo}`;
1057
+
1058
+ let projectId = this._projectIds.get(key);
1059
+ if (projectId == null) {
1060
+ projectId = this.getProjectIdCore(provider, token, group, repo, baseUrl, cancellation);
1061
+ this._projectIds.set(key, projectId);
1062
+ }
1063
+
1064
+ return projectId;
1065
+ }
1066
+
1067
+ private async getProjectIdCore(
1068
+ provider: Provider,
1069
+ token: TokenWithInfo,
1070
+ group: string,
1071
+ repo: string,
1072
+ baseUrl: string | undefined,
1073
+ cancellation: AbortSignal | undefined,
1074
+ ): Promise<string | undefined> {
1075
+ const scope = getScopedLogger();
1076
+
1077
+ interface QueryResult {
1078
+ data: { project: { id: string } };
1079
+ }
1080
+
1081
+ try {
1082
+ const query = `query getProjectId(
1083
+ $fullPath: ID!
1084
+ ) {
1085
+ project(fullPath: $fullPath) {
1086
+ id
1087
+ }
1088
+ }`;
1089
+ const rsp = await this.graphql<QueryResult>(
1090
+ provider,
1091
+ token,
1092
+ baseUrl,
1093
+ query,
1094
+ {
1095
+ fullPath: `${group}/${repo}`,
1096
+ },
1097
+ cancellation,
1098
+ scope,
1099
+ );
1100
+
1101
+ const gid = rsp?.data?.project?.id;
1102
+ if (gid == null) return undefined;
1103
+
1104
+ const match = /gid:\/\/gitlab\/Project\/([0-9]+)\b/.exec(gid);
1105
+ if (match == null) return undefined;
1106
+
1107
+ const projectId = match[1];
1108
+
1109
+ scope?.addExitInfo(`projectId=${projectId}`);
1110
+ return projectId;
1111
+ } catch (ex) {
1112
+ if (ex instanceof RequestNotFoundError) return undefined;
1113
+
1114
+ this.handleException(ex, provider, scope);
1115
+ return undefined;
1116
+ }
1117
+ }
1118
+
1119
+ private async graphql<T extends object>(
1120
+ provider: Provider,
1121
+ token: TokenWithInfo,
1122
+ baseUrl: string | undefined,
1123
+ query: string,
1124
+ variables: Record<string, any>,
1125
+ cancellation: AbortSignal | undefined,
1126
+ scope: ScopedLogger | undefined,
1127
+ ): Promise<T | undefined> {
1128
+ const { accessToken } = token;
1129
+ let rsp: Response;
1130
+ try {
1131
+ const sw = maybeStopWatch(`[GITLAB] POST ${baseUrl}`, { log: { onlyExit: true } });
1132
+
1133
+ try {
1134
+ if (cancellation?.aborted) throw new CancellationError();
1135
+
1136
+ rsp = await this.config.wrapForForcedInsecureSSL(provider.getIgnoreSSLErrors(), () =>
1137
+ this.config.fetch(`${baseUrl ?? 'https://gitlab.com/api'}/graphql`, {
1138
+ method: 'POST',
1139
+ headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json' },
1140
+ signal: cancellation,
1141
+ body: JSON.stringify({ query: query, variables: variables }),
1142
+ }),
1143
+ );
1144
+
1145
+ if (rsp.ok) {
1146
+ const data = (await rsp.json()) as T | { errors: { message: string }[] };
1147
+
1148
+ if ('errors' in data) throw new ProviderFetchError('GitLab', rsp, data.errors);
1149
+ return data;
1150
+ }
1151
+
1152
+ // Reads the body so the 403 branch below can tell a throttled request from a permission failure.
1153
+ throw await ProviderFetchError.fromResponse('GitLab', rsp);
1154
+ } finally {
1155
+ const match = /(^[^({\n]+)/.exec(query);
1156
+ const message = ` ${match?.[1].trim() ?? query}`;
1157
+
1158
+ sw?.stop({ message: message });
1159
+ }
1160
+ } catch (ex) {
1161
+ if (ex instanceof ProviderFetchError || ex.name === 'AbortError') {
1162
+ this.handleRequestError(provider, token, ex, scope);
1163
+ } else if (Logger.isDebugging) {
1164
+ this.config.onError?.(`GitLab request failed: ${ex.message}`);
1165
+ }
1166
+
1167
+ throw ex;
1168
+ }
1169
+ }
1170
+
1171
+ private async request<T>(
1172
+ provider: Provider,
1173
+ token: TokenWithInfo,
1174
+ baseUrl: string | undefined,
1175
+ route: string,
1176
+ options: { method: RequestInit['method'] } & Record<string, unknown>,
1177
+ cancellation: AbortSignal | undefined,
1178
+ scope: ScopedLogger | undefined,
1179
+ ): Promise<T> {
1180
+ const { accessToken } = token;
1181
+ const url = `${baseUrl ?? 'https://gitlab.com/api'}/${route}`;
1182
+
1183
+ let rsp: Response;
1184
+ try {
1185
+ const sw = maybeStopWatch(`[GITLAB] ${options?.method ?? 'GET'} ${url}`, { log: { onlyExit: true } });
1186
+
1187
+ try {
1188
+ if (cancellation?.aborted) throw new CancellationError();
1189
+
1190
+ rsp = await this.config.wrapForForcedInsecureSSL(provider.getIgnoreSSLErrors(), () =>
1191
+ this.config.fetch(url, {
1192
+ headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json' },
1193
+ signal: cancellation,
1194
+ ...options,
1195
+ }),
1196
+ );
1197
+
1198
+ if (rsp.ok) {
1199
+ return (await rsp.json()) as T;
1200
+ }
1201
+
1202
+ // Reads the body so the 403 branch below can tell a throttled request from a permission failure.
1203
+ throw await ProviderFetchError.fromResponse('GitLab', rsp);
1204
+ } finally {
1205
+ sw?.stop();
1206
+ }
1207
+ } catch (ex) {
1208
+ if (ex instanceof ProviderFetchError || ex.name === 'AbortError') {
1209
+ this.handleRequestError(provider, token, ex, scope);
1210
+ } else if (Logger.isDebugging) {
1211
+ this.config.onError?.(`GitLab request failed: ${ex.message}`);
1212
+ }
1213
+
1214
+ throw ex;
1215
+ }
1216
+ }
1217
+
1218
+ private handleRequestError(
1219
+ provider: Provider | undefined,
1220
+ token: TokenWithInfo,
1221
+ ex: ProviderFetchError | (Error & { name: 'AbortError' }),
1222
+ scope: ScopedLogger | undefined,
1223
+ ): void {
1224
+ if (ex.name === 'AbortError' || !(ex instanceof ProviderFetchError)) throw new CancellationError(ex);
1225
+
1226
+ const { accessToken, ...tokenInfo } = token;
1227
+ switch (ex.status) {
1228
+ case 404: // Not found
1229
+ case 410: // Gone
1230
+ case 422: // Unprocessable Entity
1231
+ throw new RequestNotFoundError(ex);
1232
+ case 429: // Too Many Requests
1233
+ throw toRateLimitError(ex, accessToken);
1234
+ case 401: // Unauthorized
1235
+ throw new AuthenticationError(tokenInfo, AuthenticationErrorReason.Unauthorized, ex);
1236
+ case 403: // Forbidden
1237
+ // GitLab returns 403 for both a permission failure and a throttled request, so the message is the
1238
+ // discriminant (see `isRateLimitResponse`, shared with Bitbucket/Azure).
1239
+ if (isRateLimitResponse(ex)) throw toRateLimitError(ex, accessToken);
1240
+
1241
+ throw new AuthenticationError(tokenInfo, AuthenticationErrorReason.Forbidden, ex);
1242
+ case 500: // Internal Server Error
1243
+ scope?.error(ex);
1244
+ if (ex.response != null) {
1245
+ provider?.trackRequestException();
1246
+ this.config.onRequestFailed?.(
1247
+ `${provider?.name ?? 'GitLab'} failed to respond and might be experiencing issues.${
1248
+ provider == null || provider.id === 'gitlab'
1249
+ ? ' Please visit the [GitLab status page](https://status.gitlab.com) for more information.'
1250
+ : ''
1251
+ }`,
1252
+ );
1253
+ }
1254
+ return;
1255
+ case 502: // Bad Gateway
1256
+ scope?.error(ex);
1257
+ // GitHub seems to return this status code for timeouts
1258
+ if (ex.message.includes('timeout')) {
1259
+ provider?.trackRequestException();
1260
+ this.config.onRequestTimedOut?.(provider?.name ?? 'GitLab');
1261
+ return;
1262
+ }
1263
+ break;
1264
+ default:
1265
+ if (ex.status >= 400 && ex.status < 500) throw new RequestClientError(ex);
1266
+ break;
1267
+ }
1268
+
1269
+ scope?.error(ex);
1270
+ if (Logger.isDebugging) {
1271
+ this.config.onError?.(`GitLab request failed: ${(ex.response as any)?.errors?.[0]?.message ?? ex.message}`);
1272
+ }
1273
+ }
1274
+
1275
+ private handleException(ex: Error, provider: Provider, scope: ScopedLogger | undefined): Error {
1276
+ scope?.error(ex);
1277
+ // debugger;
1278
+
1279
+ if (ex instanceof AuthenticationError) {
1280
+ void this.showAuthenticationErrorMessage(ex, provider);
1281
+ }
1282
+ return ex;
1283
+ }
1284
+
1285
+ private async showAuthenticationErrorMessage(ex: AuthenticationError, provider: Provider) {
1286
+ if (ex.reason === AuthenticationErrorReason.Unauthorized || ex.reason === AuthenticationErrorReason.Forbidden) {
1287
+ const reauthenticate = await this.config.onReauthenticationRequired?.(
1288
+ `${ex.message}. Would you like to try reauthenticating${
1289
+ ex.reason === AuthenticationErrorReason.Forbidden ? ' to provide additional access' : ''
1290
+ }?`,
1291
+ );
1292
+
1293
+ if (reauthenticate) {
1294
+ await provider.reauthenticate();
1295
+ this.resetCaches();
1296
+ }
1297
+ } else {
1298
+ this.config.onError?.(ex.message);
1299
+ }
1300
+ }
1301
+ }
1302
+
1303
+ /** Wires a {@link GitLabApi} from the full runtime context, mapping `ctx` down to the narrow config. */
1304
+ export function createGitLabApi(ctx: IntegrationServiceContext): GitLabApi {
1305
+ const config: ProviderApiConfig = {
1306
+ ...baseProviderApiConfig(ctx),
1307
+ // Self-hosted GitLab keys its API base off `remotes`, so reset on both HTTP proxy and remotes changes.
1308
+ onConfigChanged: listener =>
1309
+ ctx.config.onDidChange(e => {
1310
+ if (e.httpProxy || e.remotes) {
1311
+ listener();
1312
+ }
1313
+ }),
1314
+ onReauthenticationRequired: message =>
1315
+ ctx.hooks?.onReauthenticationRequired?.(message) ?? Promise.resolve(false),
1316
+ onRequestTimedOut: providerName => ctx.hooks?.ui?.onRequestTimedOut?.(providerName),
1317
+ };
1318
+
1319
+ return new GitLabApi(config);
1320
+ }