@gitkraken/core-gitlens 0.5.109 → 0.5.111

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 (416) hide show
  1. package/CHANGELOG.md +48 -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 +119 -2
  18. package/dist/git/models/pullRequest.d.ts.map +1 -1
  19. package/dist/git/models/pullRequest.js +27 -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 +24 -1
  52. package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
  53. package/dist/git/utils/pullRequest.utils.js +71 -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 +92 -4
  203. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  204. package/dist/plus/git-github/api/github.js +324 -20
  205. package/dist/plus/git-github/api/github.js.map +1 -1
  206. package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts +27 -1
  207. package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts.map +1 -1
  208. package/dist/plus/git-github/api/pullRequestSearchQuery.js +73 -6
  209. package/dist/plus/git-github/api/pullRequestSearchQuery.js.map +1 -1
  210. package/dist/plus/git-github/models.d.ts +33 -5
  211. package/dist/plus/git-github/models.d.ts.map +1 -1
  212. package/dist/plus/git-github/models.js +43 -4
  213. package/dist/plus/git-github/models.js.map +1 -1
  214. package/dist/plus/git-github/providers/github/status.d.ts +1 -0
  215. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  216. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  217. package/dist/plus/integrations/context.d.ts +4 -0
  218. package/dist/plus/integrations/context.d.ts.map +1 -1
  219. package/dist/plus/integrations/index.d.ts.map +1 -1
  220. package/dist/plus/integrations/index.js +2 -0
  221. package/dist/plus/integrations/index.js.map +1 -1
  222. package/dist/plus/integrations/integrationService.d.ts +16 -1
  223. package/dist/plus/integrations/integrationService.d.ts.map +1 -1
  224. package/dist/plus/integrations/integrationService.js +9 -1
  225. package/dist/plus/integrations/integrationService.js.map +1 -1
  226. package/dist/plus/integrations/manager.d.ts +45 -5
  227. package/dist/plus/integrations/manager.d.ts.map +1 -1
  228. package/dist/plus/integrations/models/gitHostIntegration.d.ts +18 -3
  229. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
  230. package/dist/plus/integrations/models/gitHostIntegration.js +30 -2
  231. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  232. package/dist/plus/integrations/models/integration.d.ts +4 -2
  233. package/dist/plus/integrations/models/integration.d.ts.map +1 -1
  234. package/dist/plus/integrations/models/integration.js +2 -2
  235. package/dist/plus/integrations/models/integration.js.map +1 -1
  236. package/dist/plus/integrations/providerFilters.d.ts +1 -1
  237. package/dist/plus/integrations/providerFilters.d.ts.map +1 -1
  238. package/dist/plus/integrations/providers/accounts.d.ts +6 -0
  239. package/dist/plus/integrations/providers/accounts.d.ts.map +1 -0
  240. package/dist/plus/integrations/providers/accounts.js +34 -0
  241. package/dist/plus/integrations/providers/accounts.js.map +1 -0
  242. package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -1
  243. package/dist/plus/integrations/providers/azure/models.js +3 -0
  244. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  245. package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -1
  246. package/dist/plus/integrations/providers/bitbucket/models.js +1 -0
  247. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
  248. package/dist/plus/integrations/providers/github.d.ts +23 -2
  249. package/dist/plus/integrations/providers/github.d.ts.map +1 -1
  250. package/dist/plus/integrations/providers/github.js +169 -138
  251. package/dist/plus/integrations/providers/github.js.map +1 -1
  252. package/dist/plus/integrations/providers/gitlab.d.ts +9 -0
  253. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
  254. package/dist/plus/integrations/providers/gitlab.js +23 -4
  255. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  256. package/dist/plus/integrations/providers/models.d.ts +14 -32
  257. package/dist/plus/integrations/providers/models.d.ts.map +1 -1
  258. package/dist/plus/integrations/providers/models.js +66 -109
  259. package/dist/plus/integrations/providers/models.js.map +1 -1
  260. package/dist/plus/integrations/providers/pullRequestReviews.d.ts +50 -0
  261. package/dist/plus/integrations/providers/pullRequestReviews.d.ts.map +1 -0
  262. package/dist/plus/integrations/providers/pullRequestReviews.js +99 -0
  263. package/dist/plus/integrations/providers/pullRequestReviews.js.map +1 -0
  264. package/dist/plus/integrations/reads/broaden.d.ts.map +1 -1
  265. package/dist/plus/integrations/reads/broaden.js +6 -1
  266. package/dist/plus/integrations/reads/broaden.js.map +1 -1
  267. package/dist/plus/integrations/reads/counts.d.ts +55 -0
  268. package/dist/plus/integrations/reads/counts.d.ts.map +1 -1
  269. package/dist/plus/integrations/reads/counts.js +146 -2
  270. package/dist/plus/integrations/reads/counts.js.map +1 -1
  271. package/dist/plus/integrations/reads/drains.d.ts +7 -1
  272. package/dist/plus/integrations/reads/drains.d.ts.map +1 -1
  273. package/dist/plus/integrations/reads/drains.js +20 -6
  274. package/dist/plus/integrations/reads/drains.js.map +1 -1
  275. package/dist/plus/integrations/reads/filters.d.ts.map +1 -1
  276. package/dist/plus/integrations/reads/filters.js +22 -0
  277. package/dist/plus/integrations/reads/filters.js.map +1 -1
  278. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -1
  279. package/dist/plus/integrations/reads/hierarchy.js +3 -1
  280. package/dist/plus/integrations/reads/hierarchy.js.map +1 -1
  281. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
  282. package/dist/plus/integrations/reads/issueTracker.js +8 -3
  283. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  284. package/dist/plus/integrations/reads/issues.d.ts.map +1 -1
  285. package/dist/plus/integrations/reads/issues.js +9 -4
  286. package/dist/plus/integrations/reads/issues.js.map +1 -1
  287. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -1
  288. package/dist/plus/integrations/reads/pullRequests.js +9 -4
  289. package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
  290. package/dist/plus/integrations/reads/searchPullRequests.d.ts +4 -3
  291. package/dist/plus/integrations/reads/searchPullRequests.d.ts.map +1 -1
  292. package/dist/plus/integrations/reads/searchPullRequests.js +6 -4
  293. package/dist/plus/integrations/reads/searchPullRequests.js.map +1 -1
  294. package/dist/plus/integrations/reads/sweeps.js +1 -1
  295. package/dist/plus/integrations/reads/sweeps.js.map +1 -1
  296. package/dist/plus/integrations/reads/warnings.d.ts +2 -2
  297. package/dist/plus/integrations/reads/warnings.d.ts.map +1 -1
  298. package/dist/plus/integrations/reads/warnings.js +11 -2
  299. package/dist/plus/integrations/reads/warnings.js.map +1 -1
  300. package/dist/plus/integrations/results.d.ts +6 -1
  301. package/dist/plus/integrations/results.d.ts.map +1 -1
  302. package/dist/plus/integrations/results.js.map +1 -1
  303. package/dist/utils/env/browser/base64.d.ts +1 -1
  304. package/dist/utils/env/browser/base64.d.ts.map +1 -1
  305. package/dist/utils/env/node/base64.d.ts +1 -1
  306. package/dist/utils/env/node/base64.d.ts.map +1 -1
  307. package/dist/utils/env/node/base64.js +2 -0
  308. package/dist/utils/env/node/base64.js.map +1 -1
  309. package/dist/utils/keys/chord.d.ts +52 -0
  310. package/dist/utils/keys/chord.d.ts.map +1 -0
  311. package/dist/utils/keys/chord.js +135 -0
  312. package/dist/utils/keys/chord.js.map +1 -0
  313. package/dist/utils/keys/keybinding.d.ts +53 -0
  314. package/dist/utils/keys/keybinding.d.ts.map +1 -0
  315. package/dist/utils/keys/keybinding.js +58 -0
  316. package/dist/utils/keys/keybinding.js.map +1 -0
  317. package/dist/utils/path.d.ts +11 -0
  318. package/dist/utils/path.d.ts.map +1 -1
  319. package/dist/utils/path.js +13 -0
  320. package/dist/utils/path.js.map +1 -1
  321. package/docs/integrations.md +76 -10
  322. package/docs/kepler-read-api-parity.md +9 -0
  323. package/package.json +13 -5
  324. package/src/git/cache.ts +383 -47
  325. package/src/git/context.ts +11 -0
  326. package/src/git/models/fileStatus.ts +1 -0
  327. package/src/git/models/issue.ts +4 -0
  328. package/src/git/models/mergeConflicts.ts +3 -2
  329. package/src/git/models/pullRequest.ts +117 -1
  330. package/src/git/models/repository.ts +58 -17
  331. package/src/git/models/statusFile.ts +3 -0
  332. package/src/git/providers/branches.ts +6 -0
  333. package/src/git/providers/commits.ts +11 -0
  334. package/src/git/providers/config.ts +18 -0
  335. package/src/git/providers/operations.ts +1 -0
  336. package/src/git/providers/pausedOperations.ts +2 -0
  337. package/src/git/providers/status.ts +1 -0
  338. package/src/git/utils/config.utils.ts +8 -0
  339. package/src/git/utils/issue.utils.ts +2 -0
  340. package/src/git/utils/pausedOperationStatus.utils.ts +28 -0
  341. package/src/git/utils/pullRequest.utils.ts +86 -0
  342. package/src/git/watching/changeEvent.ts +6 -1
  343. package/src/git/watching/classifyChange.ts +15 -1
  344. package/src/git/watching/watchService.ts +20 -3
  345. package/src/git/watching/watchSession.ts +41 -6
  346. package/src/git/watching/watcherPatterns.ts +1 -1
  347. package/src/git-cli/exec/git.ts +13 -3
  348. package/src/git-cli/providers/branches.ts +384 -132
  349. package/src/git-cli/providers/commits.ts +106 -15
  350. package/src/git-cli/providers/config.ts +229 -8
  351. package/src/git-cli/providers/contributors.ts +5 -1
  352. package/src/git-cli/providers/graph.ts +26 -13
  353. package/src/git-cli/providers/operations.ts +45 -20
  354. package/src/git-cli/providers/pausedOperations.ts +109 -17
  355. package/src/git-cli/providers/refs.ts +33 -3
  356. package/src/git-cli/providers/status.ts +25 -4
  357. package/src/git-cli/providers/worktrees.ts +5 -0
  358. package/src/git-cli/service.ts +0 -1
  359. package/src/plus/agents/providers/claudeCodeProvider.ts +1130 -87
  360. package/src/plus/agents/providers/claudeCodeTranscript.ts +95 -9
  361. package/src/plus/agents/types.ts +46 -2
  362. package/src/plus/ai/errors.ts +30 -0
  363. package/src/plus/ai/models/model.ts +56 -6
  364. package/src/plus/ai/models/promptTemplates.ts +1 -1
  365. package/src/plus/ai/models/provider.ts +69 -2
  366. package/src/plus/ai/prompts.ts +186 -61
  367. package/src/plus/ai/providers/anthropicProvider.ts +155 -47
  368. package/src/plus/ai/providers/deepSeekProvider.ts +11 -21
  369. package/src/plus/ai/providers/geminiProvider.ts +19 -0
  370. package/src/plus/ai/providers/gitkrakenProvider.ts +126 -3
  371. package/src/plus/ai/providers/huggingFaceProvider.ts +6 -0
  372. package/src/plus/ai/providers/mistralProvider.ts +102 -19
  373. package/src/plus/ai/providers/ollamaProvider.ts +55 -4
  374. package/src/plus/ai/providers/openAICompatibleProvider.ts +5 -0
  375. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +360 -17
  376. package/src/plus/ai/providers/openRouterProvider.ts +17 -0
  377. package/src/plus/ai/providers/openaiProvider.ts +1 -0
  378. package/src/plus/ai/providers/responseFormatCache.ts +39 -0
  379. package/src/plus/ai/providers/xaiProvider.ts +10 -1
  380. package/src/plus/ai/utils/ai.utils.ts +14 -0
  381. package/src/plus/ai/utils/results.utils.ts +255 -31
  382. package/src/plus/git-github/api/github.ts +467 -23
  383. package/src/plus/git-github/api/pullRequestSearchQuery.ts +81 -7
  384. package/src/plus/git-github/models.ts +77 -7
  385. package/src/plus/git-github/providers/github/status.ts +1 -0
  386. package/src/plus/integrations/context.ts +4 -0
  387. package/src/plus/integrations/index.ts +2 -0
  388. package/src/plus/integrations/integrationService.ts +25 -2
  389. package/src/plus/integrations/manager.ts +50 -5
  390. package/src/plus/integrations/models/gitHostIntegration.ts +54 -2
  391. package/src/plus/integrations/models/integration.ts +24 -13
  392. package/src/plus/integrations/providerFilters.ts +6 -1
  393. package/src/plus/integrations/providers/accounts.ts +38 -0
  394. package/src/plus/integrations/providers/azure/models.ts +3 -0
  395. package/src/plus/integrations/providers/bitbucket/models.ts +1 -0
  396. package/src/plus/integrations/providers/github.ts +218 -145
  397. package/src/plus/integrations/providers/gitlab.ts +30 -20
  398. package/src/plus/integrations/providers/models.ts +99 -127
  399. package/src/plus/integrations/providers/pullRequestReviews.ts +122 -0
  400. package/src/plus/integrations/reads/broaden.ts +6 -1
  401. package/src/plus/integrations/reads/counts.ts +273 -2
  402. package/src/plus/integrations/reads/drains.ts +19 -6
  403. package/src/plus/integrations/reads/filters.ts +22 -0
  404. package/src/plus/integrations/reads/hierarchy.ts +3 -1
  405. package/src/plus/integrations/reads/issueTracker.ts +9 -3
  406. package/src/plus/integrations/reads/issues.ts +9 -4
  407. package/src/plus/integrations/reads/pullRequests.ts +9 -4
  408. package/src/plus/integrations/reads/searchPullRequests.ts +12 -4
  409. package/src/plus/integrations/reads/sweeps.ts +1 -1
  410. package/src/plus/integrations/reads/warnings.ts +12 -1
  411. package/src/plus/integrations/results.ts +6 -1
  412. package/src/utils/env/browser/base64.ts +1 -1
  413. package/src/utils/env/node/base64.ts +3 -1
  414. package/src/utils/keys/chord.ts +184 -0
  415. package/src/utils/keys/keybinding.ts +116 -0
  416. package/src/utils/path.ts +14 -0
@@ -14,7 +14,7 @@ export function base64(data: string | Uint8Array): string {
14
14
  return globalThis.btoa(output);
15
15
  }
16
16
 
17
- export function fromBase64(s: string): Uint8Array {
17
+ export function fromBase64(s: string): Uint8Array<ArrayBuffer> {
18
18
  const decoded = globalThis.atob(s);
19
19
 
20
20
  const len = decoded.length;
@@ -4,7 +4,9 @@ export function base64(data: string | Uint8Array): string {
4
4
  return Buffer.from(data).toString('base64');
5
5
  }
6
6
 
7
- export function fromBase64(s: string): Uint8Array {
7
+ // Returns `Uint8Array<ArrayBuffer>` rather than a bare `Uint8Array` (which widens to `ArrayBufferLike` and
8
+ // admits `SharedArrayBuffer`) so the result stays assignable to `BufferSource` — what Web Crypto accepts.
9
+ export function fromBase64(s: string): Uint8Array<ArrayBuffer> {
8
10
  return Buffer.from(s, 'base64');
9
11
  }
10
12
 
@@ -0,0 +1,184 @@
1
+ /** Structural subset of a keyboard event; lets this module stay DOM-free. */
2
+ export type KeyEventLike = {
3
+ key: string;
4
+ code: string;
5
+ ctrlKey: boolean;
6
+ altKey: boolean;
7
+ shiftKey: boolean;
8
+ metaKey: boolean;
9
+ };
10
+
11
+ export type ChordModifier = 'mod' | 'ctrl' | 'alt' | 'shift' | 'meta';
12
+
13
+ /** A single parsed key combination, ready to match against key events. */
14
+ export type Chord = {
15
+ /** The original token, e.g. `'ArrowUp'`, `'c'`, `'KeyM'`. */
16
+ token: string;
17
+ /** Whether the token is matched against `event.code` (layout-independent) or `event.key`. */
18
+ matchOn: 'key' | 'code';
19
+ ctrl: boolean;
20
+ alt: boolean;
21
+ meta: boolean;
22
+ /**
23
+ * `true`/`false` when shift is a declared part of the chord; `'implicit'` when the token is a
24
+ * single printable character whose shifted form already encodes the shift state (e.g. `'?'`),
25
+ * so `event.shiftKey` is ignored at match time.
26
+ */
27
+ shift: boolean | 'implicit';
28
+ };
29
+
30
+ const codeTokenPattern = /^(?:Key[A-Z]|Digit[0-9])$/;
31
+
32
+ const readableTokens = new Map<string, string>([
33
+ ['ArrowUp', '↑'],
34
+ ['ArrowDown', '↓'],
35
+ ['ArrowLeft', '←'],
36
+ ['ArrowRight', '→'],
37
+ ['Escape', 'Esc'],
38
+ [' ', 'Space'],
39
+ ['PageUp', 'PgUp'],
40
+ ['PageDown', 'PgDn'],
41
+ ]);
42
+
43
+ /**
44
+ * Parses a `+`-separated key combination such as `'mod+c'` or `'alt+KeyM'` into a {@link Chord}.
45
+ * Throws on malformed input. `isMac` resolves the `'mod'` modifier (`meta` on mac, `ctrl` otherwise).
46
+ */
47
+ export function parseChord(input: string, isMac: boolean): Chord {
48
+ if (!input) throw new Error(`Invalid key chord '${input}': empty input`);
49
+
50
+ const parts = input.split('+');
51
+
52
+ // A trailing/leading '+' (literal plus as the token) produces an empty part adjacent to a
53
+ // non-empty one; a lone '+' would split to ['', ''] and is handled by the empty-token check below.
54
+ if (parts.length > 1 && parts.at(-1) === '') {
55
+ throw new Error(`Invalid key chord '${input}': trailing '+'`);
56
+ }
57
+
58
+ const modifiers = parts.slice(0, -1);
59
+ const token = parts.at(-1)!;
60
+
61
+ if (token === '') throw new Error(`Invalid key chord '${input}': empty token`);
62
+
63
+ let mod = false;
64
+ let ctrl = false;
65
+ let alt = false;
66
+ let shift = false;
67
+ let meta = false;
68
+
69
+ for (const modifier of modifiers) {
70
+ switch (modifier) {
71
+ case 'mod':
72
+ if (mod) throw new Error(`Invalid key chord '${input}': duplicate modifier 'mod'`);
73
+
74
+ mod = true;
75
+ break;
76
+ case 'ctrl':
77
+ if (ctrl) throw new Error(`Invalid key chord '${input}': duplicate modifier 'ctrl'`);
78
+
79
+ ctrl = true;
80
+ break;
81
+ case 'alt':
82
+ if (alt) throw new Error(`Invalid key chord '${input}': duplicate modifier 'alt'`);
83
+
84
+ alt = true;
85
+ break;
86
+ case 'shift':
87
+ if (shift) throw new Error(`Invalid key chord '${input}': duplicate modifier 'shift'`);
88
+
89
+ shift = true;
90
+ break;
91
+ case 'meta':
92
+ if (meta) throw new Error(`Invalid key chord '${input}': duplicate modifier 'meta'`);
93
+
94
+ meta = true;
95
+ break;
96
+ default:
97
+ throw new Error(`Invalid key chord '${input}': unknown modifier '${modifier}'`);
98
+ }
99
+ }
100
+
101
+ if (mod && ctrl) throw new Error(`Invalid key chord '${input}': 'mod' conflicts with explicit 'ctrl'`);
102
+
103
+ if (mod && meta) throw new Error(`Invalid key chord '${input}': 'mod' conflicts with explicit 'meta'`);
104
+
105
+ if (mod) {
106
+ if (isMac) {
107
+ meta = true;
108
+ } else {
109
+ ctrl = true;
110
+ }
111
+ }
112
+
113
+ const matchOn: Chord['matchOn'] = codeTokenPattern.test(token) ? 'code' : 'key';
114
+
115
+ let resolvedShift: Chord['shift'];
116
+ if (matchOn === 'code') {
117
+ resolvedShift = shift;
118
+ } else if ([...token].length === 1) {
119
+ if (shift) {
120
+ throw new Error(`Invalid key chord '${input}': 'shift' cannot combine with a single-character token`);
121
+ }
122
+
123
+ resolvedShift = 'implicit';
124
+ } else {
125
+ resolvedShift = shift;
126
+ }
127
+
128
+ return { token: token, matchOn: matchOn, ctrl: ctrl, alt: alt, meta: meta, shift: resolvedShift };
129
+ }
130
+
131
+ /** Tests whether a key event matches a parsed chord — all declared modifiers must match exactly. */
132
+ export function matchesChord(chord: Chord, e: KeyEventLike): boolean {
133
+ if (chord.ctrl !== e.ctrlKey) return false;
134
+ if (chord.alt !== e.altKey) return false;
135
+ if (chord.meta !== e.metaKey) return false;
136
+
137
+ if (chord.shift !== 'implicit' && chord.shift !== e.shiftKey) return false;
138
+
139
+ return chord.matchOn === 'code' ? e.code === chord.token : e.key === chord.token;
140
+ }
141
+
142
+ export type ChordSymbols = { ctrl: string; alt: string; shift: string; meta: string };
143
+
144
+ /** One display chip: a modifier (renderers style these differently) or the chord's own key. */
145
+ export type ChordPart = { text: string; kind: 'mod' | 'key' };
146
+
147
+ /**
148
+ * Formats a chord into an ordered list of typed display chips (ctrl → alt → shift → meta → token).
149
+ * An implicit-shift chord contributes no shift chip — its token already spells the shifted form.
150
+ */
151
+ export function formatChordParts(chord: Chord, symbols: ChordSymbols): ChordPart[] {
152
+ const parts: ChordPart[] = [];
153
+
154
+ if (chord.ctrl) {
155
+ parts.push({ text: symbols.ctrl, kind: 'mod' });
156
+ }
157
+
158
+ if (chord.alt) {
159
+ parts.push({ text: symbols.alt, kind: 'mod' });
160
+ }
161
+
162
+ if (chord.shift === true) {
163
+ parts.push({ text: symbols.shift, kind: 'mod' });
164
+ }
165
+
166
+ if (chord.meta) {
167
+ parts.push({ text: symbols.meta, kind: 'mod' });
168
+ }
169
+
170
+ parts.push({ text: formatToken(chord), kind: 'key' });
171
+
172
+ return parts;
173
+ }
174
+
175
+ /** Formats a chord into an ordered list of display chips (ctrl → alt → shift → meta → token). */
176
+ export function formatChord(chord: Chord, symbols: ChordSymbols): string[] {
177
+ return formatChordParts(chord, symbols).map(part => part.text);
178
+ }
179
+
180
+ function formatToken(chord: Chord): string {
181
+ if (chord.matchOn === 'code') return chord.token.replace(/^(?:Key|Digit)/, '');
182
+
183
+ return readableTokens.get(chord.token) ?? chord.token;
184
+ }
@@ -0,0 +1,116 @@
1
+ import type { Chord, KeyEventLike } from './chord.js';
2
+ import { matchesChord, parseChord } from './chord.js';
3
+
4
+ /**
5
+ * One item in a sheet row's key rail or subline, in a mini-grammar the renderer resolves:
6
+ * - a bare chord (`'mod+KeyC'`, `'ArrowUp'`) — parsed and formatted into chips
7
+ * - `'raw:X'` — literal `X` in a key chip
8
+ * - `'mod:X'` — literal `X` in a modifier chip
9
+ * - `'text:X'` — literal `X` as plain inline text, verbatim (leading/trailing spaces included)
10
+ * - `'sep:X'` — literal `X` as a muted separator glyph
11
+ */
12
+ export type SheetDisplayEntry = string;
13
+
14
+ export type SheetEntry = {
15
+ group: string;
16
+ label: string;
17
+ order?: number;
18
+ keysOverride?: readonly SheetDisplayEntry[];
19
+ /** Second line rendered under the label — same display grammar as `keysOverride`. */
20
+ subline?: readonly SheetDisplayEntry[];
21
+ };
22
+
23
+ export type KeyBindingDescriptor<TScope extends string, TEvent extends KeyEventLike = KeyEventLike> = {
24
+ keys: readonly string[];
25
+ scope: TScope;
26
+ order?: number;
27
+ when?: readonly ((e: TEvent) => boolean)[];
28
+ run: (e: TEvent) => boolean;
29
+ sheet: SheetEntry | 'hidden';
30
+ };
31
+
32
+ /** A registered binding: descriptor + parsed chords (parse once at registration). */
33
+ export type KeyBinding<TScope extends string, TEvent extends KeyEventLike = KeyEventLike> = KeyBindingDescriptor<
34
+ TScope,
35
+ TEvent
36
+ > & { chords: readonly Chord[] };
37
+
38
+ export type OverlayEntry = {
39
+ id: string;
40
+ /**
41
+ * Close the surface. Returns false to decline (surface decides it wasn't actually open/closable),
42
+ * letting resolution continue to the next overlay down, then the focus chain.
43
+ */
44
+ onClose: () => boolean;
45
+ };
46
+
47
+ /**
48
+ * Pure candidate selection: which bindings could handle this event, in resolution order —
49
+ * scope chain innermost→outermost (chain[0] = innermost), `order` ascending within a scope
50
+ * (undefined order sorts last), registration (array) order as the final tiebreak. Does NOT
51
+ * evaluate `when` guards or call `run` — the dispatcher does that so scope guards can sit between.
52
+ */
53
+ export function resolveKeydown<TScope extends string, TEvent extends KeyEventLike>(
54
+ bindings: readonly KeyBinding<TScope, TEvent>[],
55
+ scopeChain: readonly TScope[],
56
+ e: KeyEventLike,
57
+ ): KeyBinding<TScope, TEvent>[] {
58
+ const matches: { binding: KeyBinding<TScope, TEvent>; scopeIndex: number; registrationIndex: number }[] = [];
59
+
60
+ for (let i = 0; i < bindings.length; i++) {
61
+ const binding = bindings[i];
62
+
63
+ const scopeIndex = scopeChain.indexOf(binding.scope);
64
+ if (scopeIndex === -1) continue;
65
+
66
+ if (!binding.chords.some(chord => matchesChord(chord, e))) continue;
67
+
68
+ matches.push({ binding: binding, scopeIndex: scopeIndex, registrationIndex: i });
69
+ }
70
+
71
+ matches.sort((a, b) => {
72
+ if (a.scopeIndex !== b.scopeIndex) return a.scopeIndex - b.scopeIndex;
73
+
74
+ const orderA = a.binding.order;
75
+ const orderB = b.binding.order;
76
+ if (orderA !== orderB) {
77
+ if (orderA == null) return 1;
78
+ if (orderB == null) return -1;
79
+
80
+ return orderA - orderB;
81
+ }
82
+
83
+ return a.registrationIndex - b.registrationIndex;
84
+ });
85
+
86
+ return matches.map(m => m.binding);
87
+ }
88
+
89
+ /**
90
+ * Pure overlay resolution for a close request (Esc): returns the entries to try, top of stack
91
+ * first. The dispatcher calls onClose top-down until one returns true.
92
+ */
93
+ export function resolveOverlayClose(stack: readonly OverlayEntry[]): OverlayEntry[] {
94
+ return [...stack].reverse();
95
+ }
96
+
97
+ /** Parses a descriptor's keys into chords, throwing on the first malformed key. */
98
+ export function registerBinding<TScope extends string, TEvent extends KeyEventLike = KeyEventLike>(
99
+ descriptor: KeyBindingDescriptor<TScope, TEvent>,
100
+ isMac: boolean,
101
+ ): KeyBinding<TScope, TEvent> {
102
+ const chords: Chord[] = [];
103
+
104
+ for (const key of descriptor.keys) {
105
+ try {
106
+ chords.push(parseChord(key, isMac));
107
+ } catch (ex) {
108
+ const reason = ex instanceof Error ? ex.message : String(ex);
109
+ throw new Error(`Invalid key binding for scope '${descriptor.scope}', key '${key}': ${reason}`, {
110
+ cause: ex,
111
+ });
112
+ }
113
+ }
114
+
115
+ return { ...descriptor, chords: chords };
116
+ }
package/src/utils/path.ts CHANGED
@@ -93,6 +93,20 @@ export function stripFolderGlob(path: string): string {
93
93
  return isFolderGlob(path) ? path.slice(0, -2) : path;
94
94
  }
95
95
 
96
+ /**
97
+ * Trims the trailing slash git puts on an untracked directory that is itself a repository
98
+ * (`nested-repo/`), which it reports as one entry because it can't recurse past the embedded
99
+ * repository boundary. Status is fetched with `-u` (= `all`), so ordinary untracked directories are
100
+ * recursed into and a trailing slash identifies the nested-repository case unambiguously.
101
+ *
102
+ * Deliberately not {@link normalizePath}, which also rewrites backslashes: git paths always use `/`,
103
+ * so a backslash here is a literal character in a (POSIX-legal) filename, and rewriting it would
104
+ * split the name across folders wherever the result is used to derive a display name or a tree path.
105
+ */
106
+ export function trimTrailingSlash(path: string): string {
107
+ return path.endsWith('/') ? path.slice(0, -1) : path;
108
+ }
109
+
96
110
  export function getBestPath(pathOrUri: string): string {
97
111
  if (!hasScheme(pathOrUri)) return normalizePath(pathOrUri);
98
112