@gitkraken/core-gitlens 0.3.1 → 0.4.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1070) hide show
  1. package/CHANGELOG.md +83 -1
  2. package/README.md +22 -12
  3. package/dist/git/cache.d.ts +29 -2
  4. package/dist/git/cache.d.ts.map +1 -1
  5. package/dist/git/cache.js +67 -7
  6. package/dist/git/cache.js.map +1 -1
  7. package/dist/git/context.d.ts +4 -3
  8. package/dist/git/context.d.ts.map +1 -1
  9. package/dist/git/context.js.map +1 -1
  10. package/dist/git/errors.d.ts +31 -1
  11. package/dist/git/errors.d.ts.map +1 -1
  12. package/dist/git/errors.js +29 -0
  13. package/dist/git/errors.js.map +1 -1
  14. package/dist/git/models/author.d.ts.map +1 -1
  15. package/dist/git/models/author.js.map +1 -1
  16. package/dist/git/models/autolink.d.ts.map +1 -1
  17. package/dist/git/models/autolink.js.map +1 -1
  18. package/dist/git/models/blame.d.ts.map +1 -1
  19. package/dist/git/models/blame.js.map +1 -1
  20. package/dist/git/models/branch.d.ts.map +1 -1
  21. package/dist/git/models/branch.js.map +1 -1
  22. package/dist/git/models/commit.d.ts.map +1 -1
  23. package/dist/git/models/commit.js +1 -1
  24. package/dist/git/models/commit.js.map +1 -1
  25. package/dist/git/models/contributor.d.ts.map +1 -1
  26. package/dist/git/models/contributor.js.map +1 -1
  27. package/dist/git/models/defaultBranch.d.ts.map +1 -1
  28. package/dist/git/models/defaultBranch.js.map +1 -1
  29. package/dist/git/models/diff.d.ts.map +1 -1
  30. package/dist/git/models/diff.js.map +1 -1
  31. package/dist/git/models/file.d.ts.map +1 -1
  32. package/dist/git/models/file.js.map +1 -1
  33. package/dist/git/models/fileChange.d.ts.map +1 -1
  34. package/dist/git/models/fileChange.js.map +1 -1
  35. package/dist/git/models/fileStatus.d.ts +22 -22
  36. package/dist/git/models/fileStatus.d.ts.map +1 -1
  37. package/dist/git/models/fileStatus.js.map +1 -1
  38. package/dist/git/models/graph.d.ts +122 -1
  39. package/dist/git/models/graph.d.ts.map +1 -1
  40. package/dist/git/models/graph.js +4 -0
  41. package/dist/git/models/graph.js.map +1 -1
  42. package/dist/git/models/graphSearch.d.ts.map +1 -1
  43. package/dist/git/models/graphSearch.js.map +1 -1
  44. package/dist/git/models/graphSession.d.ts +177 -0
  45. package/dist/git/models/graphSession.d.ts.map +1 -0
  46. package/dist/git/models/graphSession.js +7 -0
  47. package/dist/git/models/graphSession.js.map +1 -0
  48. package/dist/git/models/issue.d.ts +12 -2
  49. package/dist/git/models/issue.d.ts.map +1 -1
  50. package/dist/git/models/issue.js +3 -1
  51. package/dist/git/models/issue.js.map +1 -1
  52. package/dist/git/models/issueOrPullRequest.d.ts.map +1 -1
  53. package/dist/git/models/issueOrPullRequest.js.map +1 -1
  54. package/dist/git/models/lineRange.d.ts.map +1 -1
  55. package/dist/git/models/lineRange.js.map +1 -1
  56. package/dist/git/models/log.d.ts.map +1 -1
  57. package/dist/git/models/log.js.map +1 -1
  58. package/dist/git/models/mergeConflicts.d.ts.map +1 -1
  59. package/dist/git/models/mergeConflicts.js.map +1 -1
  60. package/dist/git/models/patch.d.ts.map +1 -1
  61. package/dist/git/models/patch.js.map +1 -1
  62. package/dist/git/models/pausedOperationStatus.d.ts.map +1 -1
  63. package/dist/git/models/pausedOperationStatus.js.map +1 -1
  64. package/dist/git/models/pullRequest.d.ts +27 -2
  65. package/dist/git/models/pullRequest.d.ts.map +1 -1
  66. package/dist/git/models/pullRequest.js +7 -1
  67. package/dist/git/models/pullRequest.js.map +1 -1
  68. package/dist/git/models/rebase.d.ts.map +1 -1
  69. package/dist/git/models/rebase.js.map +1 -1
  70. package/dist/git/models/reference.d.ts.map +1 -1
  71. package/dist/git/models/reference.js.map +1 -1
  72. package/dist/git/models/reflog.d.ts.map +1 -1
  73. package/dist/git/models/reflog.js.map +1 -1
  74. package/dist/git/models/remote.d.ts.map +1 -1
  75. package/dist/git/models/remote.js.map +1 -1
  76. package/dist/git/models/remoteProvider.d.ts.map +1 -1
  77. package/dist/git/models/remoteProvider.js.map +1 -1
  78. package/dist/git/models/remoteResource.d.ts.map +1 -1
  79. package/dist/git/models/remoteResource.js.map +1 -1
  80. package/dist/git/models/repository.d.ts +20 -2
  81. package/dist/git/models/repository.d.ts.map +1 -1
  82. package/dist/git/models/repository.js +19 -0
  83. package/dist/git/models/repository.js.map +1 -1
  84. package/dist/git/models/repositoryChangeEvent.d.ts.map +1 -1
  85. package/dist/git/models/repositoryChangeEvent.js.map +1 -1
  86. package/dist/git/models/repositoryIdentities.d.ts.map +1 -1
  87. package/dist/git/models/repositoryIdentities.js.map +1 -1
  88. package/dist/git/models/repositoryMetadata.d.ts.map +1 -1
  89. package/dist/git/models/repositoryMetadata.js.map +1 -1
  90. package/dist/git/models/resourceDescriptor.d.ts +16 -0
  91. package/dist/git/models/resourceDescriptor.d.ts.map +1 -1
  92. package/dist/git/models/resourceDescriptor.js.map +1 -1
  93. package/dist/git/models/revision.d.ts.map +1 -1
  94. package/dist/git/models/revision.js.map +1 -1
  95. package/dist/git/models/search.d.ts.map +1 -1
  96. package/dist/git/models/search.js.map +1 -1
  97. package/dist/git/models/shortlog.d.ts.map +1 -1
  98. package/dist/git/models/shortlog.js.map +1 -1
  99. package/dist/git/models/signature.d.ts +14 -0
  100. package/dist/git/models/signature.d.ts.map +1 -1
  101. package/dist/git/models/signature.js.map +1 -1
  102. package/dist/git/models/staging.d.ts.map +1 -1
  103. package/dist/git/models/staging.js.map +1 -1
  104. package/dist/git/models/stash.d.ts.map +1 -1
  105. package/dist/git/models/stash.js.map +1 -1
  106. package/dist/git/models/status.d.ts.map +1 -1
  107. package/dist/git/models/status.js.map +1 -1
  108. package/dist/git/models/statusFile.d.ts.map +1 -1
  109. package/dist/git/models/statusFile.js.map +1 -1
  110. package/dist/git/models/tag.d.ts +11 -1
  111. package/dist/git/models/tag.d.ts.map +1 -1
  112. package/dist/git/models/tag.js +9 -2
  113. package/dist/git/models/tag.js.map +1 -1
  114. package/dist/git/models/tree.d.ts.map +1 -1
  115. package/dist/git/models/tree.js.map +1 -1
  116. package/dist/git/models/user.d.ts.map +1 -1
  117. package/dist/git/models/user.js.map +1 -1
  118. package/dist/git/models/worktree.d.ts.map +1 -1
  119. package/dist/git/models/worktree.js.map +1 -1
  120. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  121. package/dist/git/parsers/diffParser.js +1 -1
  122. package/dist/git/parsers/diffParser.js.map +1 -1
  123. package/dist/git/parsers/rebaseTodoParser.d.ts.map +1 -1
  124. package/dist/git/parsers/rebaseTodoParser.js.map +1 -1
  125. package/dist/git/providers/blame.d.ts.map +1 -1
  126. package/dist/git/providers/blame.js.map +1 -1
  127. package/dist/git/providers/branches.d.ts +8 -1
  128. package/dist/git/providers/branches.d.ts.map +1 -1
  129. package/dist/git/providers/branches.js.map +1 -1
  130. package/dist/git/providers/commits.d.ts +6 -1
  131. package/dist/git/providers/commits.d.ts.map +1 -1
  132. package/dist/git/providers/commits.js.map +1 -1
  133. package/dist/git/providers/config.d.ts +6 -2
  134. package/dist/git/providers/config.d.ts.map +1 -1
  135. package/dist/git/providers/config.js.map +1 -1
  136. package/dist/git/providers/contributors.d.ts.map +1 -1
  137. package/dist/git/providers/contributors.js.map +1 -1
  138. package/dist/git/providers/diff.d.ts.map +1 -1
  139. package/dist/git/providers/diff.js.map +1 -1
  140. package/dist/git/providers/graph.d.ts +55 -1
  141. package/dist/git/providers/graph.d.ts.map +1 -1
  142. package/dist/git/providers/graph.js.map +1 -1
  143. package/dist/git/providers/operations.d.ts +1 -0
  144. package/dist/git/providers/operations.d.ts.map +1 -1
  145. package/dist/git/providers/operations.js.map +1 -1
  146. package/dist/git/providers/patch.d.ts.map +1 -1
  147. package/dist/git/providers/patch.js.map +1 -1
  148. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  149. package/dist/git/providers/pausedOperations.js.map +1 -1
  150. package/dist/git/providers/provider.d.ts.map +1 -1
  151. package/dist/git/providers/provider.js.map +1 -1
  152. package/dist/git/providers/refs.d.ts.map +1 -1
  153. package/dist/git/providers/refs.js.map +1 -1
  154. package/dist/git/providers/remotes.d.ts.map +1 -1
  155. package/dist/git/providers/remotes.js.map +1 -1
  156. package/dist/git/providers/revision.d.ts.map +1 -1
  157. package/dist/git/providers/revision.js.map +1 -1
  158. package/dist/git/providers/shared/remotes.d.ts.map +1 -1
  159. package/dist/git/providers/shared/remotes.js.map +1 -1
  160. package/dist/git/providers/staging.d.ts.map +1 -1
  161. package/dist/git/providers/staging.js.map +1 -1
  162. package/dist/git/providers/stash.d.ts.map +1 -1
  163. package/dist/git/providers/stash.js.map +1 -1
  164. package/dist/git/providers/status.d.ts +1 -0
  165. package/dist/git/providers/status.d.ts.map +1 -1
  166. package/dist/git/providers/status.js.map +1 -1
  167. package/dist/git/providers/tags.d.ts.map +1 -1
  168. package/dist/git/providers/tags.js.map +1 -1
  169. package/dist/git/providers/types.d.ts.map +1 -1
  170. package/dist/git/providers/types.js.map +1 -1
  171. package/dist/git/providers/worktrees.d.ts +5 -1
  172. package/dist/git/providers/worktrees.d.ts.map +1 -1
  173. package/dist/git/providers/worktrees.js.map +1 -1
  174. package/dist/git/remotes/azure-devops.d.ts.map +1 -1
  175. package/dist/git/remotes/azure-devops.js +27 -31
  176. package/dist/git/remotes/azure-devops.js.map +1 -1
  177. package/dist/git/remotes/bitbucket-server.d.ts.map +1 -1
  178. package/dist/git/remotes/bitbucket-server.js +21 -23
  179. package/dist/git/remotes/bitbucket-server.js.map +1 -1
  180. package/dist/git/remotes/bitbucket.d.ts.map +1 -1
  181. package/dist/git/remotes/bitbucket.js +21 -23
  182. package/dist/git/remotes/bitbucket.js.map +1 -1
  183. package/dist/git/remotes/custom.d.ts.map +1 -1
  184. package/dist/git/remotes/custom.js.map +1 -1
  185. package/dist/git/remotes/gerrit.d.ts.map +1 -1
  186. package/dist/git/remotes/gerrit.js +11 -13
  187. package/dist/git/remotes/gerrit.js.map +1 -1
  188. package/dist/git/remotes/gitea.d.ts.map +1 -1
  189. package/dist/git/remotes/gitea.js +12 -14
  190. package/dist/git/remotes/gitea.js.map +1 -1
  191. package/dist/git/remotes/github.d.ts.map +1 -1
  192. package/dist/git/remotes/github.js +54 -56
  193. package/dist/git/remotes/github.js.map +1 -1
  194. package/dist/git/remotes/gitlab.d.ts.map +1 -1
  195. package/dist/git/remotes/gitlab.js +93 -95
  196. package/dist/git/remotes/gitlab.js.map +1 -1
  197. package/dist/git/remotes/google-source.d.ts.map +1 -1
  198. package/dist/git/remotes/google-source.js.map +1 -1
  199. package/dist/git/remotes/matcher.d.ts.map +1 -1
  200. package/dist/git/remotes/matcher.js.map +1 -1
  201. package/dist/git/run.types.d.ts +62 -3
  202. package/dist/git/run.types.d.ts.map +1 -1
  203. package/dist/git/service.d.ts.map +1 -1
  204. package/dist/git/utils/autolink.utils.d.ts.map +1 -1
  205. package/dist/git/utils/autolink.utils.js.map +1 -1
  206. package/dist/git/utils/blame.utils.d.ts.map +1 -1
  207. package/dist/git/utils/blame.utils.js.map +1 -1
  208. package/dist/git/utils/branch.utils.d.ts.map +1 -1
  209. package/dist/git/utils/branch.utils.js +12 -1
  210. package/dist/git/utils/branch.utils.js.map +1 -1
  211. package/dist/git/utils/commit.utils.d.ts.map +1 -1
  212. package/dist/git/utils/commit.utils.js.map +1 -1
  213. package/dist/git/utils/conflictResolution.utils.d.ts +32 -0
  214. package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -1
  215. package/dist/git/utils/conflictResolution.utils.js +95 -0
  216. package/dist/git/utils/conflictResolution.utils.js.map +1 -1
  217. package/dist/git/utils/contributor.utils.d.ts +1 -1
  218. package/dist/git/utils/contributor.utils.d.ts.map +1 -1
  219. package/dist/git/utils/contributor.utils.js +1 -2
  220. package/dist/git/utils/contributor.utils.js.map +1 -1
  221. package/dist/git/utils/fetch.utils.d.ts.map +1 -1
  222. package/dist/git/utils/fetch.utils.js.map +1 -1
  223. package/dist/git/utils/fileStatus.utils.d.ts +7 -0
  224. package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
  225. package/dist/git/utils/fileStatus.utils.js +6 -0
  226. package/dist/git/utils/fileStatus.utils.js.map +1 -1
  227. package/dist/git/utils/graph.utils.d.ts +20 -0
  228. package/dist/git/utils/graph.utils.d.ts.map +1 -0
  229. package/dist/git/utils/graph.utils.js +40 -0
  230. package/dist/git/utils/graph.utils.js.map +1 -0
  231. package/dist/git/utils/issue.utils.d.ts.map +1 -1
  232. package/dist/git/utils/issue.utils.js +1 -0
  233. package/dist/git/utils/issue.utils.js.map +1 -1
  234. package/dist/git/utils/issueOrPullRequest.utils.d.ts.map +1 -1
  235. package/dist/git/utils/issueOrPullRequest.utils.js.map +1 -1
  236. package/dist/git/utils/mergeConflicts.utils.d.ts.map +1 -1
  237. package/dist/git/utils/mergeConflicts.utils.js.map +1 -1
  238. package/dist/git/utils/pausedOperationStatus.utils.d.ts +13 -13
  239. package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
  240. package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
  241. package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
  242. package/dist/git/utils/pullRequest.utils.js +9 -0
  243. package/dist/git/utils/pullRequest.utils.js.map +1 -1
  244. package/dist/git/utils/reachability.utils.d.ts +20 -2
  245. package/dist/git/utils/reachability.utils.d.ts.map +1 -1
  246. package/dist/git/utils/reachability.utils.js +68 -7
  247. package/dist/git/utils/reachability.utils.js.map +1 -1
  248. package/dist/git/utils/rebase.utils.d.ts.map +1 -1
  249. package/dist/git/utils/rebase.utils.js.map +1 -1
  250. package/dist/git/utils/reference.utils.d.ts.map +1 -1
  251. package/dist/git/utils/reference.utils.js.map +1 -1
  252. package/dist/git/utils/remote.utils.d.ts.map +1 -1
  253. package/dist/git/utils/remote.utils.js.map +1 -1
  254. package/dist/git/utils/repository.utils.d.ts.map +1 -1
  255. package/dist/git/utils/repository.utils.js.map +1 -1
  256. package/dist/git/utils/resourceDescriptor.utils.d.ts.map +1 -1
  257. package/dist/git/utils/resourceDescriptor.utils.js.map +1 -1
  258. package/dist/git/utils/revision.utils.d.ts.map +1 -1
  259. package/dist/git/utils/revision.utils.js.map +1 -1
  260. package/dist/git/utils/search.utils.d.ts.map +1 -1
  261. package/dist/git/utils/search.utils.js.map +1 -1
  262. package/dist/git/utils/sorting.d.ts.map +1 -1
  263. package/dist/git/utils/sorting.js.map +1 -1
  264. package/dist/git/utils/sshKey.utils.d.ts +7 -0
  265. package/dist/git/utils/sshKey.utils.d.ts.map +1 -0
  266. package/dist/git/utils/sshKey.utils.js +25 -0
  267. package/dist/git/utils/sshKey.utils.js.map +1 -0
  268. package/dist/git/utils/status.utils.d.ts.map +1 -1
  269. package/dist/git/utils/status.utils.js.map +1 -1
  270. package/dist/git/utils/statusFile.utils.d.ts.map +1 -1
  271. package/dist/git/utils/statusFile.utils.js.map +1 -1
  272. package/dist/git/utils/tag.utils.d.ts.map +1 -1
  273. package/dist/git/utils/tag.utils.js.map +1 -1
  274. package/dist/git/utils/tooltip.utils.d.ts.map +1 -1
  275. package/dist/git/utils/tooltip.utils.js.map +1 -1
  276. package/dist/git/utils/uriAuthority.d.ts.map +1 -1
  277. package/dist/git/utils/uriAuthority.js.map +1 -1
  278. package/dist/git/utils/user.utils.d.ts.map +1 -1
  279. package/dist/git/utils/user.utils.js.map +1 -1
  280. package/dist/git/utils/worktree.utils.d.ts.map +1 -1
  281. package/dist/git/utils/worktree.utils.js.map +1 -1
  282. package/dist/git/watching/changeEvent.d.ts.map +1 -1
  283. package/dist/git/watching/changeEvent.js.map +1 -1
  284. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  285. package/dist/git/watching/classifyChange.js.map +1 -1
  286. package/dist/git/watching/gitIgnoreFilter.d.ts.map +1 -1
  287. package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
  288. package/dist/git/watching/initWatcher.d.ts.map +1 -1
  289. package/dist/git/watching/initWatcher.js.map +1 -1
  290. package/dist/git/watching/provider.d.ts.map +1 -1
  291. package/dist/git/watching/provider.js.map +1 -1
  292. package/dist/git/watching/watchGroup.d.ts.map +1 -1
  293. package/dist/git/watching/watchGroup.js.map +1 -1
  294. package/dist/git/watching/watchService.d.ts +4 -0
  295. package/dist/git/watching/watchService.d.ts.map +1 -1
  296. package/dist/git/watching/watchService.js +15 -1
  297. package/dist/git/watching/watchService.js.map +1 -1
  298. package/dist/git/watching/watchSession.d.ts +7 -0
  299. package/dist/git/watching/watchSession.d.ts.map +1 -1
  300. package/dist/git/watching/watchSession.js +14 -2
  301. package/dist/git/watching/watchSession.js.map +1 -1
  302. package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
  303. package/dist/git/watching/watcherPatterns.js.map +1 -1
  304. package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
  305. package/dist/git-cli/exec/exec.d.ts.map +1 -1
  306. package/dist/git-cli/exec/exec.errors.d.ts.map +1 -1
  307. package/dist/git-cli/exec/exec.errors.js.map +1 -1
  308. package/dist/git-cli/exec/exec.js.map +1 -1
  309. package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
  310. package/dist/git-cli/exec/exec.types.js.map +1 -1
  311. package/dist/git-cli/exec/features.d.ts.map +1 -1
  312. package/dist/git-cli/exec/features.js.map +1 -1
  313. package/dist/git-cli/exec/git.d.ts +19 -27
  314. package/dist/git-cli/exec/git.d.ts.map +1 -1
  315. package/dist/git-cli/exec/git.js +126 -34
  316. package/dist/git-cli/exec/git.js.map +1 -1
  317. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  318. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  319. package/dist/git-cli/exec/locator.d.ts.map +1 -1
  320. package/dist/git-cli/exec/locator.js.map +1 -1
  321. package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
  322. package/dist/git-cli/parsers/blameParser.js.map +1 -1
  323. package/dist/git-cli/parsers/indexParser.d.ts.map +1 -1
  324. package/dist/git-cli/parsers/indexParser.js.map +1 -1
  325. package/dist/git-cli/parsers/logParser.d.ts +9 -1
  326. package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
  327. package/dist/git-cli/parsers/logParser.js +141 -60
  328. package/dist/git-cli/parsers/logParser.js.map +1 -1
  329. package/dist/git-cli/parsers/mergeTreeParser.d.ts.map +1 -1
  330. package/dist/git-cli/parsers/mergeTreeParser.js.map +1 -1
  331. package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
  332. package/dist/git-cli/parsers/refParser.js.map +1 -1
  333. package/dist/git-cli/parsers/reflogParser.d.ts.map +1 -1
  334. package/dist/git-cli/parsers/reflogParser.js.map +1 -1
  335. package/dist/git-cli/parsers/remoteParser.d.ts.map +1 -1
  336. package/dist/git-cli/parsers/remoteParser.js.map +1 -1
  337. package/dist/git-cli/parsers/shortlogParser.d.ts.map +1 -1
  338. package/dist/git-cli/parsers/shortlogParser.js.map +1 -1
  339. package/dist/git-cli/parsers/signatureParser.d.ts.map +1 -1
  340. package/dist/git-cli/parsers/signatureParser.js.map +1 -1
  341. package/dist/git-cli/parsers/sshSignatureParser.d.ts +21 -0
  342. package/dist/git-cli/parsers/sshSignatureParser.d.ts.map +1 -0
  343. package/dist/git-cli/parsers/sshSignatureParser.js +78 -0
  344. package/dist/git-cli/parsers/sshSignatureParser.js.map +1 -0
  345. package/dist/git-cli/parsers/statusParser.d.ts.map +1 -1
  346. package/dist/git-cli/parsers/statusParser.js.map +1 -1
  347. package/dist/git-cli/parsers/treeParser.d.ts.map +1 -1
  348. package/dist/git-cli/parsers/treeParser.js.map +1 -1
  349. package/dist/git-cli/parsers/worktreeParser.d.ts.map +1 -1
  350. package/dist/git-cli/parsers/worktreeParser.js +5 -7
  351. package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
  352. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  353. package/dist/git-cli/providers/blame.js.map +1 -1
  354. package/dist/git-cli/providers/branches.d.ts +1 -0
  355. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  356. package/dist/git-cli/providers/branches.js +51 -32
  357. package/dist/git-cli/providers/branches.js.map +1 -1
  358. package/dist/git-cli/providers/commitFilesetUtils.d.ts.map +1 -1
  359. package/dist/git-cli/providers/commitFilesetUtils.js.map +1 -1
  360. package/dist/git-cli/providers/commits.d.ts +12 -1
  361. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  362. package/dist/git-cli/providers/commits.js +89 -8
  363. package/dist/git-cli/providers/commits.js.map +1 -1
  364. package/dist/git-cli/providers/config.d.ts.map +1 -1
  365. package/dist/git-cli/providers/config.js.map +1 -1
  366. package/dist/git-cli/providers/contributors.d.ts.map +1 -1
  367. package/dist/git-cli/providers/contributors.js.map +1 -1
  368. package/dist/git-cli/providers/diff.d.ts.map +1 -1
  369. package/dist/git-cli/providers/diff.js.map +1 -1
  370. package/dist/git-cli/providers/graph.d.ts +35 -1
  371. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  372. package/dist/git-cli/providers/graph.js +1434 -330
  373. package/dist/git-cli/providers/graph.js.map +1 -1
  374. package/dist/git-cli/providers/operations.d.ts +1 -0
  375. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  376. package/dist/git-cli/providers/operations.js +22 -1
  377. package/dist/git-cli/providers/operations.js.map +1 -1
  378. package/dist/git-cli/providers/patch.d.ts.map +1 -1
  379. package/dist/git-cli/providers/patch.js.map +1 -1
  380. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  381. package/dist/git-cli/providers/pausedOperations.js +3 -3
  382. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  383. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  384. package/dist/git-cli/providers/refs.js.map +1 -1
  385. package/dist/git-cli/providers/remotes.d.ts.map +1 -1
  386. package/dist/git-cli/providers/remotes.js.map +1 -1
  387. package/dist/git-cli/providers/revision.d.ts +1 -0
  388. package/dist/git-cli/providers/revision.d.ts.map +1 -1
  389. package/dist/git-cli/providers/revision.js +33 -0
  390. package/dist/git-cli/providers/revision.js.map +1 -1
  391. package/dist/git-cli/providers/staging.d.ts.map +1 -1
  392. package/dist/git-cli/providers/staging.js.map +1 -1
  393. package/dist/git-cli/providers/stash.d.ts.map +1 -1
  394. package/dist/git-cli/providers/stash.js.map +1 -1
  395. package/dist/git-cli/providers/status.d.ts +28 -0
  396. package/dist/git-cli/providers/status.d.ts.map +1 -1
  397. package/dist/git-cli/providers/status.js +240 -154
  398. package/dist/git-cli/providers/status.js.map +1 -1
  399. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  400. package/dist/git-cli/providers/tags.js +2 -1
  401. package/dist/git-cli/providers/tags.js.map +1 -1
  402. package/dist/git-cli/providers/worktrees.d.ts +4 -1
  403. package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
  404. package/dist/git-cli/providers/worktrees.js +31 -3
  405. package/dist/git-cli/providers/worktrees.js.map +1 -1
  406. package/dist/git-cli/service.d.ts.map +1 -1
  407. package/dist/git-cli/service.js +8 -0
  408. package/dist/git-cli/service.js.map +1 -1
  409. package/dist/ipc/ipcServer.d.ts.map +1 -1
  410. package/dist/ipc/ipcServer.js +1 -1
  411. package/dist/ipc/ipcServer.js.map +1 -1
  412. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +6 -1
  413. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
  414. package/dist/plus/agents/providers/claudeCodeProvider.js +19 -0
  415. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
  416. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +68 -0
  417. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
  418. package/dist/plus/agents/providers/claudeCodeTranscript.js +262 -8
  419. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
  420. package/dist/plus/agents/types.d.ts +36 -2
  421. package/dist/plus/agents/types.d.ts.map +1 -1
  422. package/dist/plus/ai/constants.d.ts +1 -2
  423. package/dist/plus/ai/constants.d.ts.map +1 -1
  424. package/dist/plus/ai/constants.js +1 -8
  425. package/dist/plus/ai/constants.js.map +1 -1
  426. package/dist/plus/ai/errors.d.ts.map +1 -1
  427. package/dist/plus/ai/errors.js.map +1 -1
  428. package/dist/plus/ai/models/conversation.d.ts.map +1 -1
  429. package/dist/plus/ai/models/conversation.js.map +1 -1
  430. package/dist/plus/ai/models/model.d.ts +2 -1
  431. package/dist/plus/ai/models/model.d.ts.map +1 -1
  432. package/dist/plus/ai/models/model.js +50 -1
  433. package/dist/plus/ai/models/model.js.map +1 -1
  434. package/dist/plus/ai/models/promptTemplates.d.ts +5 -2
  435. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  436. package/dist/plus/ai/models/promptTemplates.js.map +1 -1
  437. package/dist/plus/ai/models/provider.d.ts.map +1 -1
  438. package/dist/plus/ai/models/provider.js.map +1 -1
  439. package/dist/plus/ai/models/results.d.ts.map +1 -1
  440. package/dist/plus/ai/models/results.js.map +1 -1
  441. package/dist/plus/ai/prompts.d.ts +1 -1
  442. package/dist/plus/ai/prompts.d.ts.map +1 -1
  443. package/dist/plus/ai/prompts.js +15 -47
  444. package/dist/plus/ai/prompts.js.map +1 -1
  445. package/dist/plus/ai/providers/anthropicProvider.d.ts +5 -0
  446. package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
  447. package/dist/plus/ai/providers/anthropicProvider.js +40 -3
  448. package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
  449. package/dist/plus/ai/providers/azureProvider.d.ts.map +1 -1
  450. package/dist/plus/ai/providers/azureProvider.js.map +1 -1
  451. package/dist/plus/ai/providers/context.d.ts.map +1 -1
  452. package/dist/plus/ai/providers/context.js.map +1 -1
  453. package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
  454. package/dist/plus/ai/providers/deepSeekProvider.js +17 -1
  455. package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
  456. package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
  457. package/dist/plus/ai/providers/geminiProvider.js +25 -6
  458. package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
  459. package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
  460. package/dist/plus/ai/providers/gitkrakenProvider.js +1 -0
  461. package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
  462. package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -1
  463. package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
  464. package/dist/plus/ai/providers/huggingFaceProvider.js +21 -18
  465. package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
  466. package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
  467. package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
  468. package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
  469. package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
  470. package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
  471. package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
  472. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +10 -1
  473. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
  474. package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -1
  475. package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
  476. package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
  477. package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
  478. package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
  479. package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
  480. package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
  481. package/dist/plus/ai/providers/xaiProvider.js +14 -1
  482. package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
  483. package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
  484. package/dist/plus/ai/utils/ai.utils.js +5 -7
  485. package/dist/plus/ai/utils/ai.utils.js.map +1 -1
  486. package/dist/plus/ai/utils/results.utils.d.ts +3 -0
  487. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  488. package/dist/plus/ai/utils/results.utils.js +26 -0
  489. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  490. package/dist/plus/ai/utils/truncation.utils.d.ts +1 -1
  491. package/dist/plus/ai/utils/truncation.utils.d.ts.map +1 -1
  492. package/dist/plus/ai/utils/truncation.utils.js.map +1 -1
  493. package/dist/plus/git-github/api/config.d.ts.map +1 -1
  494. package/dist/plus/git-github/api/config.js.map +1 -1
  495. package/dist/plus/git-github/api/github.d.ts +71 -15
  496. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  497. package/dist/plus/git-github/api/github.js +350 -84
  498. package/dist/plus/git-github/api/github.js.map +1 -1
  499. package/dist/plus/git-github/api/github.utils.d.ts.map +1 -1
  500. package/dist/plus/git-github/api/github.utils.js.map +1 -1
  501. package/dist/plus/git-github/api/token.d.ts.map +1 -1
  502. package/dist/plus/git-github/api/token.js.map +1 -1
  503. package/dist/plus/git-github/api/tokenUtils.d.ts.map +1 -1
  504. package/dist/plus/git-github/api/tokenUtils.js.map +1 -1
  505. package/dist/plus/git-github/api/types.d.ts.map +1 -1
  506. package/dist/plus/git-github/api/types.js.map +1 -1
  507. package/dist/plus/git-github/context.d.ts.map +1 -1
  508. package/dist/plus/git-github/models.d.ts +5 -0
  509. package/dist/plus/git-github/models.d.ts.map +1 -1
  510. package/dist/plus/git-github/models.js +27 -2
  511. package/dist/plus/git-github/models.js.map +1 -1
  512. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  513. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  514. package/dist/plus/git-github/providers/github/branches.d.ts +2 -1
  515. package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
  516. package/dist/plus/git-github/providers/github/branches.js +7 -3
  517. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  518. package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
  519. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  520. package/dist/plus/git-github/providers/github/config.d.ts.map +1 -1
  521. package/dist/plus/git-github/providers/github/config.js.map +1 -1
  522. package/dist/plus/git-github/providers/github/contributors.d.ts.map +1 -1
  523. package/dist/plus/git-github/providers/github/contributors.js.map +1 -1
  524. package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
  525. package/dist/plus/git-github/providers/github/diff.js +2 -2
  526. package/dist/plus/git-github/providers/github/diff.js.map +1 -1
  527. package/dist/plus/git-github/providers/github/graph.d.ts +12 -1
  528. package/dist/plus/git-github/providers/github/graph.d.ts.map +1 -1
  529. package/dist/plus/git-github/providers/github/graph.js +85 -0
  530. package/dist/plus/git-github/providers/github/graph.js.map +1 -1
  531. package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
  532. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  533. package/dist/plus/git-github/providers/github/remotes.d.ts.map +1 -1
  534. package/dist/plus/git-github/providers/github/remotes.js.map +1 -1
  535. package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
  536. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  537. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  538. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  539. package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
  540. package/dist/plus/git-github/providers/github/tags.js +3 -1
  541. package/dist/plus/git-github/providers/github/tags.js.map +1 -1
  542. package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
  543. package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
  544. package/dist/plus/git-github/providers/githubProvider.d.ts.map +1 -1
  545. package/dist/plus/git-github/providers/githubProvider.js.map +1 -1
  546. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts +30 -0
  547. package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts.map +1 -0
  548. package/dist/plus/integrations/authentication/cloudIntegrationService.js +214 -0
  549. package/dist/plus/integrations/authentication/cloudIntegrationService.js.map +1 -0
  550. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts +114 -0
  551. package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts.map +1 -0
  552. package/dist/plus/integrations/authentication/configuredIntegrationService.js +497 -0
  553. package/dist/plus/integrations/authentication/configuredIntegrationService.js.map +1 -0
  554. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts +112 -0
  555. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts.map +1 -0
  556. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js +217 -0
  557. package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js.map +1 -0
  558. package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts +62 -0
  559. package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts.map +1 -0
  560. package/dist/plus/integrations/authentication/integrationAuthenticationService.js +126 -0
  561. package/dist/plus/integrations/authentication/integrationAuthenticationService.js.map +1 -0
  562. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts +16 -0
  563. package/dist/plus/integrations/authentication/manualTokenProvider.d.ts.map +1 -0
  564. package/dist/plus/integrations/authentication/manualTokenProvider.js +53 -0
  565. package/dist/plus/integrations/authentication/manualTokenProvider.js.map +1 -0
  566. package/dist/plus/integrations/authentication/models.d.ts +120 -0
  567. package/dist/plus/integrations/authentication/models.d.ts.map +1 -0
  568. package/dist/plus/integrations/authentication/models.js +64 -0
  569. package/dist/plus/integrations/authentication/models.js.map +1 -0
  570. package/dist/plus/integrations/collectionMetadata.d.ts +21 -0
  571. package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -0
  572. package/dist/plus/integrations/collectionMetadata.js +121 -0
  573. package/dist/plus/integrations/collectionMetadata.js.map +1 -0
  574. package/dist/plus/integrations/constants.d.ts +57 -0
  575. package/dist/plus/integrations/constants.d.ts.map +1 -0
  576. package/dist/plus/integrations/constants.js +138 -0
  577. package/dist/plus/integrations/constants.js.map +1 -0
  578. package/dist/plus/integrations/context.d.ts +358 -0
  579. package/dist/plus/integrations/context.d.ts.map +1 -0
  580. package/dist/plus/integrations/context.js +2 -0
  581. package/dist/plus/integrations/context.js.map +1 -0
  582. package/dist/plus/integrations/errors.d.ts +79 -0
  583. package/dist/plus/integrations/errors.d.ts.map +1 -0
  584. package/dist/plus/integrations/errors.js +150 -0
  585. package/dist/plus/integrations/errors.js.map +1 -0
  586. package/dist/plus/integrations/index.d.ts +77 -0
  587. package/dist/plus/integrations/index.d.ts.map +1 -0
  588. package/dist/plus/integrations/index.js +64 -0
  589. package/dist/plus/integrations/index.js.map +1 -0
  590. package/dist/plus/integrations/integrationService.d.ts +379 -0
  591. package/dist/plus/integrations/integrationService.d.ts.map +1 -0
  592. package/dist/plus/integrations/integrationService.js +1895 -0
  593. package/dist/plus/integrations/integrationService.js.map +1 -0
  594. package/dist/plus/integrations/lite.d.ts +47 -0
  595. package/dist/plus/integrations/lite.d.ts.map +1 -0
  596. package/dist/plus/integrations/lite.js +141 -0
  597. package/dist/plus/integrations/lite.js.map +1 -0
  598. package/dist/plus/integrations/manager.d.ts +332 -0
  599. package/dist/plus/integrations/manager.d.ts.map +1 -0
  600. package/dist/plus/integrations/manager.js +2 -0
  601. package/dist/plus/integrations/manager.js.map +1 -0
  602. package/dist/plus/integrations/models/gitHostIntegration.d.ts +341 -0
  603. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -0
  604. package/dist/plus/integrations/models/gitHostIntegration.js +1146 -0
  605. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -0
  606. package/dist/plus/integrations/models/integration.d.ts +212 -0
  607. package/dist/plus/integrations/models/integration.d.ts.map +1 -0
  608. package/dist/plus/integrations/models/integration.js +627 -0
  609. package/dist/plus/integrations/models/integration.js.map +1 -0
  610. package/dist/plus/integrations/models/issuesIntegration.d.ts +108 -0
  611. package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -0
  612. package/dist/plus/integrations/models/issuesIntegration.js +216 -0
  613. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -0
  614. package/dist/plus/integrations/providerFilters.d.ts +12 -0
  615. package/dist/plus/integrations/providerFilters.d.ts.map +1 -0
  616. package/dist/plus/integrations/providerFilters.js +14 -0
  617. package/dist/plus/integrations/providerFilters.js.map +1 -0
  618. package/dist/plus/integrations/providers/apiClients.d.ts +25 -0
  619. package/dist/plus/integrations/providers/apiClients.d.ts.map +1 -0
  620. package/dist/plus/integrations/providers/apiClients.js +39 -0
  621. package/dist/plus/integrations/providers/apiClients.js.map +1 -0
  622. package/dist/plus/integrations/providers/apiConfig.d.ts +52 -0
  623. package/dist/plus/integrations/providers/apiConfig.d.ts.map +1 -0
  624. package/dist/plus/integrations/providers/apiConfig.js +19 -0
  625. package/dist/plus/integrations/providers/apiConfig.js.map +1 -0
  626. package/dist/plus/integrations/providers/azure/azure.d.ts +59 -0
  627. package/dist/plus/integrations/providers/azure/azure.d.ts.map +1 -0
  628. package/dist/plus/integrations/providers/azure/azure.js +519 -0
  629. package/dist/plus/integrations/providers/azure/azure.js.map +1 -0
  630. package/dist/plus/integrations/providers/azure/models.d.ts +302 -0
  631. package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -0
  632. package/dist/plus/integrations/providers/azure/models.js +203 -0
  633. package/dist/plus/integrations/providers/azure/models.js.map +1 -0
  634. package/dist/plus/integrations/providers/azureDevOps.d.ts +141 -0
  635. package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -0
  636. package/dist/plus/integrations/providers/azureDevOps.js +925 -0
  637. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -0
  638. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +53 -0
  639. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts.map +1 -0
  640. package/dist/plus/integrations/providers/bitbucket/bitbucket.js +589 -0
  641. package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -0
  642. package/dist/plus/integrations/providers/bitbucket/models.d.ts +222 -0
  643. package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -0
  644. package/dist/plus/integrations/providers/bitbucket/models.js +158 -0
  645. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -0
  646. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +138 -0
  647. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts.map +1 -0
  648. package/dist/plus/integrations/providers/bitbucket-server/models.js +130 -0
  649. package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -0
  650. package/dist/plus/integrations/providers/bitbucket-server.d.ts +84 -0
  651. package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -0
  652. package/dist/plus/integrations/providers/bitbucket-server.js +242 -0
  653. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -0
  654. package/dist/plus/integrations/providers/bitbucket.d.ts +84 -0
  655. package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -0
  656. package/dist/plus/integrations/providers/bitbucket.js +477 -0
  657. package/dist/plus/integrations/providers/bitbucket.js.map +1 -0
  658. package/dist/plus/integrations/providers/github/github.d.ts +5 -0
  659. package/dist/plus/integrations/providers/github/github.d.ts.map +1 -0
  660. package/dist/plus/integrations/providers/github/github.js +47 -0
  661. package/dist/plus/integrations/providers/github/github.js.map +1 -0
  662. package/dist/plus/integrations/providers/github/github.utils.d.ts +11 -0
  663. package/dist/plus/integrations/providers/github/github.utils.d.ts.map +1 -0
  664. package/dist/plus/integrations/providers/github/github.utils.js +6 -0
  665. package/dist/plus/integrations/providers/github/github.utils.js.map +1 -0
  666. package/dist/plus/integrations/providers/github/models.d.ts +3 -0
  667. package/dist/plus/integrations/providers/github/models.d.ts.map +1 -0
  668. package/dist/plus/integrations/providers/github/models.js +2 -0
  669. package/dist/plus/integrations/providers/github/models.js.map +1 -0
  670. package/dist/plus/integrations/providers/github.d.ts +116 -0
  671. package/dist/plus/integrations/providers/github.d.ts.map +1 -0
  672. package/dist/plus/integrations/providers/github.js +445 -0
  673. package/dist/plus/integrations/providers/github.js.map +1 -0
  674. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +71 -0
  675. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts.map +1 -0
  676. package/dist/plus/integrations/providers/gitlab/gitlab.js +902 -0
  677. package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -0
  678. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts +27 -0
  679. package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts.map +1 -0
  680. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js +53 -0
  681. package/dist/plus/integrations/providers/gitlab/gitlab.utils.js.map +1 -0
  682. package/dist/plus/integrations/providers/gitlab/models.d.ts +138 -0
  683. package/dist/plus/integrations/providers/gitlab/models.d.ts.map +1 -0
  684. package/dist/plus/integrations/providers/gitlab/models.js +99 -0
  685. package/dist/plus/integrations/providers/gitlab/models.js.map +1 -0
  686. package/dist/plus/integrations/providers/gitlab.d.ts +124 -0
  687. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -0
  688. package/dist/plus/integrations/providers/gitlab.js +519 -0
  689. package/dist/plus/integrations/providers/gitlab.js.map +1 -0
  690. package/dist/plus/integrations/providers/jira.d.ts +57 -0
  691. package/dist/plus/integrations/providers/jira.d.ts.map +1 -0
  692. package/dist/plus/integrations/providers/jira.js +425 -0
  693. package/dist/plus/integrations/providers/jira.js.map +1 -0
  694. package/dist/plus/integrations/providers/linear.d.ts +58 -0
  695. package/dist/plus/integrations/providers/linear.d.ts.map +1 -0
  696. package/dist/plus/integrations/providers/linear.js +304 -0
  697. package/dist/plus/integrations/providers/linear.js.map +1 -0
  698. package/dist/plus/integrations/providers/models.d.ts +712 -0
  699. package/dist/plus/integrations/providers/models.d.ts.map +1 -0
  700. package/dist/plus/integrations/providers/models.js +850 -0
  701. package/dist/plus/integrations/providers/models.js.map +1 -0
  702. package/dist/plus/integrations/providers/providersApi.d.ts +262 -0
  703. package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -0
  704. package/dist/plus/integrations/providers/providersApi.js +1033 -0
  705. package/dist/plus/integrations/providers/providersApi.js.map +1 -0
  706. package/dist/plus/integrations/providers/trello.d.ts +47 -0
  707. package/dist/plus/integrations/providers/trello.d.ts.map +1 -0
  708. package/dist/plus/integrations/providers/trello.js +141 -0
  709. package/dist/plus/integrations/providers/trello.js.map +1 -0
  710. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +29 -0
  711. package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -0
  712. package/dist/plus/integrations/providers/utils/providerPaging.js +154 -0
  713. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -0
  714. package/dist/plus/integrations/providers/utils.d.ts +75 -0
  715. package/dist/plus/integrations/providers/utils.d.ts.map +1 -0
  716. package/dist/plus/integrations/providers/utils.js +313 -0
  717. package/dist/plus/integrations/providers/utils.js.map +1 -0
  718. package/dist/plus/integrations/reads/context.d.ts +52 -0
  719. package/dist/plus/integrations/reads/context.d.ts.map +1 -0
  720. package/dist/plus/integrations/reads/context.js +2 -0
  721. package/dist/plus/integrations/reads/context.js.map +1 -0
  722. package/dist/plus/integrations/reads/cursors.d.ts +66 -0
  723. package/dist/plus/integrations/reads/cursors.d.ts.map +1 -0
  724. package/dist/plus/integrations/reads/cursors.js +133 -0
  725. package/dist/plus/integrations/reads/cursors.js.map +1 -0
  726. package/dist/plus/integrations/reads/drains.d.ts +60 -0
  727. package/dist/plus/integrations/reads/drains.d.ts.map +1 -0
  728. package/dist/plus/integrations/reads/drains.js +255 -0
  729. package/dist/plus/integrations/reads/drains.js.map +1 -0
  730. package/dist/plus/integrations/reads/filters.d.ts +81 -0
  731. package/dist/plus/integrations/reads/filters.d.ts.map +1 -0
  732. package/dist/plus/integrations/reads/filters.js +87 -0
  733. package/dist/plus/integrations/reads/filters.js.map +1 -0
  734. package/dist/plus/integrations/reads/hierarchy.d.ts +17 -0
  735. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -0
  736. package/dist/plus/integrations/reads/hierarchy.js +348 -0
  737. package/dist/plus/integrations/reads/hierarchy.js.map +1 -0
  738. package/dist/plus/integrations/reads/hierarchy.utils.d.ts +53 -0
  739. package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -0
  740. package/dist/plus/integrations/reads/hierarchy.utils.js +85 -0
  741. package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -0
  742. package/dist/plus/integrations/reads/issueTracker.d.ts +19 -0
  743. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -0
  744. package/dist/plus/integrations/reads/issueTracker.js +346 -0
  745. package/dist/plus/integrations/reads/issueTracker.js.map +1 -0
  746. package/dist/plus/integrations/reads/issues.d.ts +34 -0
  747. package/dist/plus/integrations/reads/issues.d.ts.map +1 -0
  748. package/dist/plus/integrations/reads/issues.js +244 -0
  749. package/dist/plus/integrations/reads/issues.js.map +1 -0
  750. package/dist/plus/integrations/reads/paging.d.ts +136 -0
  751. package/dist/plus/integrations/reads/paging.d.ts.map +1 -0
  752. package/dist/plus/integrations/reads/paging.js +221 -0
  753. package/dist/plus/integrations/reads/paging.js.map +1 -0
  754. package/dist/plus/integrations/reads/pullRequests.d.ts +32 -0
  755. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -0
  756. package/dist/plus/integrations/reads/pullRequests.js +151 -0
  757. package/dist/plus/integrations/reads/pullRequests.js.map +1 -0
  758. package/dist/plus/integrations/reads/warnings.d.ts +47 -0
  759. package/dist/plus/integrations/reads/warnings.d.ts.map +1 -0
  760. package/dist/plus/integrations/reads/warnings.js +81 -0
  761. package/dist/plus/integrations/reads/warnings.js.map +1 -0
  762. package/dist/plus/integrations/results.d.ts +189 -0
  763. package/dist/plus/integrations/results.d.ts.map +1 -0
  764. package/dist/plus/integrations/results.js +62 -0
  765. package/dist/plus/integrations/results.js.map +1 -0
  766. package/dist/plus/integrations/telemetry.d.ts +26 -0
  767. package/dist/plus/integrations/telemetry.d.ts.map +1 -0
  768. package/dist/plus/integrations/telemetry.js +11 -0
  769. package/dist/plus/integrations/telemetry.js.map +1 -0
  770. package/dist/plus/integrations/utils/domain.utils.d.ts +5 -0
  771. package/dist/plus/integrations/utils/domain.utils.d.ts.map +1 -0
  772. package/dist/plus/integrations/utils/domain.utils.js +27 -0
  773. package/dist/plus/integrations/utils/domain.utils.js.map +1 -0
  774. package/dist/plus/integrations/utils/integration.utils.d.ts +40 -0
  775. package/dist/plus/integrations/utils/integration.utils.d.ts.map +1 -0
  776. package/dist/plus/integrations/utils/integration.utils.js +182 -0
  777. package/dist/plus/integrations/utils/integration.utils.js.map +1 -0
  778. package/dist/utils/array.d.ts.map +1 -1
  779. package/dist/utils/array.js.map +1 -1
  780. package/dist/utils/brand.d.ts.map +1 -1
  781. package/dist/utils/cancellation.d.ts +13 -0
  782. package/dist/utils/cancellation.d.ts.map +1 -1
  783. package/dist/utils/cancellation.js +52 -7
  784. package/dist/utils/cancellation.js.map +1 -1
  785. package/dist/utils/charCode.d.ts.map +1 -1
  786. package/dist/utils/coalescedRun.d.ts +16 -0
  787. package/dist/utils/coalescedRun.d.ts.map +1 -0
  788. package/dist/utils/coalescedRun.js +43 -0
  789. package/dist/utils/coalescedRun.js.map +1 -0
  790. package/dist/utils/color.d.ts.map +1 -1
  791. package/dist/utils/color.js +3 -3
  792. package/dist/utils/color.js.map +1 -1
  793. package/dist/utils/date.d.ts +24 -0
  794. package/dist/utils/date.d.ts.map +1 -1
  795. package/dist/utils/date.js +62 -0
  796. package/dist/utils/date.js.map +1 -1
  797. package/dist/utils/debounce.js +1 -1
  798. package/dist/utils/debounce.js.map +1 -1
  799. package/dist/utils/decorators/debounce.d.ts.map +1 -1
  800. package/dist/utils/decorators/debounce.js.map +1 -1
  801. package/dist/utils/decorators/gate.d.ts.map +1 -1
  802. package/dist/utils/decorators/gate.js +2 -2
  803. package/dist/utils/decorators/gate.js.map +1 -1
  804. package/dist/utils/decorators/log.d.ts.map +1 -1
  805. package/dist/utils/decorators/log.js +5 -5
  806. package/dist/utils/decorators/log.js.map +1 -1
  807. package/dist/utils/decorators/memoize.d.ts.map +1 -1
  808. package/dist/utils/decorators/memoize.js +2 -2
  809. package/dist/utils/decorators/memoize.js.map +1 -1
  810. package/dist/utils/decorators/resolver.d.ts.map +1 -1
  811. package/dist/utils/decorators/resolver.js.map +1 -1
  812. package/dist/utils/decorators/sequentialize.d.ts.map +1 -1
  813. package/dist/utils/decorators/sequentialize.js +2 -2
  814. package/dist/utils/decorators/sequentialize.js.map +1 -1
  815. package/dist/utils/decorators/serializable.d.ts.map +1 -1
  816. package/dist/utils/decorators/serializable.js +1 -1
  817. package/dist/utils/decorators/serializable.js.map +1 -1
  818. package/dist/utils/dedupedAsyncCache.d.ts.map +1 -1
  819. package/dist/utils/disposable.d.ts +15 -2
  820. package/dist/utils/disposable.d.ts.map +1 -1
  821. package/dist/utils/disposable.js.map +1 -1
  822. package/dist/utils/env/browser/base64.d.ts.map +1 -1
  823. package/dist/utils/env/browser/base64.js.map +1 -1
  824. package/dist/utils/env/browser/crypto.d.ts.map +1 -1
  825. package/dist/utils/env/browser/crypto.js.map +1 -1
  826. package/dist/utils/env/browser/fs.d.ts.map +1 -1
  827. package/dist/utils/env/browser/fs.js.map +1 -1
  828. package/dist/utils/env/browser/hex.d.ts.map +1 -1
  829. package/dist/utils/env/browser/hex.js.map +1 -1
  830. package/dist/utils/env/browser/hrtime.d.ts.map +1 -1
  831. package/dist/utils/env/browser/hrtime.js.map +1 -1
  832. package/dist/utils/env/browser/logScope.d.ts.map +1 -1
  833. package/dist/utils/env/browser/logScope.js.map +1 -1
  834. package/dist/utils/env/browser/md5.d.ts.map +1 -1
  835. package/dist/utils/env/browser/md5.js.map +1 -1
  836. package/dist/utils/env/browser/platform.d.ts.map +1 -1
  837. package/dist/utils/env/browser/platform.js.map +1 -1
  838. package/dist/utils/env/node/base64.d.ts.map +1 -1
  839. package/dist/utils/env/node/base64.js.map +1 -1
  840. package/dist/utils/env/node/crypto.d.ts.map +1 -1
  841. package/dist/utils/env/node/crypto.js.map +1 -1
  842. package/dist/utils/env/node/exec.d.ts +9 -1
  843. package/dist/utils/env/node/exec.d.ts.map +1 -1
  844. package/dist/utils/env/node/exec.js +11 -4
  845. package/dist/utils/env/node/exec.js.map +1 -1
  846. package/dist/utils/env/node/fs.d.ts.map +1 -1
  847. package/dist/utils/env/node/fs.js.map +1 -1
  848. package/dist/utils/env/node/hex.d.ts.map +1 -1
  849. package/dist/utils/env/node/hex.js.map +1 -1
  850. package/dist/utils/env/node/hrtime.d.ts.map +1 -1
  851. package/dist/utils/env/node/hrtime.js.map +1 -1
  852. package/dist/utils/env/node/logScope.d.ts.map +1 -1
  853. package/dist/utils/env/node/logScope.js.map +1 -1
  854. package/dist/utils/env/node/platform.d.ts.map +1 -1
  855. package/dist/utils/env/node/platform.js.map +1 -1
  856. package/dist/utils/event.d.ts.map +1 -1
  857. package/dist/utils/event.js +18 -22
  858. package/dist/utils/event.js.map +1 -1
  859. package/dist/utils/formatter.d.ts.map +1 -1
  860. package/dist/utils/formatter.js.map +1 -1
  861. package/dist/utils/function.d.ts.map +1 -1
  862. package/dist/utils/function.js +3 -3
  863. package/dist/utils/function.js.map +1 -1
  864. package/dist/utils/hash.js.map +1 -1
  865. package/dist/utils/iterable.d.ts.map +1 -1
  866. package/dist/utils/iterable.js +2 -6
  867. package/dist/utils/iterable.js.map +1 -1
  868. package/dist/utils/lazy.d.ts.map +1 -1
  869. package/dist/utils/lazy.js.map +1 -1
  870. package/dist/utils/logger.d.ts.map +1 -1
  871. package/dist/utils/logger.js +1 -1
  872. package/dist/utils/logger.js.map +1 -1
  873. package/dist/utils/logger.scoped.js +1 -1
  874. package/dist/utils/logger.scoped.js.map +1 -1
  875. package/dist/utils/lruMap.d.ts.map +1 -1
  876. package/dist/utils/lruMap.js.map +1 -1
  877. package/dist/utils/mru.d.ts.map +1 -1
  878. package/dist/utils/mru.js.map +1 -1
  879. package/dist/utils/object.js.map +1 -1
  880. package/dist/utils/paging.d.ts +29 -0
  881. package/dist/utils/paging.d.ts.map +1 -1
  882. package/dist/utils/paging.js +18 -0
  883. package/dist/utils/paging.js.map +1 -1
  884. package/dist/utils/path.js.map +1 -1
  885. package/dist/utils/promise.d.ts +10 -0
  886. package/dist/utils/promise.d.ts.map +1 -1
  887. package/dist/utils/promise.js +26 -3
  888. package/dist/utils/promise.js.map +1 -1
  889. package/dist/utils/promiseCache.d.ts +12 -2
  890. package/dist/utils/promiseCache.d.ts.map +1 -1
  891. package/dist/utils/promiseCache.js +80 -50
  892. package/dist/utils/promiseCache.js.map +1 -1
  893. package/dist/utils/searchTree.d.ts.map +1 -1
  894. package/dist/utils/searchTree.js +4 -1
  895. package/dist/utils/searchTree.js.map +1 -1
  896. package/dist/utils/stopwatch.d.ts.map +1 -1
  897. package/dist/utils/string.js +1 -1
  898. package/dist/utils/string.js.map +1 -1
  899. package/dist/utils/subscriptionManager.d.ts.map +1 -1
  900. package/dist/utils/subscriptionManager.js.map +1 -1
  901. package/dist/utils/trie.d.ts.map +1 -1
  902. package/dist/utils/trie.js +1 -0
  903. package/dist/utils/trie.js.map +1 -1
  904. package/docs/integrations.md +372 -0
  905. package/docs/kepler-read-api-parity.md +112 -0
  906. package/package.json +238 -172
  907. package/src/git/cache.ts +75 -8
  908. package/src/git/context.ts +4 -3
  909. package/src/git/errors.ts +36 -1
  910. package/src/git/models/commit.ts +1 -1
  911. package/src/git/models/graph.ts +147 -0
  912. package/src/git/models/graphSession.ts +205 -0
  913. package/src/git/models/issue.ts +12 -1
  914. package/src/git/models/pullRequest.ts +27 -1
  915. package/src/git/models/repository.ts +24 -1
  916. package/src/git/models/resourceDescriptor.ts +17 -0
  917. package/src/git/models/signature.ts +16 -0
  918. package/src/git/models/tag.ts +6 -1
  919. package/src/git/parsers/diffParser.ts +1 -1
  920. package/src/git/providers/branches.ts +6 -1
  921. package/src/git/providers/commits.ts +6 -1
  922. package/src/git/providers/config.ts +5 -1
  923. package/src/git/providers/graph.ts +69 -2
  924. package/src/git/providers/operations.ts +1 -1
  925. package/src/git/providers/status.ts +1 -1
  926. package/src/git/providers/worktrees.ts +17 -3
  927. package/src/git/remotes/azure-devops.ts +29 -33
  928. package/src/git/remotes/bitbucket-server.ts +23 -25
  929. package/src/git/remotes/bitbucket.ts +23 -25
  930. package/src/git/remotes/gerrit.ts +12 -14
  931. package/src/git/remotes/gitea.ts +13 -15
  932. package/src/git/remotes/github.ts +56 -58
  933. package/src/git/remotes/gitlab.ts +102 -104
  934. package/src/git/run.types.ts +54 -4
  935. package/src/git/utils/branch.utils.ts +12 -1
  936. package/src/git/utils/conflictResolution.utils.ts +126 -0
  937. package/src/git/utils/contributor.utils.ts +1 -1
  938. package/src/git/utils/fileStatus.utils.ts +7 -0
  939. package/src/git/utils/graph.utils.ts +46 -0
  940. package/src/git/utils/issue.utils.ts +1 -0
  941. package/src/git/utils/pullRequest.utils.ts +9 -0
  942. package/src/git/utils/reachability.utils.ts +79 -8
  943. package/src/git/utils/sshKey.utils.ts +30 -0
  944. package/src/git/watching/watchService.ts +16 -1
  945. package/src/git/watching/watchSession.ts +20 -2
  946. package/src/git-cli/exec/git.ts +144 -42
  947. package/src/git-cli/parsers/logParser.ts +83 -1
  948. package/src/git-cli/parsers/sshSignatureParser.ts +85 -0
  949. package/src/git-cli/parsers/worktreeParser.ts +5 -7
  950. package/src/git-cli/providers/branches.ts +60 -38
  951. package/src/git-cli/providers/commits.ts +102 -9
  952. package/src/git-cli/providers/graph.ts +1771 -393
  953. package/src/git-cli/providers/operations.ts +22 -2
  954. package/src/git-cli/providers/pausedOperations.ts +3 -3
  955. package/src/git-cli/providers/revision.ts +42 -0
  956. package/src/git-cli/providers/status.ts +333 -178
  957. package/src/git-cli/providers/tags.ts +2 -0
  958. package/src/git-cli/providers/worktrees.ts +57 -6
  959. package/src/git-cli/service.ts +9 -0
  960. package/src/ipc/ipcServer.ts +1 -1
  961. package/src/plus/agents/providers/claudeCodeProvider.ts +25 -0
  962. package/src/plus/agents/providers/claudeCodeTranscript.ts +320 -8
  963. package/src/plus/agents/types.ts +34 -0
  964. package/src/plus/ai/constants.ts +1 -9
  965. package/src/plus/ai/models/model.ts +53 -2
  966. package/src/plus/ai/models/promptTemplates.ts +9 -2
  967. package/src/plus/ai/prompts.ts +16 -48
  968. package/src/plus/ai/providers/anthropicProvider.ts +45 -3
  969. package/src/plus/ai/providers/deepSeekProvider.ts +17 -1
  970. package/src/plus/ai/providers/geminiProvider.ts +25 -6
  971. package/src/plus/ai/providers/gitkrakenProvider.ts +2 -0
  972. package/src/plus/ai/providers/huggingFaceProvider.ts +28 -21
  973. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +16 -1
  974. package/src/plus/ai/providers/xaiProvider.ts +14 -1
  975. package/src/plus/ai/utils/ai.utils.ts +5 -7
  976. package/src/plus/ai/utils/results.utils.ts +32 -0
  977. package/src/plus/ai/utils/truncation.utils.ts +0 -1
  978. package/src/plus/git-github/api/github.ts +497 -129
  979. package/src/plus/git-github/models.ts +33 -0
  980. package/src/plus/git-github/providers/github/branches.ts +6 -3
  981. package/src/plus/git-github/providers/github/diff.ts +1 -1
  982. package/src/plus/git-github/providers/github/graph.ts +131 -0
  983. package/src/plus/git-github/providers/github/tags.ts +2 -0
  984. package/src/plus/integrations/authentication/cloudIntegrationService.ts +292 -0
  985. package/src/plus/integrations/authentication/configuredIntegrationService.ts +651 -0
  986. package/src/plus/integrations/authentication/integrationAuthenticationProvider.ts +363 -0
  987. package/src/plus/integrations/authentication/integrationAuthenticationService.ts +148 -0
  988. package/src/plus/integrations/authentication/manualTokenProvider.ts +79 -0
  989. package/src/plus/integrations/authentication/models.ts +202 -0
  990. package/src/plus/integrations/collectionMetadata.ts +143 -0
  991. package/src/plus/integrations/constants.ts +190 -0
  992. package/src/plus/integrations/context.ts +382 -0
  993. package/src/plus/integrations/errors.ts +184 -0
  994. package/src/plus/integrations/index.ts +216 -0
  995. package/src/plus/integrations/integrationService.ts +2589 -0
  996. package/src/plus/integrations/lite.ts +233 -0
  997. package/src/plus/integrations/manager.ts +359 -0
  998. package/src/plus/integrations/models/gitHostIntegration.ts +1631 -0
  999. package/src/plus/integrations/models/integration.ts +926 -0
  1000. package/src/plus/integrations/models/issuesIntegration.ts +264 -0
  1001. package/src/plus/integrations/providerFilters.ts +12 -0
  1002. package/src/plus/integrations/providers/apiClients.ts +69 -0
  1003. package/src/plus/integrations/providers/apiConfig.ts +71 -0
  1004. package/src/plus/integrations/providers/azure/azure.ts +822 -0
  1005. package/src/plus/integrations/providers/azure/models.ts +618 -0
  1006. package/src/plus/integrations/providers/azureDevOps.ts +1342 -0
  1007. package/src/plus/integrations/providers/bitbucket/bitbucket.ts +904 -0
  1008. package/src/plus/integrations/providers/bitbucket/models.ts +445 -0
  1009. package/src/plus/integrations/providers/bitbucket-server/models.ts +283 -0
  1010. package/src/plus/integrations/providers/bitbucket-server.ts +447 -0
  1011. package/src/plus/integrations/providers/bitbucket.ts +794 -0
  1012. package/src/plus/integrations/providers/github/github.ts +64 -0
  1013. package/src/plus/integrations/providers/github/github.utils.ts +23 -0
  1014. package/src/plus/integrations/providers/github/models.ts +29 -0
  1015. package/src/plus/integrations/providers/github.ts +750 -0
  1016. package/src/plus/integrations/providers/gitlab/gitlab.ts +1320 -0
  1017. package/src/plus/integrations/providers/gitlab/gitlab.utils.ts +80 -0
  1018. package/src/plus/integrations/providers/gitlab/models.ts +271 -0
  1019. package/src/plus/integrations/providers/gitlab.ts +832 -0
  1020. package/src/plus/integrations/providers/jira.ts +564 -0
  1021. package/src/plus/integrations/providers/linear.ts +402 -0
  1022. package/src/plus/integrations/providers/models.ts +1622 -0
  1023. package/src/plus/integrations/providers/providersApi.ts +1889 -0
  1024. package/src/plus/integrations/providers/trello.ts +205 -0
  1025. package/src/plus/integrations/providers/utils/providerPaging.ts +177 -0
  1026. package/src/plus/integrations/providers/utils.ts +419 -0
  1027. package/src/plus/integrations/reads/context.ts +75 -0
  1028. package/src/plus/integrations/reads/cursors.ts +224 -0
  1029. package/src/plus/integrations/reads/drains.ts +343 -0
  1030. package/src/plus/integrations/reads/filters.ts +124 -0
  1031. package/src/plus/integrations/reads/hierarchy.ts +493 -0
  1032. package/src/plus/integrations/reads/hierarchy.utils.ts +106 -0
  1033. package/src/plus/integrations/reads/issueTracker.ts +480 -0
  1034. package/src/plus/integrations/reads/issues.ts +407 -0
  1035. package/src/plus/integrations/reads/paging.ts +277 -0
  1036. package/src/plus/integrations/reads/pullRequests.ts +267 -0
  1037. package/src/plus/integrations/reads/warnings.ts +170 -0
  1038. package/src/plus/integrations/results.ts +275 -0
  1039. package/src/plus/integrations/telemetry.ts +29 -0
  1040. package/src/plus/integrations/utils/domain.utils.ts +26 -0
  1041. package/src/plus/integrations/utils/integration.utils.ts +215 -0
  1042. package/src/utils/brand.ts +0 -2
  1043. package/src/utils/cancellation.ts +56 -7
  1044. package/src/utils/coalescedRun.ts +45 -0
  1045. package/src/utils/color.ts +3 -3
  1046. package/src/utils/date.ts +72 -0
  1047. package/src/utils/debounce.ts +1 -1
  1048. package/src/utils/decorators/gate.ts +2 -2
  1049. package/src/utils/decorators/log.ts +5 -5
  1050. package/src/utils/decorators/memoize.ts +2 -2
  1051. package/src/utils/decorators/sequentialize.ts +2 -2
  1052. package/src/utils/decorators/serializable.ts +1 -1
  1053. package/src/utils/disposable.ts +15 -2
  1054. package/src/utils/env/node/exec.ts +20 -5
  1055. package/src/utils/event.ts +19 -25
  1056. package/src/utils/function.ts +3 -3
  1057. package/src/utils/iterable.ts +2 -6
  1058. package/src/utils/logger.scoped.ts +1 -1
  1059. package/src/utils/logger.ts +1 -1
  1060. package/src/utils/paging.ts +46 -0
  1061. package/src/utils/promise.ts +33 -3
  1062. package/src/utils/promiseCache.ts +81 -51
  1063. package/src/utils/searchTree.ts +4 -2
  1064. package/src/utils/string.ts +1 -1
  1065. package/src/utils/trie.ts +1 -0
  1066. package/dist/plus/ai/providers/githubModelsProvider.d.ts +0 -19
  1067. package/dist/plus/ai/providers/githubModelsProvider.d.ts.map +0 -1
  1068. package/dist/plus/ai/providers/githubModelsProvider.js +0 -51
  1069. package/dist/plus/ai/providers/githubModelsProvider.js.map +0 -1
  1070. package/src/plus/ai/providers/githubModelsProvider.ts +0 -92
@@ -0,0 +1,926 @@
1
+ import type { CollectionMetadata } from '@gitkraken/provider-apis';
2
+ import type { Account } from '../../../git/models/author.js';
3
+ import type { AutolinkReference, DynamicAutolinkReference } from '../../../git/models/autolink.js';
4
+ import type { Issue, IssueShape } from '../../../git/models/issue.js';
5
+ import type { IssueOrPullRequest, IssueOrPullRequestType } from '../../../git/models/issueOrPullRequest.js';
6
+ import type { PullRequest } from '../../../git/models/pullRequest.js';
7
+ import type { ResourceDescriptor } from '../../../git/models/resourceDescriptor.js';
8
+ import { isCancellationError } from '../../../utils/cancellation.js';
9
+ import { gate } from '../../../utils/decorators/gate.js';
10
+ import { debug, trace } from '../../../utils/decorators/log.js';
11
+ import type { Disposable } from '../../../utils/disposable.js';
12
+ import type { Event } from '../../../utils/event.js';
13
+ import { Emitter } from '../../../utils/event.js';
14
+ import { fnv1aHash64 } from '../../../utils/hash.js';
15
+ import type { ScopedLogger } from '../../../utils/logger.scoped.js';
16
+ import { getScopedLogger } from '../../../utils/logger.scoped.js';
17
+ import type {
18
+ IntegrationAuthenticationProviderDescriptor,
19
+ IntegrationAuthenticationSessionDescriptor,
20
+ } from '../authentication/integrationAuthenticationProvider.js';
21
+ import type { IntegrationAuthenticationService } from '../authentication/integrationAuthenticationService.js';
22
+ import type { ProviderAuthenticationSession } from '../authentication/models.js';
23
+ import type { IntegrationIds, IssuesCloudHostIntegrationId } from '../constants.js';
24
+ import { GitCloudHostIntegrationId } from '../constants.js';
25
+ import type { IntegrationServiceContext } from '../context.js';
26
+ import { AuthenticationError, RequestClientError, toError } from '../errors.js';
27
+ import type { IntegrationConnectionChangeEvent } from '../integrationService.js';
28
+ import type { IssueFilter } from '../providerFilters.js';
29
+ import type { ProvidersApi } from '../providers/providersApi.js';
30
+ import type { Sources } from '../telemetry.js';
31
+ import { areDomainsOnSameHost } from '../utils/domain.utils.js';
32
+ import { isGitSelfManagedHostIntegrationId } from '../utils/integration.utils.js';
33
+ import type { GitHostIntegration } from './gitHostIntegration.js';
34
+ import type { IssuesIntegration } from './issuesIntegration.js';
35
+
36
+ export type Integration = GitHostIntegration | IssuesIntegration;
37
+ export type IntegrationById<T extends IntegrationIds> = T extends IssuesCloudHostIntegrationId
38
+ ? IssuesIntegration
39
+ : GitHostIntegration;
40
+ export type IntegrationType = 'git' | 'issues';
41
+
42
+ export type IntegrationKey<T extends IntegrationIds = IntegrationIds> = T extends
43
+ | GitCloudHostIntegrationId
44
+ | IssuesCloudHostIntegrationId
45
+ ? `${T}`
46
+ : `${T}:${string}`;
47
+
48
+ export type IntegrationConnectedKey<T extends IntegrationIds = IntegrationIds> = `connected:${IntegrationKey<T>}`;
49
+
50
+ export type IntegrationResult<T> =
51
+ | { value: T; duration?: number; error?: Error }
52
+ | { error: Error; duration?: number; value?: never }
53
+ | undefined;
54
+
55
+ /**
56
+ * Account-wide issue read result. `truncated` is a provider-native incompleteness signal (GitHub's search
57
+ * ceiling, an Azure per-project backstop); cursor-capable providers also expose `cursor`/`hasMore`/`page`.
58
+ * `metadata` optionally carries structured per-scope failures from a fan-out (Azure across projects).
59
+ */
60
+ export type AccountWideIssuesResult = {
61
+ values: IssueShape[];
62
+ truncated: boolean;
63
+ metadata?: CollectionMetadata;
64
+ cursor?: string;
65
+ hasMore?: boolean;
66
+ page?: number;
67
+ };
68
+
69
+ /**
70
+ * Options for the account-wide issue read. `includeAllAssignees` drops the "assigned to me" scoping so the
71
+ * read broadens to issues assigned to anyone (the account-wide equivalent of the repo-scoped
72
+ * {@link GitHostIntegration.getMyIssuesForReposResult}'s toggle). Authored/mentioned categories, where a
73
+ * provider has them, stay user-relative — they're meaningless without a user.
74
+ */
75
+ export type SearchMyIssuesOptions = {
76
+ includeAllAssignees?: boolean;
77
+ /**
78
+ * Narrows the account-wide read to the requested relationship(s) instead of the provider's own definition of
79
+ * "my issues" (GitHub/GHE: authored ∪ assigned ∪ mentioned; Azure: assigned ∪ authored; GitLab:
80
+ * assigned-to-me). Narrowing has to happen HERE, not on the returned page: the excluded items still counted
81
+ * toward the provider's page/cursor, so a client-side filter desynchronizes `items` from `hasMore`.
82
+ *
83
+ * Only filters the provider can express server-side are accepted; the facade validates the set against
84
+ * `ProviderMetadata.supportedAccountWideIssueFilters` (all-or-nothing) and refuses the read rather than
85
+ * serving the unnarrowed union as if it had been filtered. Omitted keeps the provider's definition.
86
+ */
87
+ filters?: IssueFilter[];
88
+ cursor?: string;
89
+ /**
90
+ * Narrows the account-wide read to one org/account (Azure: the organization) and/or one project within it.
91
+ * Only honored by a host with a project layer (Azure), whose account-wide read otherwise fans out over every
92
+ * project of every org; the caller checks `supportsProjectDiscovery` before asking, so a host without a
93
+ * project layer never silently returns an unscoped list as if it had been narrowed.
94
+ */
95
+ org?: string;
96
+ project?: string;
97
+ };
98
+
99
+ type SyncReqUsecase = Exclude<
100
+ | 'getAccountForCommit'
101
+ | 'getAccountForEmail'
102
+ | 'getAccountForResource'
103
+ | 'getCurrentAccount'
104
+ | 'getDefaultBranch'
105
+ | 'getIssue'
106
+ | 'getIssueOrPullRequest'
107
+ | 'getIssuesForProject'
108
+ | 'getIssuesForRepos'
109
+ | 'getMyPullRequestsForUser'
110
+ | 'getOrganizationsForUser'
111
+ | 'getProjectsForOrg'
112
+ | 'getProjectsForResources'
113
+ | 'getPullRequest'
114
+ | 'getRepositoriesForOrg'
115
+ | 'getRepositoriesForUser'
116
+ | 'getPullRequestForBranch'
117
+ | 'getPullRequestForCommit'
118
+ | 'getPullRequestsForRepos'
119
+ | 'getRepositoryMetadata'
120
+ | 'getResourcesForUser'
121
+ | 'getSshSigningKeysForEmails'
122
+ | 'mergePullRequest'
123
+ | 'searchMyIssues'
124
+ | 'searchMyPullRequests'
125
+ | 'searchPullRequests',
126
+ // excluding to show explicitly that we don't want to add 'all' key occasionally
127
+ 'all'
128
+ >;
129
+
130
+ export abstract class IntegrationBase<
131
+ ID extends IntegrationIds = IntegrationIds,
132
+ T extends ResourceDescriptor = ResourceDescriptor,
133
+ > implements Disposable {
134
+ abstract readonly type: IntegrationType;
135
+
136
+ private readonly _onDidChange = new Emitter<void>();
137
+ get onDidChange(): Event<void> {
138
+ return this._onDidChange.event;
139
+ }
140
+
141
+ constructor(
142
+ protected readonly ctx: IntegrationServiceContext,
143
+ protected readonly authenticationService: IntegrationAuthenticationService,
144
+ protected readonly getProvidersApi: () => Promise<ProvidersApi>,
145
+ private readonly didChangeConnection: Emitter<IntegrationConnectionChangeEvent>,
146
+ ) {}
147
+
148
+ dispose(): void {
149
+ this._onDidChange.dispose();
150
+ }
151
+
152
+ abstract get authProvider(): IntegrationAuthenticationProviderDescriptor;
153
+ abstract get id(): ID;
154
+ protected abstract get key(): IntegrationKey<ID>;
155
+ abstract get name(): string;
156
+ abstract get domain(): string;
157
+
158
+ get authProviderDescriptor(): IntegrationAuthenticationSessionDescriptor {
159
+ return { domain: this.domain, scopes: this.authProvider.scopes };
160
+ }
161
+
162
+ get icon(): string {
163
+ return this.id;
164
+ }
165
+
166
+ access(): Promise<boolean> {
167
+ return this.ctx.account.isTrialOrPaid();
168
+ }
169
+
170
+ autolinks():
171
+ | (AutolinkReference | DynamicAutolinkReference)[]
172
+ | Promise<(AutolinkReference | DynamicAutolinkReference)[]> {
173
+ return [];
174
+ }
175
+
176
+ private get connectedKey(): IntegrationConnectedKey<ID> {
177
+ return `connected:${this.key}`;
178
+ }
179
+
180
+ get maybeConnected(): boolean | undefined {
181
+ return this._session === undefined ? undefined : this._session !== null;
182
+ }
183
+
184
+ /** Hash of the current session's access token. Changes on any token change (account switch or refresh). */
185
+ private _sessionFingerprint: { session: ProviderAuthenticationSession; hash: string } | undefined;
186
+ get sessionFingerprint(): string | undefined {
187
+ if (this._session == null) return undefined;
188
+
189
+ if (this._sessionFingerprint?.session !== this._session) {
190
+ this._sessionFingerprint = { session: this._session, hash: this.getSessionFingerprint(this._session) };
191
+ }
192
+ return this._sessionFingerprint.hash;
193
+ }
194
+
195
+ protected getSessionFingerprint(session: ProviderAuthenticationSession): string {
196
+ return fnv1aHash64(session.accessToken);
197
+ }
198
+
199
+ get connectionExpired(): boolean | undefined {
200
+ if (this._session?.expiresAt == null) return undefined;
201
+ return new Date(this._session.expiresAt) < new Date();
202
+ }
203
+
204
+ protected _session: ProviderAuthenticationSession | null | undefined;
205
+ getSession(
206
+ source: Sources,
207
+ ): ProviderAuthenticationSession | Promise<ProviderAuthenticationSession | undefined> | undefined {
208
+ if (this._session === undefined) {
209
+ return this.ensureSession({ createIfNeeded: false, source: source });
210
+ }
211
+ return this._session != null && this.isSessionForIntegrationHost(this._session) ? this._session : undefined;
212
+ }
213
+
214
+ private isSessionForIntegrationHost(session: ProviderAuthenticationSession): boolean {
215
+ if (!isGitSelfManagedHostIntegrationId(this.id)) return true;
216
+
217
+ return areDomainsOnSameHost(this.domain, session.domain);
218
+ }
219
+
220
+ /**
221
+ * Resolves the session to read as, for a per-connection (multi-account) read. When `connectionId` is
222
+ * omitted this is the integration's primary session, resolved exactly like the existing read flow
223
+ * (ensure-connected + refresh-if-expired). When set, it resolves THAT connection's session directly
224
+ * from the auth provider — refreshing it if expired — WITHOUT disturbing the cached primary
225
+ * `_session`. Returns undefined when the requested session can't be resolved (e.g. the connection is
226
+ * gone or the provider isn't connected), so callers degrade to "no results".
227
+ */
228
+ protected async resolveReadSession(
229
+ connectionId: string | undefined,
230
+ scope: ScopedLogger | undefined,
231
+ source?: Sources,
232
+ ): Promise<ProviderAuthenticationSession | undefined> {
233
+ if (
234
+ this.ctx.config.isIntegrationsEnabled?.() === false ||
235
+ this.ctx.storage.getWorkspace(this.connectedKey) === false
236
+ ) {
237
+ return undefined;
238
+ }
239
+
240
+ // A truthy connectionId targets a specific account; an empty string is not a real target, so it falls
241
+ // through to the primary path below.
242
+ if (connectionId) {
243
+ // Degrade to "no results" on failure, matching the primary path (whose ensureSession/
244
+ // refreshSessionIfExpired swallow errors) so read methods keep their never-throws contract.
245
+ try {
246
+ const authProvider = await this.authenticationService.get(this.authProvider.id);
247
+ const session = await authProvider.getSession(
248
+ { ...this.authProviderDescriptor, connectionId: connectionId, cloud: true },
249
+ { source: source },
250
+ );
251
+ return session != null && this.isSessionForIntegrationHost(session) ? session : undefined;
252
+ } catch (ex) {
253
+ scope?.error(ex);
254
+ return undefined;
255
+ }
256
+ }
257
+
258
+ const connected = this.maybeConnected ?? (await this.isConnected());
259
+ if (!connected) return undefined;
260
+
261
+ await this.refreshSessionIfExpired(scope);
262
+ return this._session != null && this.isSessionForIntegrationHost(this._session) ? this._session : undefined;
263
+ }
264
+
265
+ @debug()
266
+ async connect(source: Sources): Promise<boolean> {
267
+ try {
268
+ return Boolean(await this.ensureSession({ createIfNeeded: true, source: source }));
269
+ } catch (_ex) {
270
+ return false;
271
+ }
272
+ }
273
+
274
+ protected providerOnConnect?(): void | Promise<void>;
275
+
276
+ @gate()
277
+ @debug()
278
+ async disconnect(options?: { silent?: boolean; currentSessionOnly?: boolean }): Promise<void> {
279
+ if (options?.currentSessionOnly && this._session === null) return;
280
+
281
+ const connected = this._session != null;
282
+
283
+ let signOut = !options?.currentSessionOnly;
284
+
285
+ if (connected && !options?.currentSessionOnly && !options?.silent) {
286
+ const decision = await this.ctx.hooks?.onConfirmDisconnect?.({
287
+ integrationName: this.name,
288
+ offerSignOut: this.authenticationService.supports(this.authProvider.id),
289
+ });
290
+ if (decision == null) return;
291
+
292
+ signOut = decision.signOut;
293
+ }
294
+
295
+ if (signOut) {
296
+ // Disconnecting a provider signs out of ALL its connected accounts (multi-account), not just the
297
+ // primary — otherwise secondary connections' secrets/config would be orphaned. Removing a single
298
+ // account is done via IntegrationService.deleteConnection instead. Pass this instance's descriptor
299
+ // so self-managed disconnects stay scoped to this host: those group every host under one provider
300
+ // id, so an unscoped clear would sign the user out of unrelated hosts. deleteAllSessions derives an
301
+ // undefined domain for cloud providers, so they still clear every account as intended.
302
+ const authProvider = await this.authenticationService.get(this.authProvider.id);
303
+ void authProvider.deleteAllSessions(this.authProviderDescriptor);
304
+ }
305
+
306
+ this.resetRequestExceptionCount('all');
307
+ this._session = null;
308
+
309
+ if (connected) {
310
+ // Don't store the disconnected flag if silently disconnecting or disconnecting this only for
311
+ // this current VS Code session (will be re-connected on next restart)
312
+ if (!options?.currentSessionOnly && !options?.silent) {
313
+ void this.ctx.storage.storeWorkspace(this.connectedKey, false).catch();
314
+ }
315
+
316
+ this._onDidChange.fire();
317
+ if (!options?.currentSessionOnly) {
318
+ this.didChangeConnection?.fire({ integration: this, key: this.key, reason: 'disconnected' });
319
+ }
320
+ }
321
+
322
+ await this.providerOnDisconnect?.();
323
+ }
324
+
325
+ protected providerOnDisconnect?(): void | Promise<void>;
326
+
327
+ @debug()
328
+ async reauthenticate(): Promise<void> {
329
+ if (this._session === undefined) return;
330
+
331
+ this._session = undefined;
332
+ void (await this.ensureSession({ createIfNeeded: true, forceNewSession: true }));
333
+ }
334
+
335
+ refresh(): void {
336
+ void this.ensureSession({ createIfNeeded: false });
337
+ }
338
+
339
+ private _syncRequestsPerFailedUsecase = new Set<SyncReqUsecase>();
340
+ hasSessionSyncRequests(): boolean {
341
+ return this._syncRequestsPerFailedUsecase.size > 0;
342
+ }
343
+ requestSessionSyncForUsecase(syncReqUsecase: SyncReqUsecase): void {
344
+ this._syncRequestsPerFailedUsecase.add(syncReqUsecase);
345
+ }
346
+ private static readonly requestExceptionLimit = 5;
347
+ private requestExceptionCount = 0;
348
+
349
+ resetRequestExceptionCount(syncReqUsecase: SyncReqUsecase | 'all'): void {
350
+ this.requestExceptionCount = 0;
351
+ if (syncReqUsecase === 'all') {
352
+ this._syncRequestsPerFailedUsecase.clear();
353
+ } else {
354
+ this._syncRequestsPerFailedUsecase.delete(syncReqUsecase);
355
+ }
356
+ }
357
+
358
+ /**
359
+ * Resets request exceptions without resetting the amount of syncs
360
+ */
361
+ smoothifyRequestExceptionCount(): void {
362
+ // On resync we reset exception count only to avoid infinitive syncs on failure
363
+ this.requestExceptionCount = 0;
364
+ }
365
+
366
+ async reset(): Promise<void> {
367
+ await this.disconnect({ silent: true });
368
+ await this.ctx.storage.deleteWorkspace(this.connectedKey);
369
+ }
370
+
371
+ /**
372
+ * Drops the in-memory session so the next access re-resolves it from storage. Used when the primary
373
+ * connection changed underneath a warm integration (e.g. after `setPrimaryConnection`/
374
+ * `deleteConnection`). Unlike {@link reset}/{@link disconnect}, it deletes nothing from storage.
375
+ */
376
+ switchConnection(): void {
377
+ if (this._session === undefined) return;
378
+
379
+ const wasConnected = this._session != null;
380
+ this._session = undefined;
381
+ this._onDidChange.fire();
382
+ void this.refreshAfterSwitch(wasConnected);
383
+ }
384
+
385
+ private async refreshAfterSwitch(wasConnected: boolean): Promise<void> {
386
+ const session = await this.ensureSession({ createIfNeeded: false });
387
+ if (session != null || !wasConnected) return;
388
+
389
+ this._onDidChange.fire();
390
+ this.didChangeConnection?.fire({ integration: this, key: this.key, reason: 'disconnected' });
391
+ await this.providerOnDisconnect?.();
392
+ }
393
+
394
+ private skippedNonCloudReported = false;
395
+ @debug()
396
+ async syncCloudConnection(state: 'connected' | 'disconnected', forceSync: boolean): Promise<void> {
397
+ const scope = getScopedLogger();
398
+ // Initially the condition on `this._session.cloud` has been added here: https://github.com/gitkraken/vscode-gitlens/commit/e95e70c430bd162924cc3bd5c1e8ab90e6293449#diff-4213141a45cccaab7aa2e40028b155a87eb913b07388485831403e60ce5555e4R237
399
+ // I'm not sure about reasons, but it seems we want to replace it with the cloud session if it's connected.
400
+ // Gradually we'll stop having non-cloud sessions.
401
+ // However this is needed to be tested with PATs, e.g. with a GitLab PAT.
402
+ if (this._session?.cloud === false && state !== 'connected') {
403
+ if (this.id !== GitCloudHostIntegrationId.GitHub && !this.skippedNonCloudReported) {
404
+ this.ctx.hooks?.session?.onRefreshSkipped?.({
405
+ id: this.id,
406
+ reason: 'skip-non-cloud',
407
+ cloud: false,
408
+ });
409
+ this.skippedNonCloudReported = true;
410
+ }
411
+ return;
412
+ }
413
+
414
+ switch (state) {
415
+ case 'connected': {
416
+ const oldSession = this._session;
417
+ let resyncing = false;
418
+ if (forceSync) {
419
+ // Reset our stored session so that we get a new one from the cloud
420
+ const authProvider = await this.authenticationService.get(this.authProvider.id);
421
+ await authProvider.deleteSession(this.authProviderDescriptor);
422
+ // Reset the session and clear our "stay disconnected" flag
423
+ this._session = undefined;
424
+ await this.ctx.storage.deleteWorkspace(this.connectedKey);
425
+ resyncing = true;
426
+ } else {
427
+ // Only sync if we're not connected and not disabled and don't have pending errors
428
+ if (
429
+ this._session != null ||
430
+ this.requestExceptionCount > 0 ||
431
+ this.ctx.storage.getWorkspace(this.connectedKey) === false
432
+ ) {
433
+ return;
434
+ }
435
+
436
+ forceSync = true;
437
+ }
438
+
439
+ // sync option, rather than createIfNeeded, makes sure we don't call connectCloudIntegrations and open a gkdev window
440
+ // if there was no session or some problem fetching/refreshing the existing session from the cloud api
441
+ let newSession: ProviderAuthenticationSession | undefined;
442
+ let refetchFailed = false;
443
+ try {
444
+ newSession = await this.ensureSession({ sync: forceSync });
445
+ } catch (ex) {
446
+ // Not evidence the connection is gone (#5569). Also leaves `_session` as-is rather than
447
+ // latching null, so the next access can re-resolve it.
448
+ if (!isCancellationError(ex)) {
449
+ scope?.error(ex);
450
+ }
451
+ refetchFailed = true;
452
+ }
453
+
454
+ if (oldSession && newSession && newSession.accessToken !== oldSession.accessToken) {
455
+ this.resetRequestExceptionCount('all');
456
+ }
457
+
458
+ // The forced re-sync above deleted the cloud secret but kept the descriptor to avoid UI churn.
459
+ // Drop it only when the replacement fetch came back definitively empty, so a connection whose
460
+ // token is really gone is cleanly disconnected (#5497) while a healthy one survives a blip (#5569).
461
+ if (resyncing && newSession == null && !refetchFailed) {
462
+ const authProvider = await this.authenticationService.get(this.authProvider.id);
463
+ await authProvider.deleteSession(this.authProviderDescriptor, { preserveConfigured: false });
464
+ }
465
+
466
+ break;
467
+ }
468
+ case 'disconnected':
469
+ await this.disconnect({ silent: true });
470
+ break;
471
+ }
472
+ }
473
+
474
+ protected handleProviderException(
475
+ syncReqUsecase: SyncReqUsecase,
476
+ ex: Error,
477
+ options?: { scope?: ScopedLogger | undefined; silent?: boolean },
478
+ ): void {
479
+ if (isCancellationError(ex)) return;
480
+
481
+ options?.scope?.error(ex);
482
+
483
+ if (ex instanceof AuthenticationError && this._session?.cloud) {
484
+ if (!this.hasSessionSyncRequests()) {
485
+ this.requestSessionSyncForUsecase(syncReqUsecase);
486
+ this._session = {
487
+ ...this._session,
488
+ expiresAt: new Date(Date.now() - 1),
489
+ };
490
+ } else {
491
+ this.trackRequestException(options);
492
+ }
493
+ } else if (ex instanceof AuthenticationError || ex instanceof RequestClientError) {
494
+ this.trackRequestException(options);
495
+ }
496
+ }
497
+
498
+ private missingExpirityReported = false;
499
+ @gate()
500
+ protected async refreshSessionIfExpired(scope?: ScopedLogger): Promise<void> {
501
+ if (this._session?.expiresAt != null && this._session.expiresAt < new Date()) {
502
+ // The current session is expired, so get the latest from the cloud and refresh if needed
503
+ try {
504
+ await this.syncCloudConnection('connected', true);
505
+ } catch (ex) {
506
+ scope?.error(ex);
507
+ }
508
+ } else if (
509
+ this._session?.expiresAt == null &&
510
+ this.id !== GitCloudHostIntegrationId.GitHub &&
511
+ !this.missingExpirityReported
512
+ ) {
513
+ this.ctx.hooks?.session?.onRefreshSkipped?.({
514
+ id: this.id,
515
+ reason: 'missing-expiry',
516
+ cloud: this._session?.cloud,
517
+ });
518
+ this.missingExpirityReported = true;
519
+ }
520
+ }
521
+
522
+ @trace()
523
+ trackRequestException(options?: { silent?: boolean }): void {
524
+ this.requestExceptionCount++;
525
+
526
+ if (this.requestExceptionCount >= IntegrationBase.requestExceptionLimit && this._session !== null) {
527
+ if (!options?.silent) {
528
+ this.ctx.hooks?.ui?.onDisconnectedAfterTooManyFailures?.(this.name);
529
+ }
530
+ void this.disconnect({ currentSessionOnly: true });
531
+ }
532
+ }
533
+
534
+ @gate()
535
+ @trace({ exit: true })
536
+ async isConnected(): Promise<boolean> {
537
+ return (await this.getSession('integrations')) != null;
538
+ }
539
+
540
+ @gate()
541
+ private async ensureSession(
542
+ options:
543
+ | {
544
+ createIfNeeded?: boolean;
545
+ forceNewSession?: boolean;
546
+ sync?: never;
547
+ source?: Sources;
548
+ }
549
+ | {
550
+ createIfNeeded?: never;
551
+ forceNewSession?: never;
552
+ sync: boolean;
553
+ source?: Sources;
554
+ },
555
+ ): Promise<ProviderAuthenticationSession | undefined> {
556
+ const scope = getScopedLogger();
557
+
558
+ const { createIfNeeded, forceNewSession, source, sync } = options;
559
+ if (this._session != null) {
560
+ if (this.isSessionForIntegrationHost(this._session)) return this._session;
561
+
562
+ this._session = null;
563
+ }
564
+ if (this.ctx.config.isIntegrationsEnabled?.() === false) return undefined;
565
+
566
+ if (createIfNeeded || sync) {
567
+ await this.ctx.storage.deleteWorkspace(this.connectedKey);
568
+ } else if (this.ctx.storage.getWorkspace(this.connectedKey) === false) {
569
+ return undefined;
570
+ }
571
+
572
+ let session: ProviderAuthenticationSession | undefined | null;
573
+ try {
574
+ const authProvider = await this.authenticationService.get(this.authProvider.id);
575
+ session = await authProvider.getSession(
576
+ this.authProviderDescriptor,
577
+ sync
578
+ ? { sync: sync, source: source }
579
+ : {
580
+ createIfNeeded: createIfNeeded,
581
+ forceNewSession: forceNewSession,
582
+ source: source,
583
+ },
584
+ );
585
+
586
+ if (session?.expiresAt != null && session.expiresAt < new Date()) {
587
+ session = null;
588
+ }
589
+ if (session != null && !this.isSessionForIntegrationHost(session)) {
590
+ session = undefined;
591
+ }
592
+ } catch (ex) {
593
+ await this.ctx.storage.deleteWorkspace(this.connectedKey);
594
+
595
+ // Only interactive paths can prompt for consent, so a sync failure must reach the rethrow below.
596
+ if (!sync && ex instanceof Error && ex.message.includes('User did not consent')) {
597
+ return undefined;
598
+ }
599
+
600
+ // On a forced re-sync, propagate so syncCloudConnection can tell a failure from a definitive empty
601
+ // result (#5569); other callers keep swallowing to null so reads never throw.
602
+ if (sync) {
603
+ // Throwing skips the reset below, and a lingering count blocks the next non-forced sync.
604
+ this.smoothifyRequestExceptionCount();
605
+ throw ex;
606
+ }
607
+
608
+ session = null;
609
+ }
610
+
611
+ if (session === undefined && !createIfNeeded && !sync) {
612
+ await this.ctx.storage.deleteWorkspace(this.connectedKey);
613
+ }
614
+
615
+ this._session = session ?? null;
616
+ this.smoothifyRequestExceptionCount();
617
+
618
+ if (session != null) {
619
+ await this.ctx.storage.storeWorkspace(this.connectedKey, true);
620
+
621
+ queueMicrotask(() => {
622
+ this._onDidChange.fire();
623
+ this.didChangeConnection?.fire({ integration: this, key: this.key, reason: 'connected' });
624
+ // Fired detached, so there is no caller left to catch anything: every implementor is async, and
625
+ // a rejection would surface as a process-level unhandled rejection in the host. It is a
626
+ // best-effort warm-up, so swallow the failure with a warning instead.
627
+ void (async () => {
628
+ try {
629
+ await this.providerOnConnect?.();
630
+ } catch (ex) {
631
+ scope?.warn(
632
+ `Failed to run providerOnConnect for ${this.key}: ${ex instanceof Error ? ex.message : String(ex)}`,
633
+ );
634
+ }
635
+ })();
636
+ });
637
+ }
638
+
639
+ return session ?? undefined;
640
+ }
641
+
642
+ getIgnoreSSLErrors(): boolean | 'force' {
643
+ return this.authenticationService.ignoreSSLErrors(this);
644
+ }
645
+
646
+ async searchMyIssues(
647
+ resource?: ResourceDescriptor,
648
+ cancellation?: AbortSignal,
649
+ connectionId?: string,
650
+ ): Promise<IssueShape[] | undefined>;
651
+ async searchMyIssues(
652
+ resources?: ResourceDescriptor[],
653
+ cancellation?: AbortSignal,
654
+ connectionId?: string,
655
+ ): Promise<IssueShape[] | undefined>;
656
+ @trace()
657
+ async searchMyIssues(
658
+ resources?: ResourceDescriptor | ResourceDescriptor[],
659
+ cancellation?: AbortSignal,
660
+ connectionId?: string,
661
+ ): Promise<IssueShape[] | undefined> {
662
+ return (await this.searchMyIssuesResult(resources, cancellation, connectionId))?.value;
663
+ }
664
+
665
+ /**
666
+ * Result-returning core of {@link searchMyIssues}. Recovers thrown errors into `{ error }` so callers
667
+ * (e.g. the ProviderBackend account-wide issues read) can surface a per-provider warning instead of a
668
+ * silent empty result. Returns the normalized {@link IssueShape} (there is no raw account-wide issue read).
669
+ */
670
+ async searchMyIssuesResult(
671
+ resources?: ResourceDescriptor | ResourceDescriptor[],
672
+ cancellation?: AbortSignal,
673
+ connectionId?: string,
674
+ ): Promise<IntegrationResult<IssueShape[] | undefined>> {
675
+ const scope = getScopedLogger();
676
+ // `connectionId` targets a specific account (multi-account); omitted reads the primary.
677
+ const session = await this.resolveReadSession(connectionId, scope);
678
+ if (session == null) return undefined;
679
+
680
+ try {
681
+ const issues = await this.searchProviderMyIssues(
682
+ session,
683
+ resources != null ? (Array.isArray(resources) ? resources : [resources]) : undefined,
684
+ cancellation,
685
+ );
686
+ this.resetRequestExceptionCount('searchMyIssues');
687
+ return { value: issues };
688
+ } catch (ex) {
689
+ this.handleProviderException('searchMyIssues', ex, { scope: scope });
690
+ return { error: toError(ex) };
691
+ }
692
+ }
693
+
694
+ protected abstract searchProviderMyIssues(
695
+ session: ProviderAuthenticationSession,
696
+ resources?: ResourceDescriptor[],
697
+ cancellation?: AbortSignal,
698
+ ): Promise<IssueShape[] | undefined>;
699
+
700
+ /**
701
+ * Paging/truncation-aware variant of {@link searchProviderMyIssues}. The default wraps the normalized read
702
+ * as a complete single page; providers with native cursors or fan-out metadata override it.
703
+ */
704
+ protected async searchProviderMyIssuesWithTruncation(
705
+ session: ProviderAuthenticationSession,
706
+ resources?: ResourceDescriptor[],
707
+ cancellation?: AbortSignal,
708
+ _options?: SearchMyIssuesOptions,
709
+ ): Promise<AccountWideIssuesResult | undefined> {
710
+ // The default read has no assignee scoping to broaden, so `_options` is inert here; a provider whose
711
+ // account-wide read is user-scoped (GitHub/GitLab/Azure) overrides this and honors `includeAllAssignees`.
712
+ const values = await this.searchProviderMyIssues(session, resources, cancellation);
713
+ if (values == null) return undefined;
714
+ return { values: values, truncated: false };
715
+ }
716
+
717
+ /**
718
+ * Result-returning, truncation-aware account-wide issue read. Recovers thrown errors into `{ error }` and
719
+ * carries the `truncated` flag so the ProviderBackend facade can report an incomplete read honestly.
720
+ */
721
+ async searchMyIssuesWithTruncationResult(
722
+ resources?: ResourceDescriptor | ResourceDescriptor[],
723
+ cancellation?: AbortSignal,
724
+ connectionId?: string,
725
+ options?: SearchMyIssuesOptions,
726
+ ): Promise<IntegrationResult<AccountWideIssuesResult | undefined>> {
727
+ const scope = getScopedLogger();
728
+ const session = await this.resolveReadSession(connectionId, scope);
729
+ if (session == null) return undefined;
730
+
731
+ try {
732
+ const result = await this.searchProviderMyIssuesWithTruncation(
733
+ session,
734
+ resources != null ? (Array.isArray(resources) ? resources : [resources]) : undefined,
735
+ cancellation,
736
+ options,
737
+ );
738
+ this.resetRequestExceptionCount('searchMyIssues');
739
+ return { value: result };
740
+ } catch (ex) {
741
+ this.handleProviderException('searchMyIssues', ex, { scope: scope });
742
+ return { error: toError(ex) };
743
+ }
744
+ }
745
+
746
+ @trace()
747
+ async getLinkedIssueOrPullRequest(
748
+ resource: T,
749
+ link: { id: string; key: string },
750
+ options?: { expiryOverride?: boolean | number; type?: IssueOrPullRequestType },
751
+ ): Promise<IssueOrPullRequest | undefined> {
752
+ const scope = getScopedLogger();
753
+
754
+ const connected = this.maybeConnected ?? (await this.isConnected());
755
+ if (!connected) return undefined;
756
+
757
+ await this.refreshSessionIfExpired(scope);
758
+
759
+ const issueOrPR = this.ctx.cache.getIssueOrPullRequest(
760
+ link.key,
761
+ options?.type,
762
+ resource,
763
+ this,
764
+ () => ({
765
+ value: (async () => {
766
+ try {
767
+ const result = await this.getProviderLinkedIssueOrPullRequest(
768
+ this._session!,
769
+ resource,
770
+ link,
771
+ options?.type,
772
+ );
773
+ this.resetRequestExceptionCount('getIssueOrPullRequest');
774
+ return result;
775
+ } catch (ex) {
776
+ this.handleProviderException('getIssueOrPullRequest', ex, { scope: scope });
777
+ return undefined;
778
+ }
779
+ })(),
780
+ }),
781
+ options,
782
+ );
783
+ return issueOrPR;
784
+ }
785
+
786
+ protected abstract getProviderLinkedIssueOrPullRequest(
787
+ session: ProviderAuthenticationSession,
788
+ resource: T,
789
+ link: { id: string; key: string },
790
+ type: undefined | IssueOrPullRequestType,
791
+ ): Promise<IssueOrPullRequest | undefined>;
792
+
793
+ @trace()
794
+ async getIssue(
795
+ resource: T,
796
+ id: string,
797
+ options?: { expiryOverride?: boolean | number },
798
+ ): Promise<Issue | undefined> {
799
+ const scope = getScopedLogger();
800
+
801
+ const connected = this.maybeConnected ?? (await this.isConnected());
802
+ if (!connected) return undefined;
803
+
804
+ await this.refreshSessionIfExpired(scope);
805
+
806
+ const issue = this.ctx.cache.getIssue(
807
+ id,
808
+ resource,
809
+ this,
810
+ () => ({
811
+ value: (async () => {
812
+ try {
813
+ const result = await this.getProviderIssue(this._session!, resource, id);
814
+ this.resetRequestExceptionCount('getIssue');
815
+ return result;
816
+ } catch (ex) {
817
+ this.handleProviderException('getIssue', ex, { scope: scope });
818
+ return undefined;
819
+ }
820
+ })(),
821
+ }),
822
+ options,
823
+ );
824
+ return issue;
825
+ }
826
+
827
+ protected abstract getProviderIssue(
828
+ session: ProviderAuthenticationSession,
829
+ resource: T,
830
+ id: string,
831
+ ): Promise<Issue | undefined>;
832
+
833
+ async getCurrentAccount(options?: {
834
+ avatarSize?: number;
835
+ connectionId?: string;
836
+ expiryOverride?: boolean | number;
837
+ }): Promise<Account | undefined> {
838
+ const scope = getScopedLogger();
839
+ const { connectionId: requestedConnectionId, expiryOverride, ...opts } = options ?? {};
840
+ const connectionId = requestedConnectionId || undefined;
841
+ const session = await this.resolveReadSession(connectionId, scope);
842
+ if (session == null) return undefined;
843
+
844
+ const sessionFingerprint = this.getSessionFingerprint(session);
845
+
846
+ const currentAccount = await this.ctx.cache.getCurrentAccount(
847
+ this,
848
+
849
+ (cacheable: any) => ({
850
+ value: (async () => {
851
+ try {
852
+ const account = await this.getProviderCurrentAccount?.(session, opts);
853
+ this.resetRequestExceptionCount('getCurrentAccount');
854
+ return account;
855
+ } catch (ex) {
856
+ if (isCancellationError(ex)) {
857
+ cacheable.invalidate();
858
+ return undefined;
859
+ }
860
+
861
+ this.handleProviderException('getCurrentAccount', ex, { scope: scope });
862
+
863
+ // Invalidate the cache on error, except for auth errors
864
+ if (!(ex instanceof AuthenticationError)) {
865
+ cacheable.invalidate();
866
+ }
867
+
868
+ // Re-throw to the caller
869
+ throw ex;
870
+ }
871
+ })(),
872
+ }),
873
+ {
874
+ connectionId: connectionId,
875
+ expiryOverride: expiryOverride,
876
+ expireOnError: false,
877
+ etag: `${this.id}:${this.maybeConnected ?? false}:${sessionFingerprint}`,
878
+ },
879
+ );
880
+ return currentAccount;
881
+ }
882
+
883
+ protected getProviderCurrentAccount?(
884
+ session: ProviderAuthenticationSession,
885
+ options?: { avatarSize?: number },
886
+ ): Promise<Account | undefined>;
887
+
888
+ /**
889
+ * Resolves the account for a specific session/token — including connections other than the current
890
+ * primary (multi-account) — using this integration's provider API base URL and auth type. Returns
891
+ * undefined when the provider doesn't support account lookup. Uncached (callers cache per connection).
892
+ */
893
+ getProviderAccountForSession(session: ProviderAuthenticationSession): Promise<Account | undefined> {
894
+ return this.getProviderCurrentAccount?.(session) ?? Promise.resolve(undefined);
895
+ }
896
+
897
+ @trace()
898
+ async getPullRequest(resource: T, id: string): Promise<PullRequest | undefined> {
899
+ const scope = getScopedLogger();
900
+
901
+ const connected = this.maybeConnected ?? (await this.isConnected());
902
+ if (!connected) return undefined;
903
+
904
+ await this.refreshSessionIfExpired(scope);
905
+
906
+ const pr = await this.ctx.cache.getPullRequest(id, resource, this, () => ({
907
+ value: (async () => {
908
+ try {
909
+ const result = await this.getProviderPullRequest?.(this._session!, resource, id);
910
+ this.resetRequestExceptionCount('getPullRequest');
911
+ return result;
912
+ } catch (ex) {
913
+ this.handleProviderException('getPullRequest', ex, { scope: scope });
914
+ return undefined;
915
+ }
916
+ })(),
917
+ }));
918
+ return pr;
919
+ }
920
+
921
+ protected getProviderPullRequest?(
922
+ session: ProviderAuthenticationSession,
923
+ resource: T,
924
+ id: string,
925
+ ): Promise<PullRequest | undefined>;
926
+ }