@gitkraken/core-gitlens 0.4.0 → 0.4.101

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 (1051) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/README.md +9 -2
  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.map +1 -1
  8. package/dist/git/errors.d.ts +31 -1
  9. package/dist/git/errors.d.ts.map +1 -1
  10. package/dist/git/errors.js +29 -0
  11. package/dist/git/errors.js.map +1 -1
  12. package/dist/git/models/author.d.ts.map +1 -1
  13. package/dist/git/models/author.js.map +1 -1
  14. package/dist/git/models/autolink.d.ts.map +1 -1
  15. package/dist/git/models/autolink.js.map +1 -1
  16. package/dist/git/models/blame.d.ts.map +1 -1
  17. package/dist/git/models/blame.js.map +1 -1
  18. package/dist/git/models/branch.d.ts.map +1 -1
  19. package/dist/git/models/branch.js.map +1 -1
  20. package/dist/git/models/commit.d.ts.map +1 -1
  21. package/dist/git/models/commit.js +1 -1
  22. package/dist/git/models/commit.js.map +1 -1
  23. package/dist/git/models/contributor.d.ts.map +1 -1
  24. package/dist/git/models/contributor.js.map +1 -1
  25. package/dist/git/models/defaultBranch.d.ts.map +1 -1
  26. package/dist/git/models/defaultBranch.js.map +1 -1
  27. package/dist/git/models/diff.d.ts.map +1 -1
  28. package/dist/git/models/diff.js.map +1 -1
  29. package/dist/git/models/file.d.ts.map +1 -1
  30. package/dist/git/models/file.js.map +1 -1
  31. package/dist/git/models/fileChange.d.ts.map +1 -1
  32. package/dist/git/models/fileChange.js.map +1 -1
  33. package/dist/git/models/fileStatus.d.ts +22 -22
  34. package/dist/git/models/fileStatus.d.ts.map +1 -1
  35. package/dist/git/models/fileStatus.js.map +1 -1
  36. package/dist/git/models/graph.d.ts +122 -1
  37. package/dist/git/models/graph.d.ts.map +1 -1
  38. package/dist/git/models/graph.js +4 -0
  39. package/dist/git/models/graph.js.map +1 -1
  40. package/dist/git/models/graphSearch.d.ts.map +1 -1
  41. package/dist/git/models/graphSearch.js.map +1 -1
  42. package/dist/git/models/graphSession.d.ts +177 -0
  43. package/dist/git/models/graphSession.d.ts.map +1 -0
  44. package/dist/git/models/graphSession.js +7 -0
  45. package/dist/git/models/graphSession.js.map +1 -0
  46. package/dist/git/models/issue.d.ts +12 -2
  47. package/dist/git/models/issue.d.ts.map +1 -1
  48. package/dist/git/models/issue.js +3 -1
  49. package/dist/git/models/issue.js.map +1 -1
  50. package/dist/git/models/issueOrPullRequest.d.ts.map +1 -1
  51. package/dist/git/models/issueOrPullRequest.js.map +1 -1
  52. package/dist/git/models/lineRange.d.ts.map +1 -1
  53. package/dist/git/models/lineRange.js.map +1 -1
  54. package/dist/git/models/log.d.ts.map +1 -1
  55. package/dist/git/models/log.js.map +1 -1
  56. package/dist/git/models/mergeConflicts.d.ts.map +1 -1
  57. package/dist/git/models/mergeConflicts.js.map +1 -1
  58. package/dist/git/models/patch.d.ts.map +1 -1
  59. package/dist/git/models/patch.js.map +1 -1
  60. package/dist/git/models/pausedOperationStatus.d.ts.map +1 -1
  61. package/dist/git/models/pausedOperationStatus.js.map +1 -1
  62. package/dist/git/models/pullRequest.d.ts +27 -2
  63. package/dist/git/models/pullRequest.d.ts.map +1 -1
  64. package/dist/git/models/pullRequest.js +7 -1
  65. package/dist/git/models/pullRequest.js.map +1 -1
  66. package/dist/git/models/rebase.d.ts.map +1 -1
  67. package/dist/git/models/rebase.js.map +1 -1
  68. package/dist/git/models/reference.d.ts.map +1 -1
  69. package/dist/git/models/reference.js.map +1 -1
  70. package/dist/git/models/reflog.d.ts.map +1 -1
  71. package/dist/git/models/reflog.js.map +1 -1
  72. package/dist/git/models/remote.d.ts.map +1 -1
  73. package/dist/git/models/remote.js.map +1 -1
  74. package/dist/git/models/remoteProvider.d.ts.map +1 -1
  75. package/dist/git/models/remoteProvider.js.map +1 -1
  76. package/dist/git/models/remoteResource.d.ts.map +1 -1
  77. package/dist/git/models/remoteResource.js.map +1 -1
  78. package/dist/git/models/repository.d.ts +20 -2
  79. package/dist/git/models/repository.d.ts.map +1 -1
  80. package/dist/git/models/repository.js +19 -0
  81. package/dist/git/models/repository.js.map +1 -1
  82. package/dist/git/models/repositoryChangeEvent.d.ts.map +1 -1
  83. package/dist/git/models/repositoryChangeEvent.js.map +1 -1
  84. package/dist/git/models/repositoryIdentities.d.ts.map +1 -1
  85. package/dist/git/models/repositoryIdentities.js.map +1 -1
  86. package/dist/git/models/repositoryMetadata.d.ts.map +1 -1
  87. package/dist/git/models/repositoryMetadata.js.map +1 -1
  88. package/dist/git/models/resourceDescriptor.d.ts +16 -0
  89. package/dist/git/models/resourceDescriptor.d.ts.map +1 -1
  90. package/dist/git/models/resourceDescriptor.js.map +1 -1
  91. package/dist/git/models/revision.d.ts.map +1 -1
  92. package/dist/git/models/revision.js.map +1 -1
  93. package/dist/git/models/search.d.ts.map +1 -1
  94. package/dist/git/models/search.js.map +1 -1
  95. package/dist/git/models/shortlog.d.ts.map +1 -1
  96. package/dist/git/models/shortlog.js.map +1 -1
  97. package/dist/git/models/signature.d.ts +14 -0
  98. package/dist/git/models/signature.d.ts.map +1 -1
  99. package/dist/git/models/signature.js.map +1 -1
  100. package/dist/git/models/staging.d.ts.map +1 -1
  101. package/dist/git/models/staging.js.map +1 -1
  102. package/dist/git/models/stash.d.ts.map +1 -1
  103. package/dist/git/models/stash.js.map +1 -1
  104. package/dist/git/models/status.d.ts.map +1 -1
  105. package/dist/git/models/status.js.map +1 -1
  106. package/dist/git/models/statusFile.d.ts.map +1 -1
  107. package/dist/git/models/statusFile.js.map +1 -1
  108. package/dist/git/models/tag.d.ts +11 -1
  109. package/dist/git/models/tag.d.ts.map +1 -1
  110. package/dist/git/models/tag.js +9 -2
  111. package/dist/git/models/tag.js.map +1 -1
  112. package/dist/git/models/tree.d.ts.map +1 -1
  113. package/dist/git/models/tree.js.map +1 -1
  114. package/dist/git/models/user.d.ts.map +1 -1
  115. package/dist/git/models/user.js.map +1 -1
  116. package/dist/git/models/worktree.d.ts.map +1 -1
  117. package/dist/git/models/worktree.js.map +1 -1
  118. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  119. package/dist/git/parsers/diffParser.js +1 -1
  120. package/dist/git/parsers/diffParser.js.map +1 -1
  121. package/dist/git/parsers/rebaseTodoParser.d.ts.map +1 -1
  122. package/dist/git/parsers/rebaseTodoParser.js.map +1 -1
  123. package/dist/git/providers/blame.d.ts.map +1 -1
  124. package/dist/git/providers/blame.js.map +1 -1
  125. package/dist/git/providers/branches.d.ts +8 -1
  126. package/dist/git/providers/branches.d.ts.map +1 -1
  127. package/dist/git/providers/branches.js.map +1 -1
  128. package/dist/git/providers/commits.d.ts +6 -1
  129. package/dist/git/providers/commits.d.ts.map +1 -1
  130. package/dist/git/providers/commits.js.map +1 -1
  131. package/dist/git/providers/config.d.ts +6 -2
  132. package/dist/git/providers/config.d.ts.map +1 -1
  133. package/dist/git/providers/config.js.map +1 -1
  134. package/dist/git/providers/contributors.d.ts.map +1 -1
  135. package/dist/git/providers/contributors.js.map +1 -1
  136. package/dist/git/providers/diff.d.ts.map +1 -1
  137. package/dist/git/providers/diff.js.map +1 -1
  138. package/dist/git/providers/graph.d.ts +55 -1
  139. package/dist/git/providers/graph.d.ts.map +1 -1
  140. package/dist/git/providers/graph.js.map +1 -1
  141. package/dist/git/providers/operations.d.ts.map +1 -1
  142. package/dist/git/providers/operations.js.map +1 -1
  143. package/dist/git/providers/patch.d.ts.map +1 -1
  144. package/dist/git/providers/patch.js.map +1 -1
  145. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  146. package/dist/git/providers/pausedOperations.js.map +1 -1
  147. package/dist/git/providers/provider.d.ts.map +1 -1
  148. package/dist/git/providers/provider.js.map +1 -1
  149. package/dist/git/providers/refs.d.ts.map +1 -1
  150. package/dist/git/providers/refs.js.map +1 -1
  151. package/dist/git/providers/remotes.d.ts.map +1 -1
  152. package/dist/git/providers/remotes.js.map +1 -1
  153. package/dist/git/providers/revision.d.ts.map +1 -1
  154. package/dist/git/providers/revision.js.map +1 -1
  155. package/dist/git/providers/shared/remotes.d.ts.map +1 -1
  156. package/dist/git/providers/shared/remotes.js.map +1 -1
  157. package/dist/git/providers/staging.d.ts.map +1 -1
  158. package/dist/git/providers/staging.js.map +1 -1
  159. package/dist/git/providers/stash.d.ts.map +1 -1
  160. package/dist/git/providers/stash.js.map +1 -1
  161. package/dist/git/providers/status.d.ts +1 -0
  162. package/dist/git/providers/status.d.ts.map +1 -1
  163. package/dist/git/providers/status.js.map +1 -1
  164. package/dist/git/providers/tags.d.ts.map +1 -1
  165. package/dist/git/providers/tags.js.map +1 -1
  166. package/dist/git/providers/types.d.ts.map +1 -1
  167. package/dist/git/providers/types.js.map +1 -1
  168. package/dist/git/providers/worktrees.d.ts +3 -1
  169. package/dist/git/providers/worktrees.d.ts.map +1 -1
  170. package/dist/git/providers/worktrees.js.map +1 -1
  171. package/dist/git/remotes/azure-devops.d.ts.map +1 -1
  172. package/dist/git/remotes/azure-devops.js +27 -31
  173. package/dist/git/remotes/azure-devops.js.map +1 -1
  174. package/dist/git/remotes/bitbucket-server.d.ts.map +1 -1
  175. package/dist/git/remotes/bitbucket-server.js +21 -23
  176. package/dist/git/remotes/bitbucket-server.js.map +1 -1
  177. package/dist/git/remotes/bitbucket.d.ts.map +1 -1
  178. package/dist/git/remotes/bitbucket.js +21 -23
  179. package/dist/git/remotes/bitbucket.js.map +1 -1
  180. package/dist/git/remotes/custom.d.ts.map +1 -1
  181. package/dist/git/remotes/custom.js.map +1 -1
  182. package/dist/git/remotes/gerrit.d.ts.map +1 -1
  183. package/dist/git/remotes/gerrit.js +11 -13
  184. package/dist/git/remotes/gerrit.js.map +1 -1
  185. package/dist/git/remotes/gitea.d.ts.map +1 -1
  186. package/dist/git/remotes/gitea.js +12 -14
  187. package/dist/git/remotes/gitea.js.map +1 -1
  188. package/dist/git/remotes/github.d.ts.map +1 -1
  189. package/dist/git/remotes/github.js +54 -56
  190. package/dist/git/remotes/github.js.map +1 -1
  191. package/dist/git/remotes/gitlab.d.ts.map +1 -1
  192. package/dist/git/remotes/gitlab.js +93 -95
  193. package/dist/git/remotes/gitlab.js.map +1 -1
  194. package/dist/git/remotes/google-source.d.ts.map +1 -1
  195. package/dist/git/remotes/google-source.js.map +1 -1
  196. package/dist/git/remotes/matcher.d.ts.map +1 -1
  197. package/dist/git/remotes/matcher.js.map +1 -1
  198. package/dist/git/run.types.d.ts +62 -3
  199. package/dist/git/run.types.d.ts.map +1 -1
  200. package/dist/git/service.d.ts.map +1 -1
  201. package/dist/git/utils/autolink.utils.d.ts.map +1 -1
  202. package/dist/git/utils/autolink.utils.js.map +1 -1
  203. package/dist/git/utils/blame.utils.d.ts.map +1 -1
  204. package/dist/git/utils/blame.utils.js.map +1 -1
  205. package/dist/git/utils/branch.utils.d.ts.map +1 -1
  206. package/dist/git/utils/branch.utils.js +12 -1
  207. package/dist/git/utils/branch.utils.js.map +1 -1
  208. package/dist/git/utils/commit.utils.d.ts.map +1 -1
  209. package/dist/git/utils/commit.utils.js.map +1 -1
  210. package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -1
  211. package/dist/git/utils/conflictResolution.utils.js.map +1 -1
  212. package/dist/git/utils/contributor.utils.d.ts +1 -1
  213. package/dist/git/utils/contributor.utils.d.ts.map +1 -1
  214. package/dist/git/utils/contributor.utils.js +1 -2
  215. package/dist/git/utils/contributor.utils.js.map +1 -1
  216. package/dist/git/utils/fetch.utils.d.ts.map +1 -1
  217. package/dist/git/utils/fetch.utils.js.map +1 -1
  218. package/dist/git/utils/fileStatus.utils.d.ts +7 -0
  219. package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
  220. package/dist/git/utils/fileStatus.utils.js +6 -0
  221. package/dist/git/utils/fileStatus.utils.js.map +1 -1
  222. package/dist/git/utils/graph.utils.d.ts +20 -0
  223. package/dist/git/utils/graph.utils.d.ts.map +1 -0
  224. package/dist/git/utils/graph.utils.js +40 -0
  225. package/dist/git/utils/graph.utils.js.map +1 -0
  226. package/dist/git/utils/issue.utils.d.ts.map +1 -1
  227. package/dist/git/utils/issue.utils.js +1 -0
  228. package/dist/git/utils/issue.utils.js.map +1 -1
  229. package/dist/git/utils/issueOrPullRequest.utils.d.ts.map +1 -1
  230. package/dist/git/utils/issueOrPullRequest.utils.js.map +1 -1
  231. package/dist/git/utils/mergeConflicts.utils.d.ts.map +1 -1
  232. package/dist/git/utils/mergeConflicts.utils.js.map +1 -1
  233. package/dist/git/utils/pausedOperationStatus.utils.d.ts +13 -13
  234. package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
  235. package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
  236. package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
  237. package/dist/git/utils/pullRequest.utils.js +9 -0
  238. package/dist/git/utils/pullRequest.utils.js.map +1 -1
  239. package/dist/git/utils/reachability.utils.d.ts +20 -2
  240. package/dist/git/utils/reachability.utils.d.ts.map +1 -1
  241. package/dist/git/utils/reachability.utils.js +68 -7
  242. package/dist/git/utils/reachability.utils.js.map +1 -1
  243. package/dist/git/utils/rebase.utils.d.ts.map +1 -1
  244. package/dist/git/utils/rebase.utils.js.map +1 -1
  245. package/dist/git/utils/reference.utils.d.ts.map +1 -1
  246. package/dist/git/utils/reference.utils.js.map +1 -1
  247. package/dist/git/utils/remote.utils.d.ts.map +1 -1
  248. package/dist/git/utils/remote.utils.js.map +1 -1
  249. package/dist/git/utils/repository.utils.d.ts.map +1 -1
  250. package/dist/git/utils/repository.utils.js.map +1 -1
  251. package/dist/git/utils/resourceDescriptor.utils.d.ts.map +1 -1
  252. package/dist/git/utils/resourceDescriptor.utils.js.map +1 -1
  253. package/dist/git/utils/revision.utils.d.ts.map +1 -1
  254. package/dist/git/utils/revision.utils.js.map +1 -1
  255. package/dist/git/utils/search.utils.d.ts.map +1 -1
  256. package/dist/git/utils/search.utils.js.map +1 -1
  257. package/dist/git/utils/sorting.d.ts.map +1 -1
  258. package/dist/git/utils/sorting.js.map +1 -1
  259. package/dist/git/utils/sshKey.utils.d.ts +7 -0
  260. package/dist/git/utils/sshKey.utils.d.ts.map +1 -0
  261. package/dist/git/utils/sshKey.utils.js +25 -0
  262. package/dist/git/utils/sshKey.utils.js.map +1 -0
  263. package/dist/git/utils/status.utils.d.ts.map +1 -1
  264. package/dist/git/utils/status.utils.js.map +1 -1
  265. package/dist/git/utils/statusFile.utils.d.ts.map +1 -1
  266. package/dist/git/utils/statusFile.utils.js.map +1 -1
  267. package/dist/git/utils/tag.utils.d.ts.map +1 -1
  268. package/dist/git/utils/tag.utils.js.map +1 -1
  269. package/dist/git/utils/tooltip.utils.d.ts.map +1 -1
  270. package/dist/git/utils/tooltip.utils.js.map +1 -1
  271. package/dist/git/utils/uriAuthority.d.ts.map +1 -1
  272. package/dist/git/utils/uriAuthority.js.map +1 -1
  273. package/dist/git/utils/user.utils.d.ts.map +1 -1
  274. package/dist/git/utils/user.utils.js.map +1 -1
  275. package/dist/git/utils/worktree.utils.d.ts.map +1 -1
  276. package/dist/git/utils/worktree.utils.js.map +1 -1
  277. package/dist/git/watching/changeEvent.d.ts.map +1 -1
  278. package/dist/git/watching/changeEvent.js.map +1 -1
  279. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  280. package/dist/git/watching/classifyChange.js.map +1 -1
  281. package/dist/git/watching/gitIgnoreFilter.d.ts.map +1 -1
  282. package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
  283. package/dist/git/watching/initWatcher.d.ts.map +1 -1
  284. package/dist/git/watching/initWatcher.js.map +1 -1
  285. package/dist/git/watching/provider.d.ts.map +1 -1
  286. package/dist/git/watching/provider.js.map +1 -1
  287. package/dist/git/watching/watchGroup.d.ts.map +1 -1
  288. package/dist/git/watching/watchGroup.js.map +1 -1
  289. package/dist/git/watching/watchService.d.ts +4 -0
  290. package/dist/git/watching/watchService.d.ts.map +1 -1
  291. package/dist/git/watching/watchService.js +15 -1
  292. package/dist/git/watching/watchService.js.map +1 -1
  293. package/dist/git/watching/watchSession.d.ts +7 -0
  294. package/dist/git/watching/watchSession.d.ts.map +1 -1
  295. package/dist/git/watching/watchSession.js +14 -2
  296. package/dist/git/watching/watchSession.js.map +1 -1
  297. package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
  298. package/dist/git/watching/watcherPatterns.js.map +1 -1
  299. package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
  300. package/dist/git-cli/exec/exec.d.ts.map +1 -1
  301. package/dist/git-cli/exec/exec.errors.d.ts.map +1 -1
  302. package/dist/git-cli/exec/exec.errors.js.map +1 -1
  303. package/dist/git-cli/exec/exec.js.map +1 -1
  304. package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
  305. package/dist/git-cli/exec/exec.types.js.map +1 -1
  306. package/dist/git-cli/exec/features.d.ts.map +1 -1
  307. package/dist/git-cli/exec/features.js.map +1 -1
  308. package/dist/git-cli/exec/git.d.ts +19 -27
  309. package/dist/git-cli/exec/git.d.ts.map +1 -1
  310. package/dist/git-cli/exec/git.js +126 -34
  311. package/dist/git-cli/exec/git.js.map +1 -1
  312. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  313. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  314. package/dist/git-cli/exec/locator.d.ts.map +1 -1
  315. package/dist/git-cli/exec/locator.js.map +1 -1
  316. package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
  317. package/dist/git-cli/parsers/blameParser.js.map +1 -1
  318. package/dist/git-cli/parsers/indexParser.d.ts.map +1 -1
  319. package/dist/git-cli/parsers/indexParser.js.map +1 -1
  320. package/dist/git-cli/parsers/logParser.d.ts +9 -1
  321. package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
  322. package/dist/git-cli/parsers/logParser.js +141 -60
  323. package/dist/git-cli/parsers/logParser.js.map +1 -1
  324. package/dist/git-cli/parsers/mergeTreeParser.d.ts.map +1 -1
  325. package/dist/git-cli/parsers/mergeTreeParser.js.map +1 -1
  326. package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
  327. package/dist/git-cli/parsers/refParser.js.map +1 -1
  328. package/dist/git-cli/parsers/reflogParser.d.ts.map +1 -1
  329. package/dist/git-cli/parsers/reflogParser.js.map +1 -1
  330. package/dist/git-cli/parsers/remoteParser.d.ts.map +1 -1
  331. package/dist/git-cli/parsers/remoteParser.js.map +1 -1
  332. package/dist/git-cli/parsers/shortlogParser.d.ts.map +1 -1
  333. package/dist/git-cli/parsers/shortlogParser.js.map +1 -1
  334. package/dist/git-cli/parsers/signatureParser.d.ts.map +1 -1
  335. package/dist/git-cli/parsers/signatureParser.js.map +1 -1
  336. package/dist/git-cli/parsers/sshSignatureParser.d.ts +21 -0
  337. package/dist/git-cli/parsers/sshSignatureParser.d.ts.map +1 -0
  338. package/dist/git-cli/parsers/sshSignatureParser.js +78 -0
  339. package/dist/git-cli/parsers/sshSignatureParser.js.map +1 -0
  340. package/dist/git-cli/parsers/statusParser.d.ts.map +1 -1
  341. package/dist/git-cli/parsers/statusParser.js.map +1 -1
  342. package/dist/git-cli/parsers/treeParser.d.ts.map +1 -1
  343. package/dist/git-cli/parsers/treeParser.js.map +1 -1
  344. package/dist/git-cli/parsers/worktreeParser.d.ts.map +1 -1
  345. package/dist/git-cli/parsers/worktreeParser.js +5 -7
  346. package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
  347. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  348. package/dist/git-cli/providers/blame.js.map +1 -1
  349. package/dist/git-cli/providers/branches.d.ts +1 -0
  350. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  351. package/dist/git-cli/providers/branches.js +51 -32
  352. package/dist/git-cli/providers/branches.js.map +1 -1
  353. package/dist/git-cli/providers/commitFilesetUtils.d.ts.map +1 -1
  354. package/dist/git-cli/providers/commitFilesetUtils.js.map +1 -1
  355. package/dist/git-cli/providers/commits.d.ts +12 -1
  356. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  357. package/dist/git-cli/providers/commits.js +89 -8
  358. package/dist/git-cli/providers/commits.js.map +1 -1
  359. package/dist/git-cli/providers/config.d.ts.map +1 -1
  360. package/dist/git-cli/providers/config.js.map +1 -1
  361. package/dist/git-cli/providers/contributors.d.ts.map +1 -1
  362. package/dist/git-cli/providers/contributors.js.map +1 -1
  363. package/dist/git-cli/providers/diff.d.ts.map +1 -1
  364. package/dist/git-cli/providers/diff.js.map +1 -1
  365. package/dist/git-cli/providers/graph.d.ts +35 -1
  366. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  367. package/dist/git-cli/providers/graph.js +1434 -330
  368. package/dist/git-cli/providers/graph.js.map +1 -1
  369. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  370. package/dist/git-cli/providers/operations.js.map +1 -1
  371. package/dist/git-cli/providers/patch.d.ts.map +1 -1
  372. package/dist/git-cli/providers/patch.js.map +1 -1
  373. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  374. package/dist/git-cli/providers/pausedOperations.js +3 -3
  375. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  376. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  377. package/dist/git-cli/providers/refs.js.map +1 -1
  378. package/dist/git-cli/providers/remotes.d.ts.map +1 -1
  379. package/dist/git-cli/providers/remotes.js.map +1 -1
  380. package/dist/git-cli/providers/revision.d.ts +1 -0
  381. package/dist/git-cli/providers/revision.d.ts.map +1 -1
  382. package/dist/git-cli/providers/revision.js +33 -0
  383. package/dist/git-cli/providers/revision.js.map +1 -1
  384. package/dist/git-cli/providers/staging.d.ts.map +1 -1
  385. package/dist/git-cli/providers/staging.js.map +1 -1
  386. package/dist/git-cli/providers/stash.d.ts.map +1 -1
  387. package/dist/git-cli/providers/stash.js.map +1 -1
  388. package/dist/git-cli/providers/status.d.ts +28 -0
  389. package/dist/git-cli/providers/status.d.ts.map +1 -1
  390. package/dist/git-cli/providers/status.js +240 -154
  391. package/dist/git-cli/providers/status.js.map +1 -1
  392. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  393. package/dist/git-cli/providers/tags.js +2 -1
  394. package/dist/git-cli/providers/tags.js.map +1 -1
  395. package/dist/git-cli/providers/worktrees.d.ts +2 -1
  396. package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
  397. package/dist/git-cli/providers/worktrees.js +28 -3
  398. package/dist/git-cli/providers/worktrees.js.map +1 -1
  399. package/dist/git-cli/service.d.ts.map +1 -1
  400. package/dist/git-cli/service.js +8 -0
  401. package/dist/git-cli/service.js.map +1 -1
  402. package/dist/ipc/ipcServer.d.ts.map +1 -1
  403. package/dist/ipc/ipcServer.js +1 -1
  404. package/dist/ipc/ipcServer.js.map +1 -1
  405. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +6 -1
  406. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
  407. package/dist/plus/agents/providers/claudeCodeProvider.js +19 -0
  408. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
  409. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +68 -0
  410. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
  411. package/dist/plus/agents/providers/claudeCodeTranscript.js +262 -8
  412. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
  413. package/dist/plus/agents/types.d.ts +36 -2
  414. package/dist/plus/agents/types.d.ts.map +1 -1
  415. package/dist/plus/ai/constants.d.ts +1 -2
  416. package/dist/plus/ai/constants.d.ts.map +1 -1
  417. package/dist/plus/ai/constants.js +1 -8
  418. package/dist/plus/ai/constants.js.map +1 -1
  419. package/dist/plus/ai/errors.d.ts.map +1 -1
  420. package/dist/plus/ai/errors.js.map +1 -1
  421. package/dist/plus/ai/models/conversation.d.ts.map +1 -1
  422. package/dist/plus/ai/models/conversation.js.map +1 -1
  423. package/dist/plus/ai/models/model.d.ts +2 -1
  424. package/dist/plus/ai/models/model.d.ts.map +1 -1
  425. package/dist/plus/ai/models/model.js +50 -1
  426. package/dist/plus/ai/models/model.js.map +1 -1
  427. package/dist/plus/ai/models/promptTemplates.d.ts +5 -2
  428. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  429. package/dist/plus/ai/models/promptTemplates.js.map +1 -1
  430. package/dist/plus/ai/models/provider.d.ts.map +1 -1
  431. package/dist/plus/ai/models/provider.js.map +1 -1
  432. package/dist/plus/ai/models/results.d.ts.map +1 -1
  433. package/dist/plus/ai/models/results.js.map +1 -1
  434. package/dist/plus/ai/prompts.d.ts +1 -1
  435. package/dist/plus/ai/prompts.d.ts.map +1 -1
  436. package/dist/plus/ai/prompts.js +15 -47
  437. package/dist/plus/ai/prompts.js.map +1 -1
  438. package/dist/plus/ai/providers/anthropicProvider.d.ts +5 -0
  439. package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
  440. package/dist/plus/ai/providers/anthropicProvider.js +40 -3
  441. package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
  442. package/dist/plus/ai/providers/azureProvider.d.ts.map +1 -1
  443. package/dist/plus/ai/providers/azureProvider.js.map +1 -1
  444. package/dist/plus/ai/providers/context.d.ts.map +1 -1
  445. package/dist/plus/ai/providers/context.js.map +1 -1
  446. package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
  447. package/dist/plus/ai/providers/deepSeekProvider.js +17 -1
  448. package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
  449. package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
  450. package/dist/plus/ai/providers/geminiProvider.js +25 -6
  451. package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
  452. package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
  453. package/dist/plus/ai/providers/gitkrakenProvider.js +1 -0
  454. package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
  455. package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -1
  456. package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
  457. package/dist/plus/ai/providers/huggingFaceProvider.js +21 -18
  458. package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
  459. package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
  460. package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
  461. package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
  462. package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
  463. package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
  464. package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
  465. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +10 -1
  466. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
  467. package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -1
  468. package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
  469. package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
  470. package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
  471. package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
  472. package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
  473. package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
  474. package/dist/plus/ai/providers/xaiProvider.js +14 -1
  475. package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
  476. package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
  477. package/dist/plus/ai/utils/ai.utils.js +0 -2
  478. package/dist/plus/ai/utils/ai.utils.js.map +1 -1
  479. package/dist/plus/ai/utils/results.utils.d.ts +3 -0
  480. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  481. package/dist/plus/ai/utils/results.utils.js +26 -0
  482. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  483. package/dist/plus/ai/utils/truncation.utils.d.ts +1 -1
  484. package/dist/plus/ai/utils/truncation.utils.d.ts.map +1 -1
  485. package/dist/plus/ai/utils/truncation.utils.js.map +1 -1
  486. package/dist/plus/git-github/api/config.d.ts.map +1 -1
  487. package/dist/plus/git-github/api/config.js.map +1 -1
  488. package/dist/plus/git-github/api/github.d.ts +66 -3
  489. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  490. package/dist/plus/git-github/api/github.js +345 -74
  491. package/dist/plus/git-github/api/github.js.map +1 -1
  492. package/dist/plus/git-github/api/github.utils.d.ts.map +1 -1
  493. package/dist/plus/git-github/api/github.utils.js.map +1 -1
  494. package/dist/plus/git-github/api/token.d.ts.map +1 -1
  495. package/dist/plus/git-github/api/token.js.map +1 -1
  496. package/dist/plus/git-github/api/tokenUtils.d.ts.map +1 -1
  497. package/dist/plus/git-github/api/tokenUtils.js.map +1 -1
  498. package/dist/plus/git-github/api/types.d.ts.map +1 -1
  499. package/dist/plus/git-github/api/types.js.map +1 -1
  500. package/dist/plus/git-github/context.d.ts.map +1 -1
  501. package/dist/plus/git-github/models.d.ts +5 -0
  502. package/dist/plus/git-github/models.d.ts.map +1 -1
  503. package/dist/plus/git-github/models.js +27 -2
  504. package/dist/plus/git-github/models.js.map +1 -1
  505. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  506. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  507. package/dist/plus/git-github/providers/github/branches.d.ts +2 -1
  508. package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
  509. package/dist/plus/git-github/providers/github/branches.js +7 -3
  510. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  511. package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
  512. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  513. package/dist/plus/git-github/providers/github/config.d.ts.map +1 -1
  514. package/dist/plus/git-github/providers/github/config.js.map +1 -1
  515. package/dist/plus/git-github/providers/github/contributors.d.ts.map +1 -1
  516. package/dist/plus/git-github/providers/github/contributors.js.map +1 -1
  517. package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
  518. package/dist/plus/git-github/providers/github/diff.js +2 -2
  519. package/dist/plus/git-github/providers/github/diff.js.map +1 -1
  520. package/dist/plus/git-github/providers/github/graph.d.ts +12 -1
  521. package/dist/plus/git-github/providers/github/graph.d.ts.map +1 -1
  522. package/dist/plus/git-github/providers/github/graph.js +85 -0
  523. package/dist/plus/git-github/providers/github/graph.js.map +1 -1
  524. package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
  525. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  526. package/dist/plus/git-github/providers/github/remotes.d.ts.map +1 -1
  527. package/dist/plus/git-github/providers/github/remotes.js.map +1 -1
  528. package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
  529. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  530. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  531. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  532. package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
  533. package/dist/plus/git-github/providers/github/tags.js +3 -1
  534. package/dist/plus/git-github/providers/github/tags.js.map +1 -1
  535. package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
  536. package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
  537. package/dist/plus/git-github/providers/githubProvider.d.ts.map +1 -1
  538. package/dist/plus/git-github/providers/githubProvider.js.map +1 -1
  539. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts +20 -1
  540. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts.map +1 -1
  541. package/dist/plus/integrations/authentication/cloudIntegrationService.js +134 -10
  542. package/dist/plus/integrations/authentication/cloudIntegrationService.js.map +1 -1
  543. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts +52 -5
  544. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts.map +1 -1
  545. package/dist/plus/integrations/authentication/configuredIntegrationService.js +248 -46
  546. package/dist/plus/integrations/authentication/configuredIntegrationService.js.map +1 -1
  547. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts +24 -4
  548. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts.map +1 -1
  549. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js +58 -26
  550. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js.map +1 -1
  551. package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts.map +1 -1
  552. package/dist/plus/integrations/authentication/integrationAuthenticationService.js +7 -3
  553. package/dist/plus/integrations/authentication/integrationAuthenticationService.js.map +1 -1
  554. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts +1 -0
  555. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts.map +1 -1
  556. package/dist/plus/integrations/authentication/manualTokenProvider.js +9 -5
  557. package/dist/plus/integrations/authentication/manualTokenProvider.js.map +1 -1
  558. package/dist/plus/integrations/authentication/models.d.ts +33 -0
  559. package/dist/plus/integrations/authentication/models.d.ts.map +1 -1
  560. package/dist/plus/integrations/authentication/models.js.map +1 -1
  561. package/dist/plus/integrations/collectionMetadata.d.ts +21 -0
  562. package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -0
  563. package/dist/plus/integrations/collectionMetadata.js +121 -0
  564. package/dist/plus/integrations/collectionMetadata.js.map +1 -0
  565. package/dist/plus/integrations/constants.d.ts +12 -2
  566. package/dist/plus/integrations/constants.d.ts.map +1 -1
  567. package/dist/plus/integrations/constants.js +10 -0
  568. package/dist/plus/integrations/constants.js.map +1 -1
  569. package/dist/plus/integrations/context.d.ts +10 -6
  570. package/dist/plus/integrations/context.d.ts.map +1 -1
  571. package/dist/plus/integrations/errors.d.ts +65 -0
  572. package/dist/plus/integrations/errors.d.ts.map +1 -1
  573. package/dist/plus/integrations/errors.js +135 -0
  574. package/dist/plus/integrations/errors.js.map +1 -1
  575. package/dist/plus/integrations/index.d.ts +57 -12
  576. package/dist/plus/integrations/index.d.ts.map +1 -1
  577. package/dist/plus/integrations/index.js +39 -37
  578. package/dist/plus/integrations/index.js.map +1 -1
  579. package/dist/plus/integrations/integrationService.d.ts +297 -13
  580. package/dist/plus/integrations/integrationService.d.ts.map +1 -1
  581. package/dist/plus/integrations/integrationService.js +672 -36
  582. package/dist/plus/integrations/integrationService.js.map +1 -1
  583. package/dist/plus/integrations/lite.d.ts +47 -0
  584. package/dist/plus/integrations/lite.d.ts.map +1 -0
  585. package/dist/plus/integrations/lite.js +141 -0
  586. package/dist/plus/integrations/lite.js.map +1 -0
  587. package/dist/plus/integrations/manager.d.ts +332 -0
  588. package/dist/plus/integrations/manager.d.ts.map +1 -0
  589. package/dist/plus/integrations/manager.js +2 -0
  590. package/dist/plus/integrations/manager.js.map +1 -0
  591. package/dist/plus/integrations/models/gitHostIntegration.d.ts +262 -10
  592. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
  593. package/dist/plus/integrations/models/gitHostIntegration.js +675 -101
  594. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  595. package/dist/plus/integrations/models/integration.d.ts +88 -3
  596. package/dist/plus/integrations/models/integration.d.ts.map +1 -1
  597. package/dist/plus/integrations/models/integration.js +192 -21
  598. package/dist/plus/integrations/models/integration.js.map +1 -1
  599. package/dist/plus/integrations/models/issuesIntegration.d.ts +70 -7
  600. package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -1
  601. package/dist/plus/integrations/models/issuesIntegration.js +108 -35
  602. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
  603. package/dist/plus/integrations/providerFilters.d.ts +12 -0
  604. package/dist/plus/integrations/providerFilters.d.ts.map +1 -0
  605. package/dist/plus/integrations/providerFilters.js +14 -0
  606. package/dist/plus/integrations/providerFilters.js.map +1 -0
  607. package/dist/plus/integrations/providers/apiClients.d.ts.map +1 -1
  608. package/dist/plus/integrations/providers/apiClients.js +3 -3
  609. package/dist/plus/integrations/providers/apiClients.js.map +1 -1
  610. package/dist/plus/integrations/providers/apiConfig.d.ts +52 -0
  611. package/dist/plus/integrations/providers/apiConfig.d.ts.map +1 -0
  612. package/dist/plus/integrations/providers/apiConfig.js +19 -0
  613. package/dist/plus/integrations/providers/apiConfig.js.map +1 -0
  614. package/dist/plus/integrations/providers/azure/azure.d.ts +14 -2
  615. package/dist/plus/integrations/providers/azure/azure.d.ts.map +1 -1
  616. package/dist/plus/integrations/providers/azure/azure.js +107 -32
  617. package/dist/plus/integrations/providers/azure/azure.js.map +1 -1
  618. package/dist/plus/integrations/providers/azure/models.d.ts +16 -0
  619. package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -1
  620. package/dist/plus/integrations/providers/azure/models.js +6 -6
  621. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  622. package/dist/plus/integrations/providers/azureDevOps.d.ts +55 -9
  623. package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -1
  624. package/dist/plus/integrations/providers/azureDevOps.js +572 -79
  625. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  626. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +13 -2
  627. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts.map +1 -1
  628. package/dist/plus/integrations/providers/bitbucket/bitbucket.js +108 -32
  629. package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -1
  630. package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -1
  631. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
  632. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +19 -1
  633. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts.map +1 -1
  634. package/dist/plus/integrations/providers/bitbucket-server/models.js +20 -1
  635. package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -1
  636. package/dist/plus/integrations/providers/bitbucket-server.d.ts +28 -4
  637. package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -1
  638. package/dist/plus/integrations/providers/bitbucket-server.js +110 -6
  639. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -1
  640. package/dist/plus/integrations/providers/bitbucket.d.ts +38 -4
  641. package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -1
  642. package/dist/plus/integrations/providers/bitbucket.js +330 -34
  643. package/dist/plus/integrations/providers/bitbucket.js.map +1 -1
  644. package/dist/plus/integrations/providers/github/github.d.ts.map +1 -1
  645. package/dist/plus/integrations/providers/github/github.js +1 -1
  646. package/dist/plus/integrations/providers/github/github.js.map +1 -1
  647. package/dist/plus/integrations/providers/github/github.utils.d.ts.map +1 -1
  648. package/dist/plus/integrations/providers/github/github.utils.js.map +1 -1
  649. package/dist/plus/integrations/providers/github/models.d.ts.map +1 -1
  650. package/dist/plus/integrations/providers/github/models.js.map +1 -1
  651. package/dist/plus/integrations/providers/github.d.ts +49 -6
  652. package/dist/plus/integrations/providers/github.d.ts.map +1 -1
  653. package/dist/plus/integrations/providers/github.js +289 -4
  654. package/dist/plus/integrations/providers/github.js.map +1 -1
  655. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +11 -3
  656. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts.map +1 -1
  657. package/dist/plus/integrations/providers/gitlab/gitlab.js +121 -47
  658. package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -1
  659. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts +6 -0
  660. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts.map +1 -1
  661. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js +8 -0
  662. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js.map +1 -1
  663. package/dist/plus/integrations/providers/gitlab/models.d.ts +10 -0
  664. package/dist/plus/integrations/providers/gitlab/models.d.ts.map +1 -1
  665. package/dist/plus/integrations/providers/gitlab/models.js +8 -5
  666. package/dist/plus/integrations/providers/gitlab/models.js.map +1 -1
  667. package/dist/plus/integrations/providers/gitlab.d.ts +50 -5
  668. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
  669. package/dist/plus/integrations/providers/gitlab.js +274 -8
  670. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  671. package/dist/plus/integrations/providers/jira.d.ts +13 -2
  672. package/dist/plus/integrations/providers/jira.d.ts.map +1 -1
  673. package/dist/plus/integrations/providers/jira.js +200 -30
  674. package/dist/plus/integrations/providers/jira.js.map +1 -1
  675. package/dist/plus/integrations/providers/linear.d.ts +16 -5
  676. package/dist/plus/integrations/providers/linear.d.ts.map +1 -1
  677. package/dist/plus/integrations/providers/linear.js +127 -21
  678. package/dist/plus/integrations/providers/linear.js.map +1 -1
  679. package/dist/plus/integrations/providers/models.d.ts +339 -60
  680. package/dist/plus/integrations/providers/models.d.ts.map +1 -1
  681. package/dist/plus/integrations/providers/models.js +307 -59
  682. package/dist/plus/integrations/providers/models.js.map +1 -1
  683. package/dist/plus/integrations/providers/providersApi.d.ts +144 -11
  684. package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -1
  685. package/dist/plus/integrations/providers/providersApi.js +486 -55
  686. package/dist/plus/integrations/providers/providersApi.js.map +1 -1
  687. package/dist/plus/integrations/providers/trello.d.ts +47 -0
  688. package/dist/plus/integrations/providers/trello.d.ts.map +1 -0
  689. package/dist/plus/integrations/providers/trello.js +141 -0
  690. package/dist/plus/integrations/providers/trello.js.map +1 -0
  691. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +29 -0
  692. package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -0
  693. package/dist/plus/integrations/providers/utils/providerPaging.js +154 -0
  694. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -0
  695. package/dist/plus/integrations/providers/utils.d.ts +21 -0
  696. package/dist/plus/integrations/providers/utils.d.ts.map +1 -1
  697. package/dist/plus/integrations/providers/utils.js +57 -6
  698. package/dist/plus/integrations/providers/utils.js.map +1 -1
  699. package/dist/plus/integrations/reads/broaden.d.ts +20 -0
  700. package/dist/plus/integrations/reads/broaden.d.ts.map +1 -0
  701. package/dist/plus/integrations/reads/broaden.js +326 -0
  702. package/dist/plus/integrations/reads/broaden.js.map +1 -0
  703. package/dist/plus/integrations/reads/context.d.ts +74 -0
  704. package/dist/plus/integrations/reads/context.d.ts.map +1 -0
  705. package/dist/plus/integrations/reads/context.js +2 -0
  706. package/dist/plus/integrations/reads/context.js.map +1 -0
  707. package/dist/plus/integrations/reads/cursors.d.ts +66 -0
  708. package/dist/plus/integrations/reads/cursors.d.ts.map +1 -0
  709. package/dist/plus/integrations/reads/cursors.js +133 -0
  710. package/dist/plus/integrations/reads/cursors.js.map +1 -0
  711. package/dist/plus/integrations/reads/drains.d.ts +60 -0
  712. package/dist/plus/integrations/reads/drains.d.ts.map +1 -0
  713. package/dist/plus/integrations/reads/drains.js +255 -0
  714. package/dist/plus/integrations/reads/drains.js.map +1 -0
  715. package/dist/plus/integrations/reads/filters.d.ts +81 -0
  716. package/dist/plus/integrations/reads/filters.d.ts.map +1 -0
  717. package/dist/plus/integrations/reads/filters.js +87 -0
  718. package/dist/plus/integrations/reads/filters.js.map +1 -0
  719. package/dist/plus/integrations/reads/hierarchy.d.ts +17 -0
  720. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -0
  721. package/dist/plus/integrations/reads/hierarchy.js +320 -0
  722. package/dist/plus/integrations/reads/hierarchy.js.map +1 -0
  723. package/dist/plus/integrations/reads/hierarchy.utils.d.ts +77 -0
  724. package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -0
  725. package/dist/plus/integrations/reads/hierarchy.utils.js +128 -0
  726. package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -0
  727. package/dist/plus/integrations/reads/issueTracker.d.ts +19 -0
  728. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -0
  729. package/dist/plus/integrations/reads/issueTracker.js +334 -0
  730. package/dist/plus/integrations/reads/issueTracker.js.map +1 -0
  731. package/dist/plus/integrations/reads/issues.d.ts +34 -0
  732. package/dist/plus/integrations/reads/issues.d.ts.map +1 -0
  733. package/dist/plus/integrations/reads/issues.js +244 -0
  734. package/dist/plus/integrations/reads/issues.js.map +1 -0
  735. package/dist/plus/integrations/reads/paging.d.ts +136 -0
  736. package/dist/plus/integrations/reads/paging.d.ts.map +1 -0
  737. package/dist/plus/integrations/reads/paging.js +221 -0
  738. package/dist/plus/integrations/reads/paging.js.map +1 -0
  739. package/dist/plus/integrations/reads/pullRequests.d.ts +32 -0
  740. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -0
  741. package/dist/plus/integrations/reads/pullRequests.js +151 -0
  742. package/dist/plus/integrations/reads/pullRequests.js.map +1 -0
  743. package/dist/plus/integrations/reads/resolveRepository.d.ts +25 -0
  744. package/dist/plus/integrations/reads/resolveRepository.d.ts.map +1 -0
  745. package/dist/plus/integrations/reads/resolveRepository.js +235 -0
  746. package/dist/plus/integrations/reads/resolveRepository.js.map +1 -0
  747. package/dist/plus/integrations/reads/sweeps.d.ts +11 -0
  748. package/dist/plus/integrations/reads/sweeps.d.ts.map +1 -0
  749. package/dist/plus/integrations/reads/sweeps.js +125 -0
  750. package/dist/plus/integrations/reads/sweeps.js.map +1 -0
  751. package/dist/plus/integrations/reads/warnings.d.ts +47 -0
  752. package/dist/plus/integrations/reads/warnings.d.ts.map +1 -0
  753. package/dist/plus/integrations/reads/warnings.js +81 -0
  754. package/dist/plus/integrations/reads/warnings.js.map +1 -0
  755. package/dist/plus/integrations/results.d.ts +189 -0
  756. package/dist/plus/integrations/results.d.ts.map +1 -0
  757. package/dist/plus/integrations/results.js +62 -0
  758. package/dist/plus/integrations/results.js.map +1 -0
  759. package/dist/plus/integrations/utils/domain.utils.d.ts +5 -0
  760. package/dist/plus/integrations/utils/domain.utils.d.ts.map +1 -0
  761. package/dist/plus/integrations/utils/domain.utils.js +27 -0
  762. package/dist/plus/integrations/utils/domain.utils.js.map +1 -0
  763. package/dist/plus/integrations/utils/integration.utils.d.ts +27 -1
  764. package/dist/plus/integrations/utils/integration.utils.d.ts.map +1 -1
  765. package/dist/plus/integrations/utils/integration.utils.js +86 -15
  766. package/dist/plus/integrations/utils/integration.utils.js.map +1 -1
  767. package/dist/utils/array.d.ts.map +1 -1
  768. package/dist/utils/array.js.map +1 -1
  769. package/dist/utils/brand.d.ts.map +1 -1
  770. package/dist/utils/cancellation.d.ts +13 -0
  771. package/dist/utils/cancellation.d.ts.map +1 -1
  772. package/dist/utils/cancellation.js +52 -7
  773. package/dist/utils/cancellation.js.map +1 -1
  774. package/dist/utils/charCode.d.ts.map +1 -1
  775. package/dist/utils/coalescedRun.d.ts +16 -0
  776. package/dist/utils/coalescedRun.d.ts.map +1 -0
  777. package/dist/utils/coalescedRun.js +43 -0
  778. package/dist/utils/coalescedRun.js.map +1 -0
  779. package/dist/utils/color.d.ts.map +1 -1
  780. package/dist/utils/color.js +3 -3
  781. package/dist/utils/color.js.map +1 -1
  782. package/dist/utils/date.d.ts +24 -0
  783. package/dist/utils/date.d.ts.map +1 -1
  784. package/dist/utils/date.js +62 -0
  785. package/dist/utils/date.js.map +1 -1
  786. package/dist/utils/debounce.js +1 -1
  787. package/dist/utils/debounce.js.map +1 -1
  788. package/dist/utils/decorators/debounce.d.ts.map +1 -1
  789. package/dist/utils/decorators/debounce.js.map +1 -1
  790. package/dist/utils/decorators/gate.d.ts.map +1 -1
  791. package/dist/utils/decorators/gate.js +2 -2
  792. package/dist/utils/decorators/gate.js.map +1 -1
  793. package/dist/utils/decorators/log.d.ts.map +1 -1
  794. package/dist/utils/decorators/log.js +5 -5
  795. package/dist/utils/decorators/log.js.map +1 -1
  796. package/dist/utils/decorators/memoize.d.ts.map +1 -1
  797. package/dist/utils/decorators/memoize.js +2 -2
  798. package/dist/utils/decorators/memoize.js.map +1 -1
  799. package/dist/utils/decorators/resolver.d.ts.map +1 -1
  800. package/dist/utils/decorators/resolver.js.map +1 -1
  801. package/dist/utils/decorators/sequentialize.d.ts.map +1 -1
  802. package/dist/utils/decorators/sequentialize.js +2 -2
  803. package/dist/utils/decorators/sequentialize.js.map +1 -1
  804. package/dist/utils/decorators/serializable.d.ts.map +1 -1
  805. package/dist/utils/decorators/serializable.js +1 -1
  806. package/dist/utils/decorators/serializable.js.map +1 -1
  807. package/dist/utils/dedupedAsyncCache.d.ts.map +1 -1
  808. package/dist/utils/env/browser/base64.d.ts.map +1 -1
  809. package/dist/utils/env/browser/base64.js.map +1 -1
  810. package/dist/utils/env/browser/crypto.d.ts.map +1 -1
  811. package/dist/utils/env/browser/crypto.js.map +1 -1
  812. package/dist/utils/env/browser/fs.d.ts.map +1 -1
  813. package/dist/utils/env/browser/fs.js.map +1 -1
  814. package/dist/utils/env/browser/hex.d.ts.map +1 -1
  815. package/dist/utils/env/browser/hex.js.map +1 -1
  816. package/dist/utils/env/browser/hrtime.d.ts.map +1 -1
  817. package/dist/utils/env/browser/hrtime.js.map +1 -1
  818. package/dist/utils/env/browser/logScope.d.ts.map +1 -1
  819. package/dist/utils/env/browser/logScope.js.map +1 -1
  820. package/dist/utils/env/browser/md5.d.ts.map +1 -1
  821. package/dist/utils/env/browser/md5.js.map +1 -1
  822. package/dist/utils/env/browser/platform.d.ts.map +1 -1
  823. package/dist/utils/env/browser/platform.js.map +1 -1
  824. package/dist/utils/env/node/base64.d.ts.map +1 -1
  825. package/dist/utils/env/node/base64.js.map +1 -1
  826. package/dist/utils/env/node/crypto.d.ts.map +1 -1
  827. package/dist/utils/env/node/crypto.js.map +1 -1
  828. package/dist/utils/env/node/exec.d.ts +9 -1
  829. package/dist/utils/env/node/exec.d.ts.map +1 -1
  830. package/dist/utils/env/node/exec.js +11 -4
  831. package/dist/utils/env/node/exec.js.map +1 -1
  832. package/dist/utils/env/node/fs.d.ts.map +1 -1
  833. package/dist/utils/env/node/fs.js.map +1 -1
  834. package/dist/utils/env/node/hex.d.ts.map +1 -1
  835. package/dist/utils/env/node/hex.js.map +1 -1
  836. package/dist/utils/env/node/hrtime.d.ts.map +1 -1
  837. package/dist/utils/env/node/hrtime.js.map +1 -1
  838. package/dist/utils/env/node/logScope.d.ts.map +1 -1
  839. package/dist/utils/env/node/logScope.js.map +1 -1
  840. package/dist/utils/env/node/platform.d.ts.map +1 -1
  841. package/dist/utils/env/node/platform.js.map +1 -1
  842. package/dist/utils/event.d.ts.map +1 -1
  843. package/dist/utils/event.js +18 -22
  844. package/dist/utils/event.js.map +1 -1
  845. package/dist/utils/formatter.d.ts.map +1 -1
  846. package/dist/utils/formatter.js.map +1 -1
  847. package/dist/utils/function.d.ts.map +1 -1
  848. package/dist/utils/function.js +3 -3
  849. package/dist/utils/function.js.map +1 -1
  850. package/dist/utils/hash.js.map +1 -1
  851. package/dist/utils/iterable.d.ts.map +1 -1
  852. package/dist/utils/iterable.js +2 -6
  853. package/dist/utils/iterable.js.map +1 -1
  854. package/dist/utils/lazy.d.ts.map +1 -1
  855. package/dist/utils/lazy.js.map +1 -1
  856. package/dist/utils/logger.d.ts.map +1 -1
  857. package/dist/utils/logger.js +1 -1
  858. package/dist/utils/logger.js.map +1 -1
  859. package/dist/utils/logger.scoped.js +1 -1
  860. package/dist/utils/logger.scoped.js.map +1 -1
  861. package/dist/utils/lruMap.d.ts.map +1 -1
  862. package/dist/utils/lruMap.js.map +1 -1
  863. package/dist/utils/mru.d.ts.map +1 -1
  864. package/dist/utils/mru.js.map +1 -1
  865. package/dist/utils/object.js.map +1 -1
  866. package/dist/utils/paging.d.ts +29 -0
  867. package/dist/utils/paging.d.ts.map +1 -1
  868. package/dist/utils/paging.js +18 -0
  869. package/dist/utils/paging.js.map +1 -1
  870. package/dist/utils/path.js.map +1 -1
  871. package/dist/utils/promise.d.ts +10 -0
  872. package/dist/utils/promise.d.ts.map +1 -1
  873. package/dist/utils/promise.js +26 -3
  874. package/dist/utils/promise.js.map +1 -1
  875. package/dist/utils/promiseCache.d.ts +12 -2
  876. package/dist/utils/promiseCache.d.ts.map +1 -1
  877. package/dist/utils/promiseCache.js +80 -50
  878. package/dist/utils/promiseCache.js.map +1 -1
  879. package/dist/utils/searchTree.d.ts.map +1 -1
  880. package/dist/utils/searchTree.js +4 -1
  881. package/dist/utils/searchTree.js.map +1 -1
  882. package/dist/utils/stopwatch.d.ts.map +1 -1
  883. package/dist/utils/string.js +1 -1
  884. package/dist/utils/string.js.map +1 -1
  885. package/dist/utils/subscriptionManager.d.ts.map +1 -1
  886. package/dist/utils/subscriptionManager.js.map +1 -1
  887. package/dist/utils/trie.d.ts.map +1 -1
  888. package/dist/utils/trie.js +1 -0
  889. package/dist/utils/trie.js.map +1 -1
  890. package/docs/integrations.md +372 -0
  891. package/docs/kepler-read-api-parity.md +112 -0
  892. package/package.json +238 -213
  893. package/src/git/cache.ts +75 -8
  894. package/src/git/errors.ts +36 -1
  895. package/src/git/models/commit.ts +1 -1
  896. package/src/git/models/graph.ts +147 -0
  897. package/src/git/models/graphSession.ts +205 -0
  898. package/src/git/models/issue.ts +12 -1
  899. package/src/git/models/pullRequest.ts +27 -1
  900. package/src/git/models/repository.ts +24 -1
  901. package/src/git/models/resourceDescriptor.ts +17 -0
  902. package/src/git/models/signature.ts +16 -0
  903. package/src/git/models/tag.ts +6 -1
  904. package/src/git/parsers/diffParser.ts +1 -1
  905. package/src/git/providers/branches.ts +6 -1
  906. package/src/git/providers/commits.ts +6 -1
  907. package/src/git/providers/config.ts +5 -1
  908. package/src/git/providers/graph.ts +69 -2
  909. package/src/git/providers/status.ts +1 -1
  910. package/src/git/providers/worktrees.ts +3 -1
  911. package/src/git/remotes/azure-devops.ts +29 -33
  912. package/src/git/remotes/bitbucket-server.ts +23 -25
  913. package/src/git/remotes/bitbucket.ts +23 -25
  914. package/src/git/remotes/gerrit.ts +12 -14
  915. package/src/git/remotes/gitea.ts +13 -15
  916. package/src/git/remotes/github.ts +56 -58
  917. package/src/git/remotes/gitlab.ts +102 -104
  918. package/src/git/run.types.ts +54 -4
  919. package/src/git/utils/branch.utils.ts +12 -1
  920. package/src/git/utils/contributor.utils.ts +1 -1
  921. package/src/git/utils/fileStatus.utils.ts +7 -0
  922. package/src/git/utils/graph.utils.ts +46 -0
  923. package/src/git/utils/issue.utils.ts +1 -0
  924. package/src/git/utils/pullRequest.utils.ts +9 -0
  925. package/src/git/utils/reachability.utils.ts +79 -8
  926. package/src/git/utils/sshKey.utils.ts +30 -0
  927. package/src/git/watching/watchService.ts +16 -1
  928. package/src/git/watching/watchSession.ts +20 -2
  929. package/src/git-cli/exec/git.ts +144 -42
  930. package/src/git-cli/parsers/logParser.ts +83 -1
  931. package/src/git-cli/parsers/sshSignatureParser.ts +85 -0
  932. package/src/git-cli/parsers/worktreeParser.ts +5 -7
  933. package/src/git-cli/providers/branches.ts +60 -38
  934. package/src/git-cli/providers/commits.ts +102 -9
  935. package/src/git-cli/providers/graph.ts +1771 -393
  936. package/src/git-cli/providers/pausedOperations.ts +3 -3
  937. package/src/git-cli/providers/revision.ts +42 -0
  938. package/src/git-cli/providers/status.ts +333 -178
  939. package/src/git-cli/providers/tags.ts +2 -0
  940. package/src/git-cli/providers/worktrees.ts +40 -4
  941. package/src/git-cli/service.ts +9 -0
  942. package/src/ipc/ipcServer.ts +1 -1
  943. package/src/plus/agents/providers/claudeCodeProvider.ts +25 -0
  944. package/src/plus/agents/providers/claudeCodeTranscript.ts +320 -8
  945. package/src/plus/agents/types.ts +34 -0
  946. package/src/plus/ai/constants.ts +1 -9
  947. package/src/plus/ai/models/model.ts +53 -2
  948. package/src/plus/ai/models/promptTemplates.ts +9 -2
  949. package/src/plus/ai/prompts.ts +16 -48
  950. package/src/plus/ai/providers/anthropicProvider.ts +45 -3
  951. package/src/plus/ai/providers/deepSeekProvider.ts +17 -1
  952. package/src/plus/ai/providers/geminiProvider.ts +25 -6
  953. package/src/plus/ai/providers/gitkrakenProvider.ts +2 -0
  954. package/src/plus/ai/providers/huggingFaceProvider.ts +28 -21
  955. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +16 -1
  956. package/src/plus/ai/providers/xaiProvider.ts +14 -1
  957. package/src/plus/ai/utils/ai.utils.ts +0 -2
  958. package/src/plus/ai/utils/results.utils.ts +32 -0
  959. package/src/plus/ai/utils/truncation.utils.ts +0 -1
  960. package/src/plus/git-github/api/github.ts +484 -104
  961. package/src/plus/git-github/models.ts +33 -0
  962. package/src/plus/git-github/providers/github/branches.ts +6 -3
  963. package/src/plus/git-github/providers/github/diff.ts +1 -1
  964. package/src/plus/git-github/providers/github/graph.ts +131 -0
  965. package/src/plus/git-github/providers/github/tags.ts +2 -0
  966. package/src/plus/integrations/authentication/cloudIntegrationService.ts +189 -17
  967. package/src/plus/integrations/authentication/configuredIntegrationService.ts +287 -50
  968. package/src/plus/integrations/authentication/integrationAuthenticationProvider.ts +105 -31
  969. package/src/plus/integrations/authentication/integrationAuthenticationService.ts +7 -3
  970. package/src/plus/integrations/authentication/manualTokenProvider.ts +12 -5
  971. package/src/plus/integrations/authentication/models.ts +35 -1
  972. package/src/plus/integrations/collectionMetadata.ts +143 -0
  973. package/src/plus/integrations/constants.ts +21 -0
  974. package/src/plus/integrations/context.ts +8 -9
  975. package/src/plus/integrations/errors.ts +153 -0
  976. package/src/plus/integrations/index.ts +148 -51
  977. package/src/plus/integrations/integrationService.ts +940 -49
  978. package/src/plus/integrations/lite.ts +233 -0
  979. package/src/plus/integrations/manager.ts +359 -0
  980. package/src/plus/integrations/models/gitHostIntegration.ts +1005 -134
  981. package/src/plus/integrations/models/integration.ts +293 -24
  982. package/src/plus/integrations/models/issuesIntegration.ts +132 -39
  983. package/src/plus/integrations/providerFilters.ts +12 -0
  984. package/src/plus/integrations/providers/apiClients.ts +8 -11
  985. package/src/plus/integrations/providers/apiConfig.ts +71 -0
  986. package/src/plus/integrations/providers/azure/azure.ts +164 -33
  987. package/src/plus/integrations/providers/azure/models.ts +19 -6
  988. package/src/plus/integrations/providers/azureDevOps.ts +766 -101
  989. package/src/plus/integrations/providers/bitbucket/bitbucket.ts +164 -34
  990. package/src/plus/integrations/providers/bitbucket-server/models.ts +32 -1
  991. package/src/plus/integrations/providers/bitbucket-server.ts +173 -8
  992. package/src/plus/integrations/providers/bitbucket.ts +489 -45
  993. package/src/plus/integrations/providers/github/github.ts +2 -2
  994. package/src/plus/integrations/providers/github/github.utils.ts +1 -1
  995. package/src/plus/integrations/providers/github.ts +390 -6
  996. package/src/plus/integrations/providers/gitlab/gitlab.ts +170 -60
  997. package/src/plus/integrations/providers/gitlab/gitlab.utils.ts +9 -0
  998. package/src/plus/integrations/providers/gitlab/models.ts +19 -5
  999. package/src/plus/integrations/providers/gitlab.ts +369 -10
  1000. package/src/plus/integrations/providers/jira.ts +247 -42
  1001. package/src/plus/integrations/providers/linear.ts +154 -27
  1002. package/src/plus/integrations/providers/models.ts +583 -75
  1003. package/src/plus/integrations/providers/providersApi.ts +849 -86
  1004. package/src/plus/integrations/providers/trello.ts +205 -0
  1005. package/src/plus/integrations/providers/utils/providerPaging.ts +177 -0
  1006. package/src/plus/integrations/providers/utils.ts +68 -8
  1007. package/src/plus/integrations/reads/broaden.ts +452 -0
  1008. package/src/plus/integrations/reads/context.ts +99 -0
  1009. package/src/plus/integrations/reads/cursors.ts +224 -0
  1010. package/src/plus/integrations/reads/drains.ts +343 -0
  1011. package/src/plus/integrations/reads/filters.ts +124 -0
  1012. package/src/plus/integrations/reads/hierarchy.ts +473 -0
  1013. package/src/plus/integrations/reads/hierarchy.utils.ts +155 -0
  1014. package/src/plus/integrations/reads/issueTracker.ts +468 -0
  1015. package/src/plus/integrations/reads/issues.ts +409 -0
  1016. package/src/plus/integrations/reads/paging.ts +277 -0
  1017. package/src/plus/integrations/reads/pullRequests.ts +260 -0
  1018. package/src/plus/integrations/reads/resolveRepository.ts +272 -0
  1019. package/src/plus/integrations/reads/sweeps.ts +185 -0
  1020. package/src/plus/integrations/reads/warnings.ts +170 -0
  1021. package/src/plus/integrations/results.ts +275 -0
  1022. package/src/plus/integrations/utils/domain.utils.ts +26 -0
  1023. package/src/plus/integrations/utils/integration.utils.ts +93 -16
  1024. package/src/utils/brand.ts +0 -2
  1025. package/src/utils/cancellation.ts +56 -7
  1026. package/src/utils/coalescedRun.ts +45 -0
  1027. package/src/utils/color.ts +3 -3
  1028. package/src/utils/date.ts +72 -0
  1029. package/src/utils/debounce.ts +1 -1
  1030. package/src/utils/decorators/gate.ts +2 -2
  1031. package/src/utils/decorators/log.ts +5 -5
  1032. package/src/utils/decorators/memoize.ts +2 -2
  1033. package/src/utils/decorators/sequentialize.ts +2 -2
  1034. package/src/utils/decorators/serializable.ts +1 -1
  1035. package/src/utils/env/node/exec.ts +20 -5
  1036. package/src/utils/event.ts +19 -25
  1037. package/src/utils/function.ts +3 -3
  1038. package/src/utils/iterable.ts +2 -6
  1039. package/src/utils/logger.scoped.ts +1 -1
  1040. package/src/utils/logger.ts +1 -1
  1041. package/src/utils/paging.ts +46 -0
  1042. package/src/utils/promise.ts +33 -3
  1043. package/src/utils/promiseCache.ts +81 -51
  1044. package/src/utils/searchTree.ts +4 -2
  1045. package/src/utils/string.ts +1 -1
  1046. package/src/utils/trie.ts +1 -0
  1047. package/dist/plus/ai/providers/githubModelsProvider.d.ts +0 -19
  1048. package/dist/plus/ai/providers/githubModelsProvider.d.ts.map +0 -1
  1049. package/dist/plus/ai/providers/githubModelsProvider.js +0 -51
  1050. package/dist/plus/ai/providers/githubModelsProvider.js.map +0 -1
  1051. package/src/plus/ai/providers/githubModelsProvider.ts +0 -92
@@ -9,9 +9,70 @@ import { trace } from '../../../utils/decorators/log.js';
9
9
  import { first } from '../../../utils/iterable.js';
10
10
  import { Logger } from '../../../utils/logger.js';
11
11
  import { getScopedLogger } from '../../../utils/logger.scoped.js';
12
- import { GitCloudHostIntegrationId } from '../constants.js';
13
- import { IssueFilter, PagingMode, PullRequestFilter } from '../providers/models.js';
12
+ import { toTokenWithInfo } from '../authentication/models.js';
13
+ import { toCollectionScopeFailure } from '../collectionMetadata.js';
14
+ import { GitCloudHostIntegrationId, GitSelfManagedHostIntegrationId } from '../constants.js';
15
+ import { toError } from '../errors.js';
16
+ import { IssueFilter, PagingMode, PullRequestFilter, toIssueShape, toProviderIssueStates, toProviderPullRequestStates, } from '../providers/models.js';
17
+ import { mergeCollectionMetadata } from '../providers/utils/providerPaging.js';
14
18
  import { IntegrationBase } from './integration.js';
19
+ function isAzureDevOpsProvider(providerId) {
20
+ return (providerId === GitCloudHostIntegrationId.AzureDevOps ||
21
+ providerId === GitSelfManagedHostIntegrationId.AzureDevOpsServer);
22
+ }
23
+ function normalizeSelfManagedBaseUrl(domain, protocol) {
24
+ const value = domain?.trim();
25
+ if (!value)
26
+ return undefined;
27
+ if (/^[a-z][a-z\d+\-.]*:\/\//i.test(value)) {
28
+ try {
29
+ const url = new URL(value);
30
+ return `${url.protocol}//${url.host}${url.pathname.replace(/\/+$/, '')}`;
31
+ }
32
+ catch {
33
+ return undefined;
34
+ }
35
+ }
36
+ const scheme = protocol ?? 'https:';
37
+ try {
38
+ const url = new URL(`${scheme}//${value}`);
39
+ return `${url.protocol}//${url.host}${url.pathname.replace(/\/+$/, '')}`;
40
+ }
41
+ catch {
42
+ return undefined;
43
+ }
44
+ }
45
+ function getSelfManagedApiBaseUrl(providerId, domain, protocol) {
46
+ const baseUrl = normalizeSelfManagedBaseUrl(domain, protocol);
47
+ if (baseUrl == null)
48
+ return undefined;
49
+ switch (providerId) {
50
+ case GitSelfManagedHostIntegrationId.CloudGitHubEnterprise:
51
+ return `${baseUrl.replace(/\/api(?:\/v\d+)?$/, '')}/api/v3`;
52
+ case GitSelfManagedHostIntegrationId.CloudGitLabSelfHosted:
53
+ return baseUrl.replace(/\/api(?:\/v\d+)?$/, '');
54
+ case GitSelfManagedHostIntegrationId.BitbucketServer:
55
+ return `${baseUrl.replace(/\/rest\/api\/1\.0$/, '')}/rest/api/1.0`;
56
+ case GitSelfManagedHostIntegrationId.AzureDevOpsServer:
57
+ return baseUrl;
58
+ default:
59
+ return undefined;
60
+ }
61
+ }
62
+ /**
63
+ * Rejects a read the provider can't serve as asked: logs the reason and returns it as the `{ error }` half of an
64
+ * {@link IntegrationResult}, timed from `start`.
65
+ *
66
+ * A single builder because these refusals are a contract, not incidental returns — the read cores below reject on
67
+ * unsupported input, an inexpressible filter set, or an unresolvable filter account, and each one must reach the
68
+ * caller as an error it can surface as a warning rather than as an empty success. Writing the message once also
69
+ * keeps the logged text and the thrown text from drifting apart, which is exactly what happened while each site
70
+ * spelled its message out twice.
71
+ */
72
+ function unsupportedRead(message, start, logContext) {
73
+ Logger.warn(message, logContext);
74
+ return { error: new Error(message), duration: performance.now() - start };
75
+ }
15
76
  export class GitHostIntegration extends IntegrationBase {
16
77
  type = 'git';
17
78
  async getAccountForEmail(repo, email, options) {
@@ -30,6 +91,31 @@ export class GitHostIntegration extends IntegrationBase {
30
91
  return undefined;
31
92
  }
32
93
  }
94
+ /**
95
+ * Returns the SSH signing keys (full OpenSSH-format `<type> <key> [comment]` strings) registered by the accounts
96
+ * matching the given emails on this integration, for building an `allowed_signers` file. Keyed by lowercased email;
97
+ * emails with no match (and unsupported integrations) are absent. Batching the lookups is left to the integration.
98
+ */
99
+ async getSshSigningKeysForEmails(repo, emails) {
100
+ const scope = getScopedLogger();
101
+ const connected = this.maybeConnected ?? (await this.isConnected());
102
+ if (!connected)
103
+ return new Map();
104
+ await this.refreshSessionIfExpired(scope);
105
+ try {
106
+ const keys = await this.getProviderSshSigningKeysForEmails(this._session, repo, emails);
107
+ this.resetRequestExceptionCount('getSshSigningKeysForEmails');
108
+ return keys;
109
+ }
110
+ catch (ex) {
111
+ this.handleProviderException('getSshSigningKeysForEmails', ex, { scope: scope });
112
+ return new Map();
113
+ }
114
+ }
115
+ /** Override in integrations that expose users' SSH signing keys. Defaults to none. */
116
+ getProviderSshSigningKeysForEmails(_session, _repo, _emails) {
117
+ return Promise.resolve(new Map());
118
+ }
33
119
  async getAccountForCommit(repo, rev, options) {
34
120
  const scope = getScopedLogger();
35
121
  const connected = this.maybeConnected ?? (await this.isConnected());
@@ -88,6 +174,154 @@ export class GitHostIntegration extends IntegrationBase {
88
174
  }), { expiryOverride: options?.expiryOverride });
89
175
  return metadata;
90
176
  }
177
+ /**
178
+ * Whether this git host implements generic org discovery. False for providers that register no
179
+ * {@link getProviderOrganizationsForUser} hook (e.g. Bitbucket Data Center) — the facade uses this to
180
+ * report `unsupported` instead of a silent empty list, which is indistinguishable from "has no orgs".
181
+ */
182
+ get supportsOrganizationDiscovery() {
183
+ return this.getProviderOrganizationsForUser != null;
184
+ }
185
+ /** Whether this git host implements generic repository discovery ({@link getProviderRepositoriesForOrg}). */
186
+ get supportsRepositoryDiscovery() {
187
+ return this.getProviderRepositoriesForOrg != null;
188
+ }
189
+ /**
190
+ * Whether this git host has a project tier between org and repo ({@link getProviderProjectsForOrg}). Only
191
+ * Azure DevOps does; the facade uses this to skip the read entirely rather than call a core that returns
192
+ * `undefined` for a session-less reason and be misread as a broken connection.
193
+ */
194
+ get supportsProjectDiscovery() {
195
+ return this.getProviderProjectsForOrg != null;
196
+ }
197
+ /**
198
+ * Whether this git host implements the account-wide user-affiliated repository read
199
+ * ({@link getProviderRepositoriesForUser}) — the org-less `gk provider repos <provider>` equivalent.
200
+ */
201
+ get supportsUserRepositoryDiscovery() {
202
+ return this.getProviderRepositoriesForUser != null;
203
+ }
204
+ /**
205
+ * Whether this git host exposes issues on the ProviderBackend surface. Most git hosts do; a host with no
206
+ * usable issue tracker overrides this to false — Bitbucket Cloud (deprecated in favor of dedicated issue
207
+ * integrations like Jira) and Bitbucket Data Center (never had one) — so the facade reports issues as
208
+ * unsupported instead of serving a partial/deprecated source or failing inside a provider client that
209
+ * registers no issue function at all.
210
+ *
211
+ * Keep this in sync with {@link ProviderMetadata.supportedIssueFilters}: a provider that declares no issue
212
+ * filters and no issue read is answering the same capability question twice, and the two must agree.
213
+ */
214
+ get supportsIssues() {
215
+ return true;
216
+ }
217
+ /**
218
+ * Lists the organizations (orgs/workspaces/groups) the current user belongs to on this host.
219
+ * `truncated === true` means the defensive page-drain backstop stopped before the upstream listing was
220
+ * exhausted.
221
+ *
222
+ * Resolves the session for `connectionId` (or the primary connection when omitted, honoring multi-account
223
+ * reads) and recovers a thrown error into `{ error }` so callers can surface it as a warning instead of
224
+ * swallowing it to `undefined`.
225
+ */
226
+ async getOrganizationsForUserResult(connectionId) {
227
+ const scope = getScopedLogger();
228
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
229
+ const session = await this.resolveReadSession(connectionId, scope);
230
+ if (session == null)
231
+ return undefined;
232
+ const start = performance.now();
233
+ try {
234
+ const result = await this.getProviderOrganizationsForUser?.(session);
235
+ this.resetRequestExceptionCount('getOrganizationsForUser');
236
+ return { value: result, duration: performance.now() - start };
237
+ }
238
+ catch (ex) {
239
+ this.handleProviderException('getOrganizationsForUser', ex, { scope: scope });
240
+ return { error: toError(ex), duration: performance.now() - start };
241
+ }
242
+ }
243
+ /**
244
+ * Result-returning list of the projects a git host exposes beneath its orgs, unified into the
245
+ * {@link ProviderOrganization} shape. Only Azure DevOps has a project tier between org and repo; other
246
+ * git hosts have none and leave {@link getProviderProjectsForOrg} undefined, so this returns `undefined`
247
+ * for them (the ProviderBackend facade then treats them as having no projects). With `org`, scopes to
248
+ * that org's projects; without, returns projects across every org the user can see.
249
+ */
250
+ async getProjectsForOrgResult(org, connectionId) {
251
+ const scope = getScopedLogger();
252
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
253
+ const session = await this.resolveReadSession(connectionId, scope);
254
+ if (session == null)
255
+ return undefined;
256
+ if (this.getProviderProjectsForOrg == null) {
257
+ return undefined;
258
+ }
259
+ const start = performance.now();
260
+ try {
261
+ const result = await this.getProviderProjectsForOrg(session, org);
262
+ this.resetRequestExceptionCount('getProjectsForOrg');
263
+ return { value: result, duration: performance.now() - start };
264
+ }
265
+ catch (ex) {
266
+ this.handleProviderException('getProjectsForOrg', ex, { scope: scope });
267
+ return { error: toError(ex), duration: performance.now() - start };
268
+ }
269
+ }
270
+ /**
271
+ * Lists repositories under the given organization (org/workspace/group) one page at a time — follow
272
+ * `paging.cursor` to page, or drain with the integrations provider paging helper.
273
+ * `options.project` is only meaningful for Azure DevOps, whose repos are scoped by `org` + `project`;
274
+ * every other host ignores it. (Azure without a project can't page its cross-project merge, so it
275
+ * returns all matches in a single page.) `truncated === true` means the defensive page-drain
276
+ * backstop stopped before the upstream listing was exhausted.
277
+ *
278
+ * Resolves the session for `connectionId` (or the primary connection when omitted) and recovers a thrown
279
+ * error into `{ error }`, so a caller surfaces it as a warning instead of a silent `undefined`.
280
+ */
281
+ async getRepositoriesForOrgResult(org, options) {
282
+ const scope = getScopedLogger();
283
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
284
+ const session = await this.resolveReadSession(options?.connectionId, scope);
285
+ if (session == null)
286
+ return undefined;
287
+ const start = performance.now();
288
+ try {
289
+ const result = await this.getProviderRepositoriesForOrg?.(session, org, options);
290
+ this.resetRequestExceptionCount('getRepositoriesForOrg');
291
+ return { value: result, duration: performance.now() - start };
292
+ }
293
+ catch (ex) {
294
+ this.handleProviderException('getRepositoriesForOrg', ex, { scope: scope });
295
+ return { error: toError(ex), duration: performance.now() - start };
296
+ }
297
+ }
298
+ /**
299
+ * Result-returning account-wide, user-affiliated repository read (the org-less
300
+ * `gk provider repos <provider>` equivalent): repositories the user owns, collaborates on, or can
301
+ * access through org membership — NOT every repo of every org. Optional: providers without a native
302
+ * user-affiliated listing (Bitbucket workspaces, Azure orgs, which require an org/workspace scope)
303
+ * leave the hook undefined and the facade reports the read as unsupported so callers fan out per org.
304
+ */
305
+ async getRepositoriesForUserResult(options) {
306
+ const scope = getScopedLogger();
307
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
308
+ const session = await this.resolveReadSession(options?.connectionId, scope);
309
+ if (session == null)
310
+ return undefined;
311
+ if (this.getProviderRepositoriesForUser == null) {
312
+ return undefined;
313
+ }
314
+ const start = performance.now();
315
+ try {
316
+ const result = await this.getProviderRepositoriesForUser(session, options);
317
+ this.resetRequestExceptionCount('getRepositoriesForUser');
318
+ return { value: result, duration: performance.now() - start };
319
+ }
320
+ catch (ex) {
321
+ this.handleProviderException('getRepositoriesForUser', ex, { scope: scope });
322
+ return { error: toError(ex), duration: performance.now() - start };
323
+ }
324
+ }
91
325
  async mergePullRequest(pr, options) {
92
326
  const scope = getScopedLogger();
93
327
  const connected = this.maybeConnected ?? (await this.isConnected());
@@ -147,23 +381,75 @@ export class GitHostIntegration extends IntegrationBase {
147
381
  }), options);
148
382
  return pr;
149
383
  }
150
- async getMyIssuesForRepos(reposOrRepoIds, options) {
384
+ /**
385
+ * Memoized identity lookups backing filter resolution. Keyed by the session's token fingerprint plus the
386
+ * scope of the lookup (base URL, and the Azure organization for the per-instance variant), so a different
387
+ * account, host, or org never reuses an entry and a rotated token simply misses.
388
+ *
389
+ * Not cleared when the token changes: one integration instance serves every connection of its provider
390
+ * (multi-account), so clearing on a fingerprint change would make two accounts reading in alternation
391
+ * evict each other and defeat the memo. Entries are bounded by tokens x hosts x orgs seen — a handful for
392
+ * the life of the integration.
393
+ */
394
+ _filterAccounts = new Map();
395
+ /**
396
+ * Resolves the account a repo-scoped read turns `IssueFilter`/`PullRequestFilter` into a provider
397
+ * login/id with, memoized per token+scope.
398
+ *
399
+ * Every FILTERED read needs this, and `ProvidersApi.getCurrentUser` is a bare round trip — unlike
400
+ * {@link IntegrationBase.getCurrentAccount}, which the host caches. So a consumer that fans ONE page out
401
+ * into several filtered reads paid one identity request PER read, all resolving the same account: a
402
+ * per-user-facet fan-out (author + assignee + review-requested) doubled its request count, and paid it
403
+ * again on every page turn.
404
+ *
405
+ * The promise is memoized rather than the value, so concurrent facets share one in-flight request instead
406
+ * of racing. A rejection is evicted so the next read retries rather than caching a failure — matching how
407
+ * `getCurrentAccount` invalidates on error.
408
+ */
409
+ getFilterAccount(api, session, customUrl, organization) {
410
+ const key = `${this.getSessionFingerprint(session)}:${customUrl ?? ''}:${organization ?? ''}`;
411
+ let pending = this._filterAccounts.get(key);
412
+ if (pending == null) {
413
+ const tokenWithInfo = toTokenWithInfo(this.authProvider.id, session);
414
+ pending = (organization != null
415
+ ? api.getCurrentUserForInstance(tokenWithInfo, organization, { baseUrl: customUrl })
416
+ : api.getCurrentUser(tokenWithInfo, { baseUrl: customUrl })).catch((ex) => {
417
+ this._filterAccounts.delete(key);
418
+ throw ex;
419
+ });
420
+ this._filterAccounts.set(key, pending);
421
+ }
422
+ return pending;
423
+ }
424
+ async getMyIssuesForRepos(reposOrRepoIds, options, connectionId) {
425
+ return (await this.getMyIssuesForReposResult(reposOrRepoIds, options, connectionId))?.value;
426
+ }
427
+ /**
428
+ * Result-returning core of {@link getMyIssuesForRepos}. Resolves the session for `connectionId`
429
+ * (or the primary connection when omitted, so multi-account reads use the right token) and recovers
430
+ * thrown errors and validation failures into `{ error }` so callers can surface them as warnings
431
+ * rather than swallowing them to `undefined`.
432
+ */
433
+ async getMyIssuesForReposResult(reposOrRepoIds, options, connectionId) {
151
434
  const scope = getScopedLogger();
152
435
  const providerId = this.authProvider.id;
153
- const connected = this.maybeConnected ?? (await this.isConnected());
154
- if (!connected)
436
+ const states = toProviderIssueStates(options?.state);
437
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary. The session
438
+ // is resolved here for connectivity/bail; the connection's token is applied per API call below.
439
+ const session = await this.resolveReadSession(connectionId, scope);
440
+ if (session == null)
155
441
  return undefined;
156
- await this.refreshSessionIfExpired(scope);
442
+ const start = performance.now();
443
+ const customUrl = options?.customUrl ?? getSelfManagedApiBaseUrl(providerId, session.domain || this.domain, session.protocol);
157
444
  const api = await this.getProvidersApi();
158
445
  if (providerId !== GitCloudHostIntegrationId.GitLab &&
159
446
  (api.isRepoIdsInput(reposOrRepoIds) ||
160
- (providerId === GitCloudHostIntegrationId.AzureDevOps &&
447
+ (isAzureDevOpsProvider(providerId) &&
161
448
  !reposOrRepoIds.every(repo => repo.project != null && repo.namespace != null)))) {
162
- Logger.warn(`Unsupported input for provider ${providerId}`, 'getIssuesForRepos');
163
- return undefined;
449
+ return unsupportedRead(`Unsupported input for provider ${providerId}`, start, 'getIssuesForRepos');
164
450
  }
165
451
  let getIssuesOptions;
166
- if (providerId === GitCloudHostIntegrationId.AzureDevOps) {
452
+ if (isAzureDevOpsProvider(providerId)) {
167
453
  const organizations = new Set();
168
454
  const projects = new Set();
169
455
  for (const repo of reposOrRepoIds) {
@@ -171,43 +457,40 @@ export class GitHostIntegration extends IntegrationBase {
171
457
  projects.add(repo.project);
172
458
  }
173
459
  if (organizations.size > 1) {
174
- Logger.warn(`Multiple organizations not supported for provider ${providerId}`, 'getIssuesForRepos');
175
- return undefined;
460
+ return unsupportedRead(`Multiple organizations not supported for provider ${providerId}`, start, 'getIssuesForRepos');
176
461
  }
177
462
  else if (organizations.size === 0) {
178
- Logger.warn(`No organizations found for provider ${providerId}`, 'getIssuesForRepos');
179
- return undefined;
463
+ return unsupportedRead(`No organizations found for provider ${providerId}`, start, 'getIssuesForRepos');
180
464
  }
181
465
  const organization = first(organizations.values());
182
466
  if (options?.filters != null) {
183
467
  if (!api.providerSupportsIssueFilters(providerId, options.filters)) {
184
- Logger.warn(`Unsupported filters for provider ${providerId}`, 'getIssuesForRepos');
185
- return undefined;
468
+ return unsupportedRead(`Unsupported filters for provider ${providerId}`, start, 'getIssuesForRepos');
186
469
  }
187
470
  let userAccount;
188
471
  try {
189
- userAccount = await api.getCurrentUserForInstance({ providerId: providerId }, organization);
472
+ userAccount = await this.getFilterAccount(api, session, customUrl, organization);
190
473
  }
191
474
  catch (ex) {
192
475
  Logger.error(ex, 'getIssuesForRepos');
193
- return undefined;
476
+ return { error: toError(ex), duration: performance.now() - start };
194
477
  }
195
478
  if (userAccount == null) {
196
- Logger.warn(`Unable to get current user for ${providerId}`, 'getIssuesForRepos');
197
- return undefined;
479
+ return unsupportedRead(`Unable to get current user for ${providerId}`, start, 'getIssuesForRepos');
198
480
  }
199
481
  const userFilterProperty = userAccount.name;
200
482
  if (userFilterProperty == null) {
201
- Logger.warn(`Unable to get user property for filter for ${providerId}`, 'getIssuesForRepos');
202
- return undefined;
483
+ return unsupportedRead(`Unable to get user property for filter for ${providerId}`, start, 'getIssuesForRepos');
203
484
  }
204
485
  getIssuesOptions = {
205
486
  authorLogin: options.filters.includes(IssueFilter.Author) ? userFilterProperty : undefined,
206
- assigneeLogins: options.filters.includes(IssueFilter.Assignee) ? [userFilterProperty] : undefined,
487
+ assigneeLogins: !options.includeAllAssignees && options.filters.includes(IssueFilter.Assignee)
488
+ ? [userFilterProperty]
489
+ : undefined,
207
490
  mentionLogin: options.filters.includes(IssueFilter.Mention) ? userFilterProperty : undefined,
208
491
  };
209
492
  }
210
- const cursorInfo = JSON.parse(options?.cursor ?? '{}');
493
+ const cursorInfo = this.parseCursorInfo(options?.cursor);
211
494
  const cursors = cursorInfo.cursors ?? [];
212
495
  let projectInputs = Array.from(projects.values(), project => ({
213
496
  namespace: organization,
@@ -220,12 +503,43 @@ export class GitHostIntegration extends IntegrationBase {
220
503
  try {
221
504
  const cursor = { cursors: [] };
222
505
  let hasMore = false;
506
+ let truncated = false;
507
+ let metadata;
223
508
  const data = [];
224
- await Promise.all(projectInputs.map(async (projectInput) => {
225
- const results = await api.getIssuesForAzureProject({ providerId: providerId }, projectInput.namespace, projectInput.project, {
509
+ // `allSettled`, not `Promise.all`: one project's read rejecting must not discard every sibling
510
+ // project's already-fetched issues and cursors. A rejected project is recorded as a structured
511
+ // failure so the facade can warn and set `fetchFailed` instead of reporting a partial project set
512
+ // as complete.
513
+ const settled = await Promise.allSettled(projectInputs.map(async (projectInput) => {
514
+ const results = await api.getIssuesForAzureProject(toTokenWithInfo(providerId, session), projectInput.namespace, projectInput.project, {
226
515
  ...getIssuesOptions,
227
516
  cursor: projectInput.cursor,
517
+ baseUrl: customUrl,
518
+ // Continuation is driven by the per-project cursor; only apply an explicit page on the
519
+ // first request so it can't clobber a continuation cursor on later pages.
520
+ page: projectInput.cursor == null ? options?.page : undefined,
521
+ pageSize: options?.pageSize,
522
+ states: states,
228
523
  });
524
+ return { projectInput: projectInput, results: results };
525
+ }));
526
+ for (let i = 0; i < settled.length; i++) {
527
+ const outcome = settled[i];
528
+ const projectInput = projectInputs[i];
529
+ if (outcome.status !== 'fulfilled') {
530
+ truncated = true;
531
+ const failure = toCollectionScopeFailure({
532
+ providerId: providerId,
533
+ resourceId: projectInput.namespace,
534
+ projectId: projectInput.project,
535
+ }, outcome.reason);
536
+ metadata = mergeCollectionMetadata(metadata, {
537
+ completeness: 'partial',
538
+ failures: [failure],
539
+ });
540
+ continue;
541
+ }
542
+ const { projectInput: _projectInput, results } = outcome.value;
229
543
  data.push(...results.values);
230
544
  if (results.paging?.more) {
231
545
  hasMore = true;
@@ -235,46 +549,66 @@ export class GitHostIntegration extends IntegrationBase {
235
549
  cursor: results.paging.cursor,
236
550
  });
237
551
  }
238
- }));
552
+ }
553
+ // Keep the requested page number in the composite cursor so the facade can report the real
554
+ // currentPage when the consumer continues using only the cursor.
555
+ if (options?.page != null) {
556
+ cursor.page = options.page;
557
+ }
239
558
  return {
240
- values: data,
241
- paging: {
242
- more: hasMore,
243
- cursor: JSON.stringify(cursor),
559
+ value: {
560
+ values: data,
561
+ paging: {
562
+ more: hasMore,
563
+ cursor: JSON.stringify(cursor),
564
+ truncated: truncated || undefined,
565
+ // Echo the requested numbered page so the facade reports the real currentPage for
566
+ // numbered-page hosts (GitLab/Bitbucket/Azure), not a synthesized 1. Cursor-only hosts
567
+ // leave `page` undefined via their own reads.
568
+ page: options?.page,
569
+ },
570
+ metadata: metadata,
244
571
  },
572
+ duration: performance.now() - start,
245
573
  };
246
574
  }
247
575
  catch (ex) {
248
576
  Logger.error(ex, 'getIssuesForRepos');
249
- return undefined;
577
+ return { error: toError(ex), duration: performance.now() - start };
250
578
  }
251
579
  }
252
580
  if (options?.filters != null) {
581
+ // Validate the requested filters against what this provider actually supports — same guard the Azure
582
+ // branch above applies. Without it an unsupported filter (e.g. GitLab has no Mention endpoint) would
583
+ // resolve to no filter property being set and silently degrade to an unfiltered, project-wide read.
584
+ if (!api.providerSupportsIssueFilters(providerId, options.filters)) {
585
+ return unsupportedRead(`Unsupported filters for provider ${providerId}`, start, 'getIssuesForRepos');
586
+ }
253
587
  let userAccount;
254
588
  try {
255
- userAccount = await api.getCurrentUser({ providerId: providerId });
589
+ userAccount = await this.getFilterAccount(api, session, customUrl);
256
590
  }
257
591
  catch (ex) {
258
592
  Logger.error(ex, 'getIssuesForRepos');
259
- return undefined;
593
+ return { error: toError(ex), duration: performance.now() - start };
260
594
  }
261
595
  if (userAccount == null) {
262
- Logger.warn(`Unable to get current user for ${providerId}`, 'getIssuesForRepos');
263
- return undefined;
596
+ return unsupportedRead(`Unable to get current user for ${providerId}`, start, 'getIssuesForRepos');
264
597
  }
265
598
  const userFilterProperty = userAccount.username;
266
599
  if (userFilterProperty == null) {
267
- Logger.warn(`Unable to get user property for filter for ${providerId}`, 'getIssuesForRepos');
268
- return undefined;
600
+ return unsupportedRead(`Unable to get user property for filter for ${providerId}`, start, 'getIssuesForRepos');
269
601
  }
270
602
  getIssuesOptions = {
271
603
  authorLogin: options.filters.includes(IssueFilter.Author) ? userFilterProperty : undefined,
272
- assigneeLogins: options.filters.includes(IssueFilter.Assignee) ? [userFilterProperty] : undefined,
604
+ assigneeLogins: !options.includeAllAssignees && options.filters.includes(IssueFilter.Assignee)
605
+ ? [userFilterProperty]
606
+ : undefined,
273
607
  mentionLogin: options.filters.includes(IssueFilter.Mention) ? userFilterProperty : undefined,
274
608
  };
275
609
  }
276
610
  if (api.getProviderIssuesPagingMode(providerId) === PagingMode.Repo && !api.isRepoIdsInput(reposOrRepoIds)) {
277
- const cursorInfo = JSON.parse(options?.cursor ?? '{}');
611
+ const cursorInfo = this.parseCursorInfo(options?.cursor);
278
612
  const cursors = cursorInfo.cursors ?? [];
279
613
  let repoInputs = reposOrRepoIds.map(repo => ({ repo: repo, cursor: undefined }));
280
614
  if (cursors.length > 0) {
@@ -283,105 +617,185 @@ export class GitHostIntegration extends IntegrationBase {
283
617
  try {
284
618
  const cursor = { cursors: [] };
285
619
  let hasMore = false;
620
+ let truncated = false;
621
+ let metadata;
286
622
  const data = [];
287
- await Promise.all(repoInputs.map(async (repoInput) => {
288
- const results = await api.getIssuesForRepo({ providerId: providerId }, repoInput.repo, {
623
+ // `allSettled`, not `Promise.all`: one repo's read rejecting must not discard every sibling repo's
624
+ // already-fetched issues and cursors. A rejected repo is recorded as a structured failure so the
625
+ // facade can warn and set `fetchFailed` instead of reporting a partial repo set as complete.
626
+ const settled = await Promise.allSettled(repoInputs.map(async (repoInput) => {
627
+ const results = await api.getIssuesForRepo(toTokenWithInfo(providerId, session), repoInput.repo, {
289
628
  ...getIssuesOptions,
290
629
  cursor: repoInput.cursor,
291
- baseUrl: options?.customUrl,
630
+ baseUrl: customUrl,
631
+ // Continuation is driven by the per-repo cursor; only apply an explicit page on the
632
+ // first request so it can't clobber a continuation cursor on later pages.
633
+ page: repoInput.cursor == null ? options?.page : undefined,
634
+ pageSize: options?.pageSize,
635
+ states: states,
292
636
  });
637
+ return { repoInput: repoInput, results: results };
638
+ }));
639
+ for (let i = 0; i < settled.length; i++) {
640
+ const outcome = settled[i];
641
+ const repoInput = repoInputs[i];
642
+ if (outcome.status !== 'fulfilled') {
643
+ truncated = true;
644
+ const failure = toCollectionScopeFailure({
645
+ providerId: providerId,
646
+ repositoryId: `${repoInput.repo.namespace}/${repoInput.repo.name}`,
647
+ }, outcome.reason);
648
+ metadata = mergeCollectionMetadata(metadata, {
649
+ completeness: 'partial',
650
+ failures: [failure],
651
+ });
652
+ continue;
653
+ }
654
+ const { repoInput: _repoInput, results } = outcome.value;
293
655
  data.push(...results.values);
294
656
  if (results.paging?.more) {
295
657
  hasMore = true;
296
658
  cursor.cursors.push({ repo: repoInput.repo, cursor: results.paging.cursor });
297
659
  }
298
- }));
660
+ }
661
+ if (options?.page != null) {
662
+ cursor.page = options.page;
663
+ }
299
664
  return {
300
- values: data,
301
- paging: {
302
- more: hasMore,
303
- cursor: JSON.stringify(cursor),
665
+ value: {
666
+ values: data,
667
+ paging: {
668
+ more: hasMore,
669
+ cursor: JSON.stringify(cursor),
670
+ truncated: truncated || undefined,
671
+ // Echo the requested numbered page so the facade reports the real currentPage for
672
+ // numbered-page hosts (GitLab/Bitbucket/Azure), not a synthesized 1. Cursor-only hosts
673
+ // leave `page` undefined via their own reads.
674
+ page: options?.page,
675
+ },
676
+ metadata: metadata,
304
677
  },
678
+ duration: performance.now() - start,
305
679
  };
306
680
  }
307
681
  catch (ex) {
308
682
  Logger.error(ex, 'getIssuesForRepos');
309
- return undefined;
683
+ return { error: toError(ex), duration: performance.now() - start };
310
684
  }
311
685
  }
312
686
  try {
313
- return await api.getIssuesForRepos({ providerId: providerId }, reposOrRepoIds, {
687
+ const result = await api.getIssuesForRepos(toTokenWithInfo(providerId, session), reposOrRepoIds, {
314
688
  ...getIssuesOptions,
315
689
  cursor: options?.cursor,
316
- baseUrl: options?.customUrl,
690
+ baseUrl: customUrl,
691
+ page: options?.page,
692
+ pageSize: options?.pageSize,
693
+ states: states,
317
694
  });
695
+ return { value: result, duration: performance.now() - start };
318
696
  }
319
697
  catch (ex) {
320
698
  Logger.error(ex, 'getIssuesForRepos');
321
- return undefined;
699
+ return { error: toError(ex), duration: performance.now() - start };
322
700
  }
323
701
  }
324
- async getMyPullRequestsForRepos(reposOrRepoIds, options) {
702
+ /**
703
+ * Repo-scoped "my issues" read returning the normalized {@link IssueShape} the ProviderBackend facade
704
+ * consumes (`listIssuesPage({ repos })`, `broadenIssues`). Maps {@link getMyIssuesForReposResult} — the raw
705
+ * provider-apis path — to IssueShape.
706
+ *
707
+ * It's the seam rather than an inline map so a provider whose only issue client already yields normalized
708
+ * shapes, and isn't wired into the raw path, can override it and serve these reads without a
709
+ * `ProviderIssue` round-trip. No provider does today: the one candidate (Bitbucket Cloud's legacy
710
+ * `getUsersIssuesForRepo`) reports `supportsIssues: false`, so the facade never reaches this for it.
711
+ */
712
+ async getMyIssuesForReposAsShapesResult(reposOrRepoIds, options, connectionId) {
713
+ const result = await this.getMyIssuesForReposResult(reposOrRepoIds, options, connectionId);
714
+ if (result == null)
715
+ return undefined;
716
+ if (result.error != null)
717
+ return { error: result.error, duration: result.duration };
718
+ if (result.value == null)
719
+ return { value: undefined, duration: result.duration };
720
+ const values = result.value.values
721
+ .map(issue => toIssueShape(issue, this))
722
+ .filter((issue) => issue != null);
723
+ return { value: { ...result.value, values: values }, duration: result.duration };
724
+ }
725
+ async getMyPullRequestsForRepos(reposOrRepoIds, options, connectionId) {
726
+ return (await this.getMyPullRequestsForReposResult(reposOrRepoIds, options, connectionId))?.value;
727
+ }
728
+ /**
729
+ * Result-returning core of {@link getMyPullRequestsForRepos}. Resolves the session for `connectionId`
730
+ * (or the primary connection when omitted, so multi-account reads use the right token) and recovers
731
+ * thrown errors and validation failures into `{ error }` so callers can surface them as warnings
732
+ * rather than swallowing them to `undefined`.
733
+ */
734
+ async getMyPullRequestsForReposResult(reposOrRepoIds, options, connectionId) {
325
735
  const scope = getScopedLogger();
326
736
  const providerId = this.authProvider.id;
327
- const connected = this.maybeConnected ?? (await this.isConnected());
328
- if (!connected)
737
+ const states = toProviderPullRequestStates(options?.state);
738
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary. The session
739
+ // is resolved here for connectivity/bail; the connection's token is applied per API call below.
740
+ const session = await this.resolveReadSession(connectionId, scope);
741
+ if (session == null)
329
742
  return undefined;
330
- await this.refreshSessionIfExpired(scope);
743
+ const start = performance.now();
744
+ const customUrl = options?.customUrl ?? getSelfManagedApiBaseUrl(providerId, session.domain || this.domain, session.protocol);
331
745
  const api = await this.getProvidersApi();
332
746
  if (providerId !== GitCloudHostIntegrationId.GitLab &&
333
747
  (api.isRepoIdsInput(reposOrRepoIds) ||
334
- (providerId === GitCloudHostIntegrationId.AzureDevOps &&
748
+ (isAzureDevOpsProvider(providerId) &&
335
749
  !reposOrRepoIds.every(repo => repo.project != null && repo.namespace != null)))) {
336
- Logger.warn(`Unsupported input for provider ${providerId}`);
337
- return undefined;
750
+ return unsupportedRead(`Unsupported input for provider ${providerId}`, start);
338
751
  }
339
752
  let getPullRequestsOptions;
340
753
  if (options?.filters != null) {
341
754
  if (!api.providerSupportsPullRequestFilters(providerId, options.filters)) {
342
- Logger.warn(`Unsupported filters for provider ${providerId}`, 'getPullRequestsForRepos');
343
- return undefined;
755
+ return unsupportedRead(`Unsupported filters for provider ${providerId}`, start, 'getPullRequestsForRepos');
344
756
  }
345
757
  let userAccount;
346
- if (providerId === GitCloudHostIntegrationId.AzureDevOps) {
758
+ if (isAzureDevOpsProvider(providerId)) {
347
759
  const organizations = new Set();
348
760
  for (const repo of reposOrRepoIds) {
349
761
  organizations.add(repo.namespace);
350
762
  }
351
763
  if (organizations.size > 1) {
352
764
  Logger.warn(`Multiple organizations not supported for provider ${providerId}`, 'getPullRequestsForRepos');
353
- return undefined;
765
+ return {
766
+ error: new Error(`Multiple organizations not supported for provider ${providerId}`),
767
+ duration: performance.now() - start,
768
+ };
354
769
  }
355
770
  else if (organizations.size === 0) {
356
- Logger.warn(`No organizations found for provider ${providerId}`, 'getPullRequestsForRepos');
357
- return undefined;
771
+ return unsupportedRead(`No organizations found for provider ${providerId}`, start, 'getPullRequestsForRepos');
358
772
  }
359
773
  const organization = first(organizations.values());
360
774
  try {
361
- userAccount = await api.getCurrentUserForInstance({ providerId: providerId }, organization);
775
+ userAccount = await this.getFilterAccount(api, session, customUrl, organization);
362
776
  }
363
777
  catch (ex) {
364
778
  Logger.error(ex, 'getPullRequestsForRepos');
365
- return undefined;
779
+ return { error: toError(ex), duration: performance.now() - start };
366
780
  }
367
781
  }
368
782
  else {
369
783
  try {
370
- userAccount = await api.getCurrentUser({ providerId: providerId });
784
+ userAccount = await this.getFilterAccount(api, session, customUrl);
371
785
  }
372
786
  catch (ex) {
373
787
  Logger.error(ex, 'getPullRequestsForRepos');
374
- return undefined;
788
+ return { error: toError(ex), duration: performance.now() - start };
375
789
  }
376
790
  }
377
791
  if (userAccount == null) {
378
- Logger.warn(`Unable to get current user for ${providerId}`, 'getPullRequestsForRepos');
379
- return undefined;
792
+ return unsupportedRead(`Unable to get current user for ${providerId}`, start, 'getPullRequestsForRepos');
380
793
  }
381
794
  let userFilterProperty;
382
795
  switch (providerId) {
383
796
  case GitCloudHostIntegrationId.Bitbucket:
384
797
  case GitCloudHostIntegrationId.AzureDevOps:
798
+ case GitSelfManagedHostIntegrationId.AzureDevOpsServer:
385
799
  userFilterProperty = userAccount.id;
386
800
  break;
387
801
  default:
@@ -389,21 +803,42 @@ export class GitHostIntegration extends IntegrationBase {
389
803
  break;
390
804
  }
391
805
  if (userFilterProperty == null) {
392
- Logger.warn(`Unable to get user property for filter for ${providerId}`, 'getPullRequestsForRepos');
393
- return undefined;
806
+ return unsupportedRead(`Unable to get user property for filter for ${providerId}`, start, 'getPullRequestsForRepos');
807
+ }
808
+ // Route the "review requested from me" filter to the field each provider actually reads:
809
+ // GitHub/GitLab expect a login (reviewRequestedLogin), Bitbucket/Azure an account id (reviewerId),
810
+ // and Bitbucket Server a login (reviewerLogin). `userFilterProperty` is already the account id for
811
+ // Bitbucket/Azure and the username for the rest.
812
+ let reviewRequestedLogin;
813
+ let reviewerId;
814
+ let reviewerLogin;
815
+ if (options.filters.includes(PullRequestFilter.ReviewRequested)) {
816
+ switch (providerId) {
817
+ case GitCloudHostIntegrationId.Bitbucket:
818
+ case GitCloudHostIntegrationId.AzureDevOps:
819
+ case GitSelfManagedHostIntegrationId.AzureDevOpsServer:
820
+ reviewerId = userFilterProperty;
821
+ break;
822
+ case GitSelfManagedHostIntegrationId.BitbucketServer:
823
+ reviewerLogin = userFilterProperty;
824
+ break;
825
+ default:
826
+ reviewRequestedLogin = userFilterProperty;
827
+ break;
828
+ }
394
829
  }
395
830
  getPullRequestsOptions = {
396
831
  authorLogin: options.filters.includes(PullRequestFilter.Author) ? userFilterProperty : undefined,
397
832
  assigneeLogins: options.filters.includes(PullRequestFilter.Assignee) ? [userFilterProperty] : undefined,
398
- reviewRequestedLogin: options.filters.includes(PullRequestFilter.ReviewRequested)
399
- ? userFilterProperty
400
- : undefined,
833
+ reviewRequestedLogin: reviewRequestedLogin,
834
+ reviewerId: reviewerId,
835
+ reviewerLogin: reviewerLogin,
401
836
  mentionLogin: options.filters.includes(PullRequestFilter.Mention) ? userFilterProperty : undefined,
402
837
  };
403
838
  }
404
839
  if (api.getProviderPullRequestsPagingMode(providerId) === PagingMode.Repo &&
405
840
  !api.isRepoIdsInput(reposOrRepoIds)) {
406
- const cursorInfo = JSON.parse(options?.cursor ?? '{}');
841
+ const cursorInfo = this.parseCursorInfo(options?.cursor);
407
842
  const cursors = cursorInfo.cursors ?? [];
408
843
  let repoInputs = reposOrRepoIds.map(repo => ({ repo: repo, cursor: undefined }));
409
844
  if (cursors.length > 0) {
@@ -412,55 +847,129 @@ export class GitHostIntegration extends IntegrationBase {
412
847
  try {
413
848
  const cursor = { cursors: [] };
414
849
  let hasMore = false;
850
+ let truncated = false;
851
+ let metadata;
852
+ const failures = [];
415
853
  const data = [];
416
- await Promise.all(repoInputs.map(async (repoInput) => {
417
- const results = await api.getPullRequestsForRepo({ providerId: providerId }, repoInput.repo, {
854
+ // `allSettled`, not `Promise.all`: one repo's read rejecting must not discard every sibling repo's
855
+ // already-fetched PRs and cursors. A rejected repo becomes a structured `CollectionScopeFailure`
856
+ // (attributed to that repo) so the facade warns on it + sets `fetchFailed`, while the survivors and
857
+ // their continuation cursors are still returned.
858
+ const settled = await Promise.allSettled(repoInputs.map(async (repoInput) => {
859
+ const results = await api.getPullRequestsForRepo(toTokenWithInfo(providerId, session), repoInput.repo, {
418
860
  ...getPullRequestsOptions,
419
861
  cursor: repoInput.cursor,
420
- baseUrl: options?.customUrl,
862
+ baseUrl: customUrl,
863
+ // Continuation is driven by the per-repo cursor; only apply an explicit page on the
864
+ // first request so it can't clobber a continuation cursor on later pages.
865
+ page: repoInput.cursor == null ? options?.page : undefined,
866
+ pageSize: options?.pageSize,
867
+ states: states,
868
+ // Azure DevOps only populates clone URLs on request (extra call); no-op elsewhere.
869
+ includeRemoteInfo: isAzureDevOpsProvider(providerId) ? true : undefined,
421
870
  });
871
+ return { repoInput: repoInput, results: results };
872
+ }));
873
+ // `allSettled` preserves order, so `settled[i]` is `repoInputs[i]`.
874
+ settled.forEach((outcome, i) => {
875
+ if (outcome.status !== 'fulfilled') {
876
+ const failedRepo = repoInputs[i].repo;
877
+ failures.push(toCollectionScopeFailure({ providerId: providerId, repositoryId: `${failedRepo.namespace}/${failedRepo.name}` }, outcome.reason));
878
+ return;
879
+ }
880
+ const { repoInput, results } = outcome.value;
422
881
  data.push(...results.values);
882
+ // Fan-out across repos: preserve each repo's SDK completeness/failures and its terminal
883
+ // truncation so a single failed/incomplete repo isn't lost when merged with its siblings.
884
+ metadata = mergeCollectionMetadata(metadata, results.metadata);
885
+ if (results.paging?.truncated) {
886
+ truncated = true;
887
+ }
423
888
  if (results.paging?.more) {
424
889
  hasMore = true;
425
890
  cursor.cursors.push({ repo: repoInput.repo, cursor: results.paging.cursor });
426
891
  }
427
- }));
892
+ });
893
+ // Merge the GitLens-side per-repo rejections into the SDK metadata so both flow through the same
894
+ // warning/fetchFailed assessment downstream.
895
+ if (failures.length > 0) {
896
+ metadata = mergeCollectionMetadata(metadata, { completeness: 'partial', failures: failures });
897
+ }
898
+ // Keep the requested page number in the composite cursor so the facade can report the real
899
+ // currentPage when the consumer continues using only the cursor.
900
+ if (options?.page != null) {
901
+ cursor.page = options.page;
902
+ }
428
903
  return {
429
- values: data,
430
- paging: {
431
- more: hasMore,
432
- cursor: JSON.stringify(cursor),
904
+ value: {
905
+ values: data,
906
+ paging: {
907
+ more: hasMore,
908
+ cursor: JSON.stringify(cursor),
909
+ truncated: truncated || undefined,
910
+ // Echo the requested numbered page so the facade reports the real currentPage for
911
+ // numbered-page hosts (GitLab/Bitbucket/Azure), not a synthesized 1. Cursor-only hosts
912
+ // leave `page` undefined via their own reads.
913
+ page: options?.page,
914
+ },
915
+ metadata: metadata,
433
916
  },
917
+ duration: performance.now() - start,
434
918
  };
435
919
  }
436
920
  catch (ex) {
437
921
  Logger.error(ex, 'getPullRequestsForRepos');
438
- return undefined;
922
+ return { error: toError(ex), duration: performance.now() - start };
439
923
  }
440
924
  }
441
925
  try {
442
- return await api.getPullRequestsForRepos({ providerId: providerId }, reposOrRepoIds, {
926
+ const result = await api.getPullRequestsForRepos(toTokenWithInfo(providerId, session), reposOrRepoIds, {
443
927
  ...getPullRequestsOptions,
444
928
  cursor: options?.cursor,
445
- baseUrl: options?.customUrl,
929
+ baseUrl: customUrl,
930
+ page: options?.page,
931
+ pageSize: options?.pageSize,
932
+ states: states,
933
+ // Azure DevOps only populates clone URLs on request (extra call); no-op elsewhere.
934
+ includeRemoteInfo: isAzureDevOpsProvider(providerId) ? true : undefined,
446
935
  });
936
+ return { value: result, duration: performance.now() - start };
447
937
  }
448
938
  catch (ex) {
449
939
  Logger.error(ex, 'getPullRequestsForRepos');
450
- return undefined;
940
+ return { error: toError(ex), duration: performance.now() - start };
451
941
  }
452
942
  }
453
- async searchMyPullRequests(repos, cancellation, silent) {
943
+ async searchMyPullRequests(repos, cancellation, silent, connectionId, state, options) {
454
944
  const scope = getScopedLogger();
455
- const connected = this.maybeConnected ?? (await this.isConnected());
456
- if (!connected)
945
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
946
+ const session = await this.resolveReadSession(connectionId, scope);
947
+ if (session == null)
457
948
  return undefined;
458
- await this.refreshSessionIfExpired(scope);
459
949
  const start = performance.now();
460
950
  try {
461
- const pullRequests = await this.searchProviderMyPullRequests(this._session, repos != null ? (Array.isArray(repos) ? repos : [repos]) : undefined, cancellation, silent);
951
+ // Prefer the optional metadata-aware path for account-wide reads so partial failures (e.g. one Azure
952
+ // org rejecting) are surfaced as a soft `{ value, error }` instead of being lost. Repo-scoped reads and
953
+ // providers without that override keep using the legacy array path.
954
+ let result;
955
+ if (this.searchProviderMyPullRequestsResult != null && repos == null) {
956
+ result = await this.searchProviderMyPullRequestsResult(session, repos != null ? (Array.isArray(repos) ? repos : [repos]) : undefined, cancellation, silent, state, options);
957
+ }
958
+ else {
959
+ result = {
960
+ value: await this.searchProviderMyPullRequests(session, repos != null ? (Array.isArray(repos) ? repos : [repos]) : undefined, cancellation, silent, state, options),
961
+ };
962
+ }
462
963
  this.resetRequestExceptionCount('searchMyPullRequests');
463
- return { value: pullRequests, duration: performance.now() - start };
964
+ // `IntegrationResult` is a strict union of value-only or error-only (and may be `undefined`). Return the
965
+ // matching branch explicitly; a missing result is treated as a successful empty read.
966
+ if (result == null) {
967
+ return { value: undefined, duration: performance.now() - start };
968
+ }
969
+ if (result.error != null) {
970
+ return { error: result.error, duration: performance.now() - start };
971
+ }
972
+ return { value: result.value, duration: performance.now() - start };
464
973
  }
465
974
  catch (ex) {
466
975
  this.handleProviderException('searchMyPullRequests', ex, {
@@ -468,19 +977,68 @@ export class GitHostIntegration extends IntegrationBase {
468
977
  silent: true,
469
978
  });
470
979
  return {
471
- error: ex,
980
+ error: toError(ex),
472
981
  duration: performance.now() - start,
473
982
  };
474
983
  }
475
984
  }
476
- async searchPullRequests(searchQuery, repos, cancellation) {
985
+ /**
986
+ * Account-wide, user-scoped counterpart of {@link getMyPullRequestsForReposResult} that returns the raw
987
+ * `ProviderPullRequest` shape (not the normalized model). Unlike the repo-scoped core, this needs no
988
+ * `repos` — it reads the current user's pull requests across the account, so the ProviderBackend sweep
989
+ * can drive its Kanban "done" column even when no repositories are supplied (where the repo-scoped core
990
+ * rejects an empty `repos` input). Recovers thrown errors into `{ error }` so callers surface warnings.
991
+ */
992
+ async getMyPullRequestsForUserResult(options, connectionId) {
477
993
  const scope = getScopedLogger();
478
- const connected = this.maybeConnected ?? (await this.isConnected());
479
- if (!connected)
994
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
995
+ const session = await this.resolveReadSession(connectionId, scope);
996
+ if (session == null)
480
997
  return undefined;
481
- await this.refreshSessionIfExpired(scope);
998
+ if (this.getProviderMyPullRequestsForUser == null) {
999
+ return undefined;
1000
+ }
1001
+ const start = performance.now();
482
1002
  try {
483
- const prs = await this.searchProviderPullRequests?.(this._session, searchQuery, repos != null ? (Array.isArray(repos) ? repos : [repos]) : undefined, cancellation);
1003
+ const result = await this.getProviderMyPullRequestsForUser(session, options);
1004
+ this.resetRequestExceptionCount('getMyPullRequestsForUser');
1005
+ return { value: result, duration: performance.now() - start };
1006
+ }
1007
+ catch (ex) {
1008
+ this.handleProviderException('getMyPullRequestsForUser', ex, { scope: scope });
1009
+ return { error: toError(ex), duration: performance.now() - start };
1010
+ }
1011
+ }
1012
+ /**
1013
+ * Parses a Repo/Project paging cursor into its `cursors` bundle. Guards against valid JSON whose
1014
+ * `cursors` is a truthy non-array (e.g. `{ "cursors": "..." }`), which would otherwise bypass the
1015
+ * `?? []` fallback at call sites and flow into `.map()` downstream, throwing instead of degrading to
1016
+ * the first page.
1017
+ */
1018
+ parseCursorInfo(cursor) {
1019
+ try {
1020
+ const parsed = JSON.parse(cursor ?? '{}');
1021
+ return Array.isArray(parsed?.cursors) ? parsed : {};
1022
+ }
1023
+ catch {
1024
+ return {};
1025
+ }
1026
+ }
1027
+ async searchPullRequests(searchQuery, repos, cancellation, connectionIdOrOptions, options) {
1028
+ // `connectionId` (string) can be omitted when passing `options`; split the overlapping 4th arg.
1029
+ // When the 4th arg isn't the options object (a string `connectionId` or `undefined`), fall back to
1030
+ // the 5th-arg `options` so an explicit `undefined` connectionId still honors state filtering.
1031
+ const connectionId = typeof connectionIdOrOptions === 'string' ? connectionIdOrOptions : undefined;
1032
+ const searchOptions = connectionIdOrOptions != null && typeof connectionIdOrOptions !== 'string'
1033
+ ? connectionIdOrOptions
1034
+ : options;
1035
+ const scope = getScopedLogger();
1036
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
1037
+ const session = await this.resolveReadSession(connectionId, scope);
1038
+ if (session == null)
1039
+ return undefined;
1040
+ try {
1041
+ const prs = await this.searchProviderPullRequests?.(session, searchQuery, repos != null ? (Array.isArray(repos) ? repos : [repos]) : undefined, cancellation, searchOptions);
484
1042
  this.resetRequestExceptionCount('searchPullRequests');
485
1043
  return prs;
486
1044
  }
@@ -497,6 +1055,10 @@ __decorate([
497
1055
  gate(),
498
1056
  trace()
499
1057
  ], GitHostIntegration.prototype, "getAccountForEmail", null);
1058
+ __decorate([
1059
+ gate(),
1060
+ trace()
1061
+ ], GitHostIntegration.prototype, "getSshSigningKeysForEmails", null);
500
1062
  __decorate([
501
1063
  gate(),
502
1064
  trace()
@@ -507,6 +1069,18 @@ __decorate([
507
1069
  __decorate([
508
1070
  trace()
509
1071
  ], GitHostIntegration.prototype, "getRepositoryMetadata", null);
1072
+ __decorate([
1073
+ trace()
1074
+ ], GitHostIntegration.prototype, "getOrganizationsForUserResult", null);
1075
+ __decorate([
1076
+ trace()
1077
+ ], GitHostIntegration.prototype, "getProjectsForOrgResult", null);
1078
+ __decorate([
1079
+ trace()
1080
+ ], GitHostIntegration.prototype, "getRepositoriesForOrgResult", null);
1081
+ __decorate([
1082
+ trace()
1083
+ ], GitHostIntegration.prototype, "getRepositoriesForUserResult", null);
510
1084
  __decorate([
511
1085
  trace()
512
1086
  ], GitHostIntegration.prototype, "getPullRequestForBranch", null);