@gitkraken/core-gitlens 0.5.110 → 0.5.112

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 (362) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/dist/git/cache.d.ts +111 -6
  3. package/dist/git/cache.d.ts.map +1 -1
  4. package/dist/git/cache.js +312 -43
  5. package/dist/git/cache.js.map +1 -1
  6. package/dist/git/context.d.ts +11 -0
  7. package/dist/git/context.d.ts.map +1 -1
  8. package/dist/git/context.js.map +1 -1
  9. package/dist/git/models/fileStatus.d.ts +1 -0
  10. package/dist/git/models/fileStatus.d.ts.map +1 -1
  11. package/dist/git/models/fileStatus.js +1 -0
  12. package/dist/git/models/fileStatus.js.map +1 -1
  13. package/dist/git/models/issue.d.ts +4 -0
  14. package/dist/git/models/issue.d.ts.map +1 -1
  15. package/dist/git/models/mergeConflicts.d.ts +2 -0
  16. package/dist/git/models/mergeConflicts.d.ts.map +1 -1
  17. package/dist/git/models/pullRequest.d.ts +38 -2
  18. package/dist/git/models/pullRequest.d.ts.map +1 -1
  19. package/dist/git/models/pullRequest.js +12 -1
  20. package/dist/git/models/pullRequest.js.map +1 -1
  21. package/dist/git/models/repository.d.ts +32 -5
  22. package/dist/git/models/repository.d.ts.map +1 -1
  23. package/dist/git/models/repository.js +58 -12
  24. package/dist/git/models/repository.js.map +1 -1
  25. package/dist/git/models/statusFile.d.ts.map +1 -1
  26. package/dist/git/models/statusFile.js +3 -0
  27. package/dist/git/models/statusFile.js.map +1 -1
  28. package/dist/git/providers/branches.d.ts +2 -0
  29. package/dist/git/providers/branches.d.ts.map +1 -1
  30. package/dist/git/providers/commits.d.ts +8 -0
  31. package/dist/git/providers/commits.d.ts.map +1 -1
  32. package/dist/git/providers/config.d.ts +19 -1
  33. package/dist/git/providers/config.d.ts.map +1 -1
  34. package/dist/git/providers/operations.d.ts +1 -0
  35. package/dist/git/providers/operations.d.ts.map +1 -1
  36. package/dist/git/providers/pausedOperations.d.ts +2 -0
  37. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  38. package/dist/git/providers/status.d.ts +1 -0
  39. package/dist/git/providers/status.d.ts.map +1 -1
  40. package/dist/git/utils/config.utils.d.ts +3 -0
  41. package/dist/git/utils/config.utils.d.ts.map +1 -0
  42. package/dist/git/utils/config.utils.js +8 -0
  43. package/dist/git/utils/config.utils.js.map +1 -0
  44. package/dist/git/utils/issue.utils.d.ts.map +1 -1
  45. package/dist/git/utils/issue.utils.js +2 -0
  46. package/dist/git/utils/issue.utils.js.map +1 -1
  47. package/dist/git/utils/pausedOperationStatus.utils.d.ts +14 -0
  48. package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
  49. package/dist/git/utils/pausedOperationStatus.utils.js +23 -0
  50. package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
  51. package/dist/git/utils/pullRequest.utils.d.ts +14 -1
  52. package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
  53. package/dist/git/utils/pullRequest.utils.js +31 -0
  54. package/dist/git/utils/pullRequest.utils.js.map +1 -1
  55. package/dist/git/watching/changeEvent.d.ts +6 -1
  56. package/dist/git/watching/changeEvent.d.ts.map +1 -1
  57. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  58. package/dist/git/watching/classifyChange.js +14 -1
  59. package/dist/git/watching/classifyChange.js.map +1 -1
  60. package/dist/git/watching/watchService.d.ts.map +1 -1
  61. package/dist/git/watching/watchService.js +18 -3
  62. package/dist/git/watching/watchService.js.map +1 -1
  63. package/dist/git/watching/watchSession.d.ts +8 -1
  64. package/dist/git/watching/watchSession.d.ts.map +1 -1
  65. package/dist/git/watching/watchSession.js +38 -6
  66. package/dist/git/watching/watchSession.js.map +1 -1
  67. package/dist/git/watching/watcherPatterns.d.ts +2 -2
  68. package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
  69. package/dist/git/watching/watcherPatterns.js +1 -1
  70. package/dist/git/watching/watcherPatterns.js.map +1 -1
  71. package/dist/git-cli/exec/git.d.ts +1 -1
  72. package/dist/git-cli/exec/git.d.ts.map +1 -1
  73. package/dist/git-cli/exec/git.js +13 -3
  74. package/dist/git-cli/exec/git.js.map +1 -1
  75. package/dist/git-cli/providers/branches.d.ts +19 -0
  76. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  77. package/dist/git-cli/providers/branches.js +282 -78
  78. package/dist/git-cli/providers/branches.js.map +1 -1
  79. package/dist/git-cli/providers/commits.d.ts +4 -0
  80. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  81. package/dist/git-cli/providers/commits.js +84 -11
  82. package/dist/git-cli/providers/commits.js.map +1 -1
  83. package/dist/git-cli/providers/config.d.ts +42 -0
  84. package/dist/git-cli/providers/config.d.ts.map +1 -1
  85. package/dist/git-cli/providers/config.js +186 -5
  86. package/dist/git-cli/providers/config.js.map +1 -1
  87. package/dist/git-cli/providers/contributors.d.ts.map +1 -1
  88. package/dist/git-cli/providers/contributors.js +1 -1
  89. package/dist/git-cli/providers/contributors.js.map +1 -1
  90. package/dist/git-cli/providers/graph.d.ts +2 -2
  91. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  92. package/dist/git-cli/providers/graph.js +27 -9
  93. package/dist/git-cli/providers/graph.js.map +1 -1
  94. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  95. package/dist/git-cli/providers/operations.js +40 -12
  96. package/dist/git-cli/providers/operations.js.map +1 -1
  97. package/dist/git-cli/providers/pausedOperations.d.ts +5 -0
  98. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  99. package/dist/git-cli/providers/pausedOperations.js +87 -16
  100. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  101. package/dist/git-cli/providers/refs.d.ts +5 -3
  102. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  103. package/dist/git-cli/providers/refs.js +33 -4
  104. package/dist/git-cli/providers/refs.js.map +1 -1
  105. package/dist/git-cli/providers/status.d.ts +1 -0
  106. package/dist/git-cli/providers/status.d.ts.map +1 -1
  107. package/dist/git-cli/providers/status.js +18 -3
  108. package/dist/git-cli/providers/status.js.map +1 -1
  109. package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
  110. package/dist/git-cli/providers/worktrees.js +4 -0
  111. package/dist/git-cli/providers/worktrees.js.map +1 -1
  112. package/dist/git-cli/service.d.ts.map +1 -1
  113. package/dist/git-cli/service.js.map +1 -1
  114. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +39 -1
  115. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
  116. package/dist/plus/agents/providers/claudeCodeProvider.js +978 -71
  117. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
  118. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +24 -2
  119. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
  120. package/dist/plus/agents/providers/claudeCodeTranscript.js +84 -9
  121. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
  122. package/dist/plus/agents/types.d.ts +37 -2
  123. package/dist/plus/agents/types.d.ts.map +1 -1
  124. package/dist/plus/agents/types.js +2 -0
  125. package/dist/plus/agents/types.js.map +1 -1
  126. package/dist/plus/ai/errors.d.ts +10 -0
  127. package/dist/plus/ai/errors.d.ts.map +1 -1
  128. package/dist/plus/ai/errors.js +29 -0
  129. package/dist/plus/ai/errors.js.map +1 -1
  130. package/dist/plus/ai/models/model.d.ts +4 -0
  131. package/dist/plus/ai/models/model.d.ts.map +1 -1
  132. package/dist/plus/ai/models/model.js +51 -6
  133. package/dist/plus/ai/models/model.js.map +1 -1
  134. package/dist/plus/ai/models/promptTemplates.d.ts +1 -1
  135. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  136. package/dist/plus/ai/models/provider.d.ts +60 -2
  137. package/dist/plus/ai/models/provider.d.ts.map +1 -1
  138. package/dist/plus/ai/prompts.d.ts +12 -0
  139. package/dist/plus/ai/prompts.d.ts.map +1 -1
  140. package/dist/plus/ai/prompts.js +177 -61
  141. package/dist/plus/ai/prompts.js.map +1 -1
  142. package/dist/plus/ai/providers/anthropicProvider.d.ts +10 -2
  143. package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
  144. package/dist/plus/ai/providers/anthropicProvider.js +139 -46
  145. package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
  146. package/dist/plus/ai/providers/deepSeekProvider.d.ts +2 -0
  147. package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
  148. package/dist/plus/ai/providers/deepSeekProvider.js +10 -21
  149. package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
  150. package/dist/plus/ai/providers/geminiProvider.d.ts +1 -0
  151. package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
  152. package/dist/plus/ai/providers/geminiProvider.js +19 -0
  153. package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
  154. package/dist/plus/ai/providers/gitkrakenProvider.d.ts +5 -1
  155. package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
  156. package/dist/plus/ai/providers/gitkrakenProvider.js +118 -3
  157. package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
  158. package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -0
  159. package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
  160. package/dist/plus/ai/providers/huggingFaceProvider.js +5 -0
  161. package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
  162. package/dist/plus/ai/providers/mistralProvider.d.ts +3 -1
  163. package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
  164. package/dist/plus/ai/providers/mistralProvider.js +99 -19
  165. package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
  166. package/dist/plus/ai/providers/ollamaProvider.d.ts +4 -3
  167. package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
  168. package/dist/plus/ai/providers/ollamaProvider.js +38 -3
  169. package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
  170. package/dist/plus/ai/providers/openAICompatibleProvider.d.ts +1 -0
  171. package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
  172. package/dist/plus/ai/providers/openAICompatibleProvider.js +4 -0
  173. package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
  174. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +154 -5
  175. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
  176. package/dist/plus/ai/providers/openAICompatibleProviderBase.js +259 -10
  177. package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
  178. package/dist/plus/ai/providers/openRouterProvider.d.ts +4 -0
  179. package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
  180. package/dist/plus/ai/providers/openRouterProvider.js +9 -0
  181. package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
  182. package/dist/plus/ai/providers/openaiProvider.d.ts +1 -0
  183. package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
  184. package/dist/plus/ai/providers/openaiProvider.js +1 -0
  185. package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
  186. package/dist/plus/ai/providers/responseFormatCache.d.ts +8 -0
  187. package/dist/plus/ai/providers/responseFormatCache.d.ts.map +1 -0
  188. package/dist/plus/ai/providers/responseFormatCache.js +25 -0
  189. package/dist/plus/ai/providers/responseFormatCache.js.map +1 -0
  190. package/dist/plus/ai/providers/xaiProvider.d.ts +1 -0
  191. package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
  192. package/dist/plus/ai/providers/xaiProvider.js +10 -1
  193. package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
  194. package/dist/plus/ai/utils/ai.utils.d.ts +3 -0
  195. package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
  196. package/dist/plus/ai/utils/ai.utils.js +13 -0
  197. package/dist/plus/ai/utils/ai.utils.js.map +1 -1
  198. package/dist/plus/ai/utils/results.utils.d.ts +16 -2
  199. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  200. package/dist/plus/ai/utils/results.utils.js +204 -28
  201. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  202. package/dist/plus/git-github/api/github.d.ts +55 -0
  203. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  204. package/dist/plus/git-github/api/github.js +177 -4
  205. package/dist/plus/git-github/api/github.js.map +1 -1
  206. package/dist/plus/git-github/models.d.ts +16 -0
  207. package/dist/plus/git-github/models.d.ts.map +1 -1
  208. package/dist/plus/git-github/models.js +29 -3
  209. package/dist/plus/git-github/models.js.map +1 -1
  210. package/dist/plus/git-github/providers/github/status.d.ts +1 -0
  211. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  212. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  213. package/dist/plus/integrations/context.d.ts +4 -0
  214. package/dist/plus/integrations/context.d.ts.map +1 -1
  215. package/dist/plus/integrations/index.d.ts.map +1 -1
  216. package/dist/plus/integrations/index.js +2 -0
  217. package/dist/plus/integrations/index.js.map +1 -1
  218. package/dist/plus/integrations/models/gitHostIntegration.d.ts +6 -3
  219. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
  220. package/dist/plus/integrations/models/gitHostIntegration.js +12 -2
  221. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  222. package/dist/plus/integrations/models/integration.d.ts +3 -1
  223. package/dist/plus/integrations/models/integration.d.ts.map +1 -1
  224. package/dist/plus/integrations/models/integration.js +2 -2
  225. package/dist/plus/integrations/models/integration.js.map +1 -1
  226. package/dist/plus/integrations/providers/accounts.d.ts.map +1 -1
  227. package/dist/plus/integrations/providers/accounts.js +4 -0
  228. package/dist/plus/integrations/providers/accounts.js.map +1 -1
  229. package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -1
  230. package/dist/plus/integrations/providers/azure/models.js +3 -0
  231. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  232. package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -1
  233. package/dist/plus/integrations/providers/bitbucket/models.js +1 -0
  234. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
  235. package/dist/plus/integrations/providers/github.d.ts +14 -2
  236. package/dist/plus/integrations/providers/github.d.ts.map +1 -1
  237. package/dist/plus/integrations/providers/github.js +55 -3
  238. package/dist/plus/integrations/providers/github.js.map +1 -1
  239. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
  240. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  241. package/dist/plus/integrations/providers/models.d.ts.map +1 -1
  242. package/dist/plus/integrations/providers/models.js +30 -4
  243. package/dist/plus/integrations/providers/models.js.map +1 -1
  244. package/dist/plus/integrations/reads/broaden.d.ts.map +1 -1
  245. package/dist/plus/integrations/reads/broaden.js +6 -1
  246. package/dist/plus/integrations/reads/broaden.js.map +1 -1
  247. package/dist/plus/integrations/reads/drains.d.ts.map +1 -1
  248. package/dist/plus/integrations/reads/drains.js +7 -4
  249. package/dist/plus/integrations/reads/drains.js.map +1 -1
  250. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -1
  251. package/dist/plus/integrations/reads/hierarchy.js +3 -1
  252. package/dist/plus/integrations/reads/hierarchy.js.map +1 -1
  253. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
  254. package/dist/plus/integrations/reads/issueTracker.js +8 -3
  255. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  256. package/dist/plus/integrations/reads/issues.d.ts.map +1 -1
  257. package/dist/plus/integrations/reads/issues.js +9 -4
  258. package/dist/plus/integrations/reads/issues.js.map +1 -1
  259. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -1
  260. package/dist/plus/integrations/reads/pullRequests.js +9 -4
  261. package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
  262. package/dist/utils/env/browser/base64.d.ts +1 -1
  263. package/dist/utils/env/browser/base64.d.ts.map +1 -1
  264. package/dist/utils/env/node/base64.d.ts +1 -1
  265. package/dist/utils/env/node/base64.d.ts.map +1 -1
  266. package/dist/utils/env/node/base64.js +2 -0
  267. package/dist/utils/env/node/base64.js.map +1 -1
  268. package/dist/utils/keys/chord.d.ts +52 -0
  269. package/dist/utils/keys/chord.d.ts.map +1 -0
  270. package/dist/utils/keys/chord.js +135 -0
  271. package/dist/utils/keys/chord.js.map +1 -0
  272. package/dist/utils/keys/keybinding.d.ts +53 -0
  273. package/dist/utils/keys/keybinding.d.ts.map +1 -0
  274. package/dist/utils/keys/keybinding.js +58 -0
  275. package/dist/utils/keys/keybinding.js.map +1 -0
  276. package/dist/utils/path.d.ts +11 -0
  277. package/dist/utils/path.d.ts.map +1 -1
  278. package/dist/utils/path.js +13 -0
  279. package/dist/utils/path.js.map +1 -1
  280. package/package.json +13 -5
  281. package/src/git/cache.ts +383 -47
  282. package/src/git/context.ts +11 -0
  283. package/src/git/models/fileStatus.ts +1 -0
  284. package/src/git/models/issue.ts +4 -0
  285. package/src/git/models/mergeConflicts.ts +3 -2
  286. package/src/git/models/pullRequest.ts +33 -1
  287. package/src/git/models/repository.ts +58 -17
  288. package/src/git/models/statusFile.ts +3 -0
  289. package/src/git/providers/branches.ts +6 -0
  290. package/src/git/providers/commits.ts +11 -0
  291. package/src/git/providers/config.ts +18 -0
  292. package/src/git/providers/operations.ts +1 -0
  293. package/src/git/providers/pausedOperations.ts +2 -0
  294. package/src/git/providers/status.ts +1 -0
  295. package/src/git/utils/config.utils.ts +8 -0
  296. package/src/git/utils/issue.utils.ts +2 -0
  297. package/src/git/utils/pausedOperationStatus.utils.ts +28 -0
  298. package/src/git/utils/pullRequest.utils.ts +36 -0
  299. package/src/git/watching/changeEvent.ts +6 -1
  300. package/src/git/watching/classifyChange.ts +15 -1
  301. package/src/git/watching/watchService.ts +20 -3
  302. package/src/git/watching/watchSession.ts +41 -6
  303. package/src/git/watching/watcherPatterns.ts +1 -1
  304. package/src/git-cli/exec/git.ts +13 -3
  305. package/src/git-cli/providers/branches.ts +384 -132
  306. package/src/git-cli/providers/commits.ts +106 -15
  307. package/src/git-cli/providers/config.ts +229 -8
  308. package/src/git-cli/providers/contributors.ts +5 -1
  309. package/src/git-cli/providers/graph.ts +26 -13
  310. package/src/git-cli/providers/operations.ts +45 -20
  311. package/src/git-cli/providers/pausedOperations.ts +109 -17
  312. package/src/git-cli/providers/refs.ts +33 -3
  313. package/src/git-cli/providers/status.ts +25 -4
  314. package/src/git-cli/providers/worktrees.ts +5 -0
  315. package/src/git-cli/service.ts +0 -1
  316. package/src/plus/agents/providers/claudeCodeProvider.ts +1130 -87
  317. package/src/plus/agents/providers/claudeCodeTranscript.ts +95 -9
  318. package/src/plus/agents/types.ts +46 -2
  319. package/src/plus/ai/errors.ts +30 -0
  320. package/src/plus/ai/models/model.ts +56 -6
  321. package/src/plus/ai/models/promptTemplates.ts +1 -1
  322. package/src/plus/ai/models/provider.ts +69 -2
  323. package/src/plus/ai/prompts.ts +186 -61
  324. package/src/plus/ai/providers/anthropicProvider.ts +155 -47
  325. package/src/plus/ai/providers/deepSeekProvider.ts +11 -21
  326. package/src/plus/ai/providers/geminiProvider.ts +19 -0
  327. package/src/plus/ai/providers/gitkrakenProvider.ts +126 -3
  328. package/src/plus/ai/providers/huggingFaceProvider.ts +6 -0
  329. package/src/plus/ai/providers/mistralProvider.ts +102 -19
  330. package/src/plus/ai/providers/ollamaProvider.ts +55 -4
  331. package/src/plus/ai/providers/openAICompatibleProvider.ts +5 -0
  332. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +360 -17
  333. package/src/plus/ai/providers/openRouterProvider.ts +17 -0
  334. package/src/plus/ai/providers/openaiProvider.ts +1 -0
  335. package/src/plus/ai/providers/responseFormatCache.ts +39 -0
  336. package/src/plus/ai/providers/xaiProvider.ts +10 -1
  337. package/src/plus/ai/utils/ai.utils.ts +14 -0
  338. package/src/plus/ai/utils/results.utils.ts +255 -31
  339. package/src/plus/git-github/api/github.ts +291 -7
  340. package/src/plus/git-github/models.ts +48 -2
  341. package/src/plus/git-github/providers/github/status.ts +1 -0
  342. package/src/plus/integrations/context.ts +4 -0
  343. package/src/plus/integrations/index.ts +2 -0
  344. package/src/plus/integrations/models/gitHostIntegration.ts +25 -2
  345. package/src/plus/integrations/models/integration.ts +23 -13
  346. package/src/plus/integrations/providers/accounts.ts +4 -0
  347. package/src/plus/integrations/providers/azure/models.ts +3 -0
  348. package/src/plus/integrations/providers/bitbucket/models.ts +1 -0
  349. package/src/plus/integrations/providers/github.ts +85 -1
  350. package/src/plus/integrations/providers/gitlab.ts +2 -10
  351. package/src/plus/integrations/providers/models.ts +36 -4
  352. package/src/plus/integrations/reads/broaden.ts +6 -1
  353. package/src/plus/integrations/reads/drains.ts +7 -4
  354. package/src/plus/integrations/reads/hierarchy.ts +3 -1
  355. package/src/plus/integrations/reads/issueTracker.ts +9 -3
  356. package/src/plus/integrations/reads/issues.ts +9 -4
  357. package/src/plus/integrations/reads/pullRequests.ts +9 -4
  358. package/src/utils/env/browser/base64.ts +1 -1
  359. package/src/utils/env/node/base64.ts +3 -1
  360. package/src/utils/keys/chord.ts +184 -0
  361. package/src/utils/keys/keybinding.ts +116 -0
  362. package/src/utils/path.ts +14 -0
@@ -16,7 +16,7 @@ import { getPullRequestComparator } from '../../../git/utils/pullRequest.utils.j
16
16
  import { createRevisionRange, getRevisionRangeParts, isRevisionRange, isSha, } from '../../../git/utils/revision.utils.js';
17
17
  import { chunk } from '../../../utils/array.js';
18
18
  import { base64 } from '../../../utils/base64.js';
19
- import { CancellationError } from '../../../utils/cancellation.js';
19
+ import { CancellationError, isCancellationError } from '../../../utils/cancellation.js';
20
20
  import { trace } from '../../../utils/decorators/log.js';
21
21
  import { Emitter } from '../../../utils/event.js';
22
22
  import { uniqueBy } from '../../../utils/iterable.js';
@@ -125,6 +125,42 @@ title
125
125
  updatedAt
126
126
  url
127
127
  `;
128
+ /**
129
+ * Stacked-pull-request selections, appended to a pull request's selection set rather than baked into
130
+ * the fragments below: GitHub Enterprise Server schemas lag github.com, and selecting `stack` there
131
+ * fails the entire query with "Field 'stack' doesn't exist on type 'PullRequest'" — which would take
132
+ * every PR feature down with it, not just stacks. Always add these via `gqlPullRequestStackFragmentFor`.
133
+ */
134
+ const gqlPullRequestStackFragment = `
135
+ stack {
136
+ id
137
+ number
138
+ size
139
+ baseRefName
140
+ }
141
+ stackEntry {
142
+ position
143
+ }
144
+ `;
145
+ function gqlPullRequestStackFragmentFor(options) {
146
+ return isGitHubDotCom(options) ? gqlPullRequestStackFragment : '';
147
+ }
148
+ /**
149
+ * A 409 means a merge request is already in flight and carries its ticket, so it resumes rather than fails.
150
+ *
151
+ * The body has to be dug out of `original`: `requestCore` routes every 4xx through `handleRequestError`,
152
+ * which re-wraps octokit's `RequestError` in a `RequestClientError` carrying only `message` and `original`.
153
+ */
154
+ function getAsyncMergeUuidFromConflict(ex) {
155
+ const err = (RequestClientError.is(ex) ? ex.original : ex);
156
+ if (err?.status !== 409)
157
+ return undefined;
158
+ return err.response?.data?.details?.uuid;
159
+ }
160
+ const asyncMergePollIntervalMs = 2000;
161
+ /** A stack merges one layer at a time and GitHub only promises "a few minutes", so the ceiling is
162
+ * generous — giving up early would report a failure for a merge still in progress. */
163
+ const maxAsyncMergePolls = 300;
128
164
  const gqlPullRequestLiteFragment = `
129
165
  ${gqlIssueOrPullRequestFragment}
130
166
  author {
@@ -189,6 +225,7 @@ assignees(first: 25) {
189
225
  url
190
226
  }
191
227
  }
228
+ changedFiles
192
229
  checksUrl
193
230
  deletions
194
231
  mergeable
@@ -218,6 +255,7 @@ reviewRequests(first: 25) {
218
255
  }
219
256
  }
220
257
  commits(last: 1) {
258
+ totalCount
221
259
  nodes {
222
260
  commit {
223
261
  statusCheckRollup {
@@ -295,6 +333,7 @@ export class GitHubApi {
295
333
  try {
296
334
  const query = `query getCurrentAccount($avatarSize: Int) {
297
335
  viewer {
336
+ databaseId
298
337
  name
299
338
  email
300
339
  login
@@ -306,7 +345,10 @@ export class GitHubApi {
306
345
  return undefined;
307
346
  return {
308
347
  provider: provider,
309
- id: rsp.viewer.login,
348
+ // `id` is the provider's own id, as it is for every other provider, and `username` the handle
349
+ // filters and viewer matching key on. Falls back to the login only when GitHub omits the
350
+ // database id, which leaves the two equal rather than leaving `id` empty.
351
+ id: rsp.viewer.databaseId != null ? String(rsp.viewer.databaseId) : rsp.viewer.login,
310
352
  name: rsp.viewer.name ?? undefined,
311
353
  email: rsp.viewer.email ?? undefined,
312
354
  // If we are GitHub Enterprise, we may need to convert the avatar URL since it might require authentication
@@ -603,6 +645,7 @@ export class GitHubApi {
603
645
  repository(name: $repo, owner: $owner) {
604
646
  pullRequest(number: $number) {
605
647
  ${gqlPullRequestLiteFragment}
648
+ ${gqlPullRequestStackFragmentFor(options)}
606
649
  }
607
650
  }
608
651
  }`;
@@ -638,6 +681,7 @@ export class GitHubApi {
638
681
  associatedPullRequests(first: $limit, orderBy: {field: UPDATED_AT, direction: DESC}, states: $include) {
639
682
  nodes {
640
683
  ${gqlPullRequestLiteFragment}
684
+ ${gqlPullRequestStackFragmentFor(options)}
641
685
  }
642
686
  }
643
687
  }
@@ -683,6 +727,7 @@ export class GitHubApi {
683
727
  associatedPullRequests(first: 2, orderBy: {field: UPDATED_AT, direction: DESC}) {
684
728
  nodes {
685
729
  ${gqlPullRequestLiteFragment}
730
+ ${gqlPullRequestStackFragmentFor(options)}
686
731
  }
687
732
  }
688
733
  }
@@ -1998,6 +2043,17 @@ export class GitHubApi {
1998
2043
  return promise;
1999
2044
  }
2000
2045
  async request(provider, token, route, options, scope, cancellation) {
2046
+ return (await this.requestCore(provider, token, route, options, scope, cancellation));
2047
+ }
2048
+ /**
2049
+ * REST call for routes `@octokit/types` doesn't describe yet — currently the stacked-pull-request
2050
+ * merge APIs, which are in public preview and absent from the generated endpoint map. Prefer
2051
+ * `request` for anything typed.
2052
+ */
2053
+ async requestPreview(provider, token, route, options, scope, cancellation) {
2054
+ return (await this.requestCore(provider, token, route, options, scope, cancellation));
2055
+ }
2056
+ async requestCore(provider, token, route, options, scope, cancellation) {
2001
2057
  const { accessToken } = token;
2002
2058
  try {
2003
2059
  let signal;
@@ -2010,7 +2066,7 @@ export class GitHubApi {
2010
2066
  // Retry transient gateway/network failures on idempotent reads only
2011
2067
  const method = route.split(' ', 1)[0].toUpperCase();
2012
2068
  const retryable = method === 'GET' || method === 'HEAD';
2013
- return (await this.requestWithRetries(() => this.config.wrapForForcedInsecureSSL(provider?.getIgnoreSSLErrors() ?? false, () => this.getDefaults(accessToken, request)(route, options)), retryable, signal, scope));
2069
+ return await this.requestWithRetries(() => this.config.wrapForForcedInsecureSSL(provider?.getIgnoreSSLErrors() ?? false, () => this.getDefaults(accessToken, request)(route, options)), retryable, signal, scope);
2014
2070
  }
2015
2071
  catch (ex) {
2016
2072
  if (ex instanceof RequestError || ex.name === 'AbortError') {
@@ -2215,6 +2271,7 @@ export class GitHubApi {
2215
2271
  nodes {
2216
2272
  ...on PullRequest {
2217
2273
  ${options?.summary ? gqlPullRequestLiteFragment : gqlPullRequestFragment}
2274
+ ${gqlPullRequestStackFragmentFor(options)}
2218
2275
  }
2219
2276
  }
2220
2277
  }
@@ -2843,6 +2900,7 @@ export class GitHubApi {
2843
2900
  nodes {
2844
2901
  ... on PullRequest {
2845
2902
  ${gqlPullRequestFragment}
2903
+ ${gqlPullRequestStackFragmentFor(options)}
2846
2904
  }
2847
2905
  }
2848
2906
  }`);
@@ -2954,6 +3012,7 @@ export class GitHubApi {
2954
3012
  nodes {
2955
3013
  ...on PullRequest {
2956
3014
  ${gqlPullRequestFragment}
3015
+ ${gqlPullRequestStackFragmentFor(options)}
2957
3016
  }
2958
3017
  }
2959
3018
  }
@@ -2996,6 +3055,98 @@ export class GitHubApi {
2996
3055
  throw this.handleException(ex, provider, scope);
2997
3056
  }
2998
3057
  }
3058
+ /**
3059
+ * Every stack in the repository, each with its members bottom to top.
3060
+ *
3061
+ * One request regardless of how many pull requests are involved — which is what makes it the right
3062
+ * shape for list surfaces, whose pull requests arrive through the shared providers API and so carry no
3063
+ * stack membership of their own. Callers join the result by pull request number.
3064
+ *
3065
+ * A `404` means the repository isn't enrolled in the stacked-pull-requests preview; that's reported as
3066
+ * `undefined` rather than an error, since "no stacks" and "not available" both mean nothing to show.
3067
+ */
3068
+ async getRepositoryStacks(provider, token, owner, repo, options, cancellation) {
3069
+ const scope = getScopedLogger();
3070
+ try {
3071
+ const rsp = await this.requestPreview(provider, token, 'GET /repos/{owner}/{repo}/stacks', { owner: owner, repo: repo, baseUrl: options?.baseUrl }, scope, cancellation);
3072
+ return rsp.data;
3073
+ }
3074
+ catch (ex) {
3075
+ if (isCancellationError(ex))
3076
+ throw ex;
3077
+ Logger.warn(scope, `Unable to list stacks for ${owner}/${repo}: ${ex}`);
3078
+ return undefined;
3079
+ }
3080
+ }
3081
+ /**
3082
+ * Merges a stacked pull request, and with it every layer below it.
3083
+ *
3084
+ * Stacks cannot go through `mergePullRequest` — GitHub rejects stacked pull requests on the legacy
3085
+ * synchronous merge endpoints and mutations. The replacement is asynchronous: submit, then poll a
3086
+ * ticket until it reaches a terminal state.
3087
+ */
3088
+ async mergeStackedPullRequest(provider, token, owner, repo, pullNumber, expectedSourceSha, options, cancellation) {
3089
+ const scope = getScopedLogger();
3090
+ try {
3091
+ let uuid;
3092
+ try {
3093
+ const submitted = await this.requestPreview(provider, token, 'PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge-async', {
3094
+ owner: owner,
3095
+ repo: repo,
3096
+ pull_number: pullNumber,
3097
+ sha: expectedSourceSha,
3098
+ merge_method: options?.mergeMethod,
3099
+ baseUrl: options?.baseUrl,
3100
+ }, scope, cancellation);
3101
+ // Already merged or rejected outright — nothing to poll for. `enqueued` lands via the merge
3102
+ // queue, which can take several merge groups to settle, so it's transitional like `pending`.
3103
+ if (submitted.data.status !== 'pending' && submitted.data.status !== 'enqueued') {
3104
+ if (submitted.data.status === 'failed') {
3105
+ Logger.warn(scope, `Stacked merge refused: ${submitted.data.details?.message ?? 'no reason given'}`);
3106
+ }
3107
+ return submitted.data.status === 'merged';
3108
+ }
3109
+ uuid = submitted.data.details?.uuid;
3110
+ }
3111
+ catch (ex) {
3112
+ // A merge request is already in flight (a retry, or a double-click) — adopt its ticket and
3113
+ // poll that instead of reporting a failure for a merge that is actually running.
3114
+ uuid = getAsyncMergeUuidFromConflict(ex);
3115
+ if (uuid == null)
3116
+ throw ex;
3117
+ }
3118
+ if (uuid == null)
3119
+ return false;
3120
+ // The stack merges server-side one layer at a time, so this can take a while. Poll on a
3121
+ // fixed interval and give up rather than hang forever if the ticket never settles.
3122
+ for (let attempt = 0; attempt < maxAsyncMergePolls; attempt++) {
3123
+ if (cancellation?.aborted)
3124
+ throw new CancellationError();
3125
+ await new Promise(resolve => setTimeout(resolve, asyncMergePollIntervalMs));
3126
+ const polled = await this.requestPreview(provider, token, 'GET /repos/{owner}/{repo}/pulls/{pull_number}/merge-async/{uuid}', {
3127
+ owner: owner,
3128
+ repo: repo,
3129
+ pull_number: pullNumber,
3130
+ uuid: uuid,
3131
+ baseUrl: options?.baseUrl,
3132
+ }, scope, cancellation);
3133
+ if (polled.data.status === 'pending' || polled.data.status === 'enqueued')
3134
+ continue;
3135
+ if (polled.data.status === 'failed') {
3136
+ Logger.warn(scope, `Stacked merge failed: ${polled.data.details?.message ?? 'no reason given'}`);
3137
+ }
3138
+ return polled.data.status === 'merged';
3139
+ }
3140
+ Logger.warn(scope, `Timed out waiting for stacked merge of ${owner}/${repo}#${pullNumber}`);
3141
+ return false;
3142
+ }
3143
+ catch (ex) {
3144
+ if (isCancellationError(ex))
3145
+ throw ex;
3146
+ Logger.error(ex, scope);
3147
+ throw this.handleException(ex, provider, scope);
3148
+ }
3149
+ }
2999
3150
  async mergePullRequest(provider, token, nodeId, expectedSourceSha, options, cancellation) {
3000
3151
  const scope = getScopedLogger();
3001
3152
  let githubMergeStrategy;
@@ -3031,7 +3182,7 @@ export class GitHubApi {
3031
3182
  mergeMethod: githubMergeStrategy,
3032
3183
  baseUrl: options?.baseUrl,
3033
3184
  }, scope, cancellation);
3034
- return rsp?.pullRequest?.id === nodeId;
3185
+ return rsp?.mergePullRequest?.pullRequest?.id === nodeId;
3035
3186
  }
3036
3187
  catch (ex) {
3037
3188
  throw this.handleException(ex, provider, scope);
@@ -3342,6 +3493,28 @@ __decorate([
3342
3493
  __decorate([
3343
3494
  trace({ args: (provider, token) => ({ provider: provider.name, token: `<token:${token.microHash}>` }) })
3344
3495
  ], GitHubApi.prototype, "searchPullRequests", null);
3496
+ __decorate([
3497
+ trace({
3498
+ args: (provider, token, owner, repo) => ({
3499
+ provider: provider.name,
3500
+ token: `<token:${token.microHash}>`,
3501
+ owner: owner,
3502
+ repo: repo,
3503
+ }),
3504
+ })
3505
+ ], GitHubApi.prototype, "getRepositoryStacks", null);
3506
+ __decorate([
3507
+ trace({
3508
+ args: (provider, token, owner, repo, pullNumber, expectedSourceSha) => ({
3509
+ provider: provider.name,
3510
+ token: `<token:${token.microHash}>`,
3511
+ owner: owner,
3512
+ repo: repo,
3513
+ pullNumber: pullNumber,
3514
+ expectedSourceSha: expectedSourceSha,
3515
+ }),
3516
+ })
3517
+ ], GitHubApi.prototype, "mergeStackedPullRequest", null);
3345
3518
  __decorate([
3346
3519
  trace({
3347
3520
  args: (provider, token, nodeId, expectedSourceSha) => ({