@gitkraken/core-gitlens 0.5.113 → 0.5.115

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 (349) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/dist/git/cache.d.ts +4 -0
  3. package/dist/git/cache.d.ts.map +1 -1
  4. package/dist/git/cache.js +33 -0
  5. package/dist/git/cache.js.map +1 -1
  6. package/dist/git/context.d.ts +10 -0
  7. package/dist/git/context.d.ts.map +1 -1
  8. package/dist/git/context.js.map +1 -1
  9. package/dist/git/errors.d.ts +6 -3
  10. package/dist/git/errors.d.ts.map +1 -1
  11. package/dist/git/errors.js +9 -1
  12. package/dist/git/errors.js.map +1 -1
  13. package/dist/git/features.d.ts +1 -1
  14. package/dist/git/features.d.ts.map +1 -1
  15. package/dist/git/features.js +38 -0
  16. package/dist/git/features.js.map +1 -1
  17. package/dist/git/gitHealth.d.ts +153 -0
  18. package/dist/git/gitHealth.d.ts.map +1 -0
  19. package/dist/git/gitHealth.js +353 -0
  20. package/dist/git/gitHealth.js.map +1 -0
  21. package/dist/git/models/search.d.ts +6 -3
  22. package/dist/git/models/search.d.ts.map +1 -1
  23. package/dist/git/models/search.js +5 -1
  24. package/dist/git/models/search.js.map +1 -1
  25. package/dist/git/parsers/diffParser.d.ts +8 -2
  26. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  27. package/dist/git/parsers/diffParser.js +27 -4
  28. package/dist/git/parsers/diffParser.js.map +1 -1
  29. package/dist/git/providers/config.d.ts +36 -3
  30. package/dist/git/providers/config.d.ts.map +1 -1
  31. package/dist/git/providers/graph.d.ts +9 -0
  32. package/dist/git/providers/graph.d.ts.map +1 -1
  33. package/dist/git/providers/maintenance.d.ts +222 -0
  34. package/dist/git/providers/maintenance.d.ts.map +1 -0
  35. package/dist/git/providers/maintenance.js +20 -0
  36. package/dist/git/providers/maintenance.js.map +1 -0
  37. package/dist/git/providers/operations.d.ts +10 -0
  38. package/dist/git/providers/operations.d.ts.map +1 -1
  39. package/dist/git/providers/pausedOperations.d.ts +3 -0
  40. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  41. package/dist/git/providers/provider.d.ts +2 -0
  42. package/dist/git/providers/provider.d.ts.map +1 -1
  43. package/dist/git/providers/tags.d.ts +3 -0
  44. package/dist/git/providers/tags.d.ts.map +1 -1
  45. package/dist/git/repositoryService.d.ts +1 -0
  46. package/dist/git/repositoryService.d.ts.map +1 -1
  47. package/dist/git/repositoryService.js.map +1 -1
  48. package/dist/git/run.types.d.ts +8 -0
  49. package/dist/git/run.types.d.ts.map +1 -1
  50. package/dist/git/service.js +3 -0
  51. package/dist/git/service.js.map +1 -1
  52. package/dist/git/utils/search.utils.d.ts.map +1 -1
  53. package/dist/git/utils/search.utils.js +112 -5
  54. package/dist/git/utils/search.utils.js.map +1 -1
  55. package/dist/git/watching/watchService.d.ts +3 -0
  56. package/dist/git/watching/watchService.d.ts.map +1 -1
  57. package/dist/git/watching/watchService.js +8 -0
  58. package/dist/git/watching/watchService.js.map +1 -1
  59. package/dist/git-cli/cliGitProvider.d.ts +11 -0
  60. package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
  61. package/dist/git-cli/cliGitProvider.js +12 -0
  62. package/dist/git-cli/cliGitProvider.js.map +1 -1
  63. package/dist/git-cli/exec/git.d.ts +23 -1
  64. package/dist/git-cli/exec/git.d.ts.map +1 -1
  65. package/dist/git-cli/exec/git.js +83 -8
  66. package/dist/git-cli/exec/git.js.map +1 -1
  67. package/dist/git-cli/exec/gitQueue.d.ts +2 -0
  68. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  69. package/dist/git-cli/exec/gitQueue.js +19 -17
  70. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  71. package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
  72. package/dist/git-cli/parsers/logParser.js +4 -1
  73. package/dist/git-cli/parsers/logParser.js.map +1 -1
  74. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  75. package/dist/git-cli/providers/blame.js +4 -7
  76. package/dist/git-cli/providers/blame.js.map +1 -1
  77. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  78. package/dist/git-cli/providers/branches.js +13 -3
  79. package/dist/git-cli/providers/branches.js.map +1 -1
  80. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  81. package/dist/git-cli/providers/commits.js +34 -3
  82. package/dist/git-cli/providers/commits.js.map +1 -1
  83. package/dist/git-cli/providers/config.d.ts +27 -0
  84. package/dist/git-cli/providers/config.d.ts.map +1 -1
  85. package/dist/git-cli/providers/config.js +31 -6
  86. package/dist/git-cli/providers/config.js.map +1 -1
  87. package/dist/git-cli/providers/graph.d.ts +8 -0
  88. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  89. package/dist/git-cli/providers/graph.js +85 -6
  90. package/dist/git-cli/providers/graph.js.map +1 -1
  91. package/dist/git-cli/providers/maintenance.d.ts +306 -0
  92. package/dist/git-cli/providers/maintenance.d.ts.map +1 -0
  93. package/dist/git-cli/providers/maintenance.js +2129 -0
  94. package/dist/git-cli/providers/maintenance.js.map +1 -0
  95. package/dist/git-cli/providers/operations.d.ts +1 -0
  96. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  97. package/dist/git-cli/providers/operations.js +8 -0
  98. package/dist/git-cli/providers/operations.js.map +1 -1
  99. package/dist/git-cli/providers/pausedOperations.d.ts +1 -0
  100. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  101. package/dist/git-cli/providers/pausedOperations.js +1 -1
  102. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  103. package/dist/git-cli/providers/tags.d.ts +3 -0
  104. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  105. package/dist/git-cli/providers/tags.js +23 -1
  106. package/dist/git-cli/providers/tags.js.map +1 -1
  107. package/dist/plus/agents/agentCapabilities.d.ts +77 -0
  108. package/dist/plus/agents/agentCapabilities.d.ts.map +1 -0
  109. package/dist/plus/agents/agentCapabilities.js +197 -0
  110. package/dist/plus/agents/agentCapabilities.js.map +1 -0
  111. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +77 -13
  112. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
  113. package/dist/plus/agents/providers/claudeCodeTranscript.js +263 -55
  114. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
  115. package/dist/plus/agents/providers/{claudeCodeProvider.d.ts → gkAgentProvider.d.ts} +52 -19
  116. package/dist/plus/agents/providers/gkAgentProvider.d.ts.map +1 -0
  117. package/dist/plus/agents/providers/{claudeCodeProvider.js → gkAgentProvider.js} +935 -262
  118. package/dist/plus/agents/providers/gkAgentProvider.js.map +1 -0
  119. package/dist/plus/agents/types.d.ts +113 -35
  120. package/dist/plus/agents/types.d.ts.map +1 -1
  121. package/dist/plus/agents/types.js +7 -4
  122. package/dist/plus/agents/types.js.map +1 -1
  123. package/dist/plus/ai/models/promptTemplates.d.ts +1 -1
  124. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  125. package/dist/plus/ai/prompts.d.ts +4 -0
  126. package/dist/plus/ai/prompts.d.ts.map +1 -1
  127. package/dist/plus/ai/prompts.js +59 -4
  128. package/dist/plus/ai/prompts.js.map +1 -1
  129. package/dist/plus/git-github/api/github.d.ts +44 -1
  130. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  131. package/dist/plus/git-github/api/github.js +355 -62
  132. package/dist/plus/git-github/api/github.js.map +1 -1
  133. package/dist/plus/git-github/api/issueSearchQuery.d.ts +13 -0
  134. package/dist/plus/git-github/api/issueSearchQuery.d.ts.map +1 -1
  135. package/dist/plus/git-github/api/issueSearchQuery.js +41 -0
  136. package/dist/plus/git-github/api/issueSearchQuery.js.map +1 -1
  137. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  138. package/dist/plus/git-github/providers/github/blame.js +2 -1
  139. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  140. package/dist/plus/integrations/collectionMetadata.d.ts +2 -0
  141. package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -1
  142. package/dist/plus/integrations/collectionMetadata.js +17 -1
  143. package/dist/plus/integrations/collectionMetadata.js.map +1 -1
  144. package/dist/plus/integrations/context.d.ts +4 -1
  145. package/dist/plus/integrations/context.d.ts.map +1 -1
  146. package/dist/plus/integrations/index.d.ts +1 -0
  147. package/dist/plus/integrations/index.d.ts.map +1 -1
  148. package/dist/plus/integrations/integrationService.d.ts +20 -1
  149. package/dist/plus/integrations/integrationService.d.ts.map +1 -1
  150. package/dist/plus/integrations/integrationService.js +12 -4
  151. package/dist/plus/integrations/integrationService.js.map +1 -1
  152. package/dist/plus/integrations/manager.d.ts +48 -0
  153. package/dist/plus/integrations/manager.d.ts.map +1 -1
  154. package/dist/plus/integrations/models/gitHostIntegration.d.ts +53 -26
  155. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
  156. package/dist/plus/integrations/models/gitHostIntegration.js +123 -47
  157. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  158. package/dist/plus/integrations/models/integration.d.ts +10 -1
  159. package/dist/plus/integrations/models/integration.d.ts.map +1 -1
  160. package/dist/plus/integrations/models/integration.js +52 -19
  161. package/dist/plus/integrations/models/integration.js.map +1 -1
  162. package/dist/plus/integrations/models/issueCache.d.ts +16 -0
  163. package/dist/plus/integrations/models/issueCache.d.ts.map +1 -0
  164. package/dist/plus/integrations/models/issueCache.js +9 -0
  165. package/dist/plus/integrations/models/issueCache.js.map +1 -0
  166. package/dist/plus/integrations/models/issueReads.d.ts +13 -0
  167. package/dist/plus/integrations/models/issueReads.d.ts.map +1 -1
  168. package/dist/plus/integrations/models/issuesIntegration.d.ts +11 -13
  169. package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -1
  170. package/dist/plus/integrations/models/issuesIntegration.js +15 -1
  171. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
  172. package/dist/plus/integrations/providers/azureDevOps.d.ts +3 -5
  173. package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -1
  174. package/dist/plus/integrations/providers/azureDevOps.js +9 -8
  175. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  176. package/dist/plus/integrations/providers/bitbucket-server.d.ts +3 -5
  177. package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -1
  178. package/dist/plus/integrations/providers/bitbucket-server.js +2 -2
  179. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -1
  180. package/dist/plus/integrations/providers/bitbucket.d.ts +3 -5
  181. package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -1
  182. package/dist/plus/integrations/providers/bitbucket.js +2 -1
  183. package/dist/plus/integrations/providers/bitbucket.js.map +1 -1
  184. package/dist/plus/integrations/providers/github.d.ts +12 -5
  185. package/dist/plus/integrations/providers/github.d.ts.map +1 -1
  186. package/dist/plus/integrations/providers/github.js +10 -3
  187. package/dist/plus/integrations/providers/github.js.map +1 -1
  188. package/dist/plus/integrations/providers/gitlab.d.ts +3 -5
  189. package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
  190. package/dist/plus/integrations/providers/gitlab.js +2 -2
  191. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  192. package/dist/plus/integrations/providers/jira.d.ts +3 -7
  193. package/dist/plus/integrations/providers/jira.d.ts.map +1 -1
  194. package/dist/plus/integrations/providers/jira.js +35 -22
  195. package/dist/plus/integrations/providers/jira.js.map +1 -1
  196. package/dist/plus/integrations/providers/jiraIssueByKey.d.ts +7 -0
  197. package/dist/plus/integrations/providers/jiraIssueByKey.d.ts.map +1 -0
  198. package/dist/plus/integrations/providers/jiraIssueByKey.js +102 -0
  199. package/dist/plus/integrations/providers/jiraIssueByKey.js.map +1 -0
  200. package/dist/plus/integrations/providers/linear.d.ts +3 -7
  201. package/dist/plus/integrations/providers/linear.d.ts.map +1 -1
  202. package/dist/plus/integrations/providers/linear.js +23 -22
  203. package/dist/plus/integrations/providers/linear.js.map +1 -1
  204. package/dist/plus/integrations/providers/models.d.ts +3 -1
  205. package/dist/plus/integrations/providers/models.d.ts.map +1 -1
  206. package/dist/plus/integrations/providers/models.js +10 -4
  207. package/dist/plus/integrations/providers/models.js.map +1 -1
  208. package/dist/plus/integrations/providers/providerErrors.d.ts +7 -0
  209. package/dist/plus/integrations/providers/providerErrors.d.ts.map +1 -0
  210. package/dist/plus/integrations/providers/providerErrors.js +91 -0
  211. package/dist/plus/integrations/providers/providerErrors.js.map +1 -0
  212. package/dist/plus/integrations/providers/providersApi.d.ts +3 -2
  213. package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -1
  214. package/dist/plus/integrations/providers/providersApi.js +18 -52
  215. package/dist/plus/integrations/providers/providersApi.js.map +1 -1
  216. package/dist/plus/integrations/providers/trello.d.ts +2 -7
  217. package/dist/plus/integrations/providers/trello.d.ts.map +1 -1
  218. package/dist/plus/integrations/providers/trello.js +3 -1
  219. package/dist/plus/integrations/providers/trello.js.map +1 -1
  220. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +2 -0
  221. package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -1
  222. package/dist/plus/integrations/providers/utils/providerPaging.js +12 -7
  223. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -1
  224. package/dist/plus/integrations/reads/broaden.d.ts +47 -10
  225. package/dist/plus/integrations/reads/broaden.d.ts.map +1 -1
  226. package/dist/plus/integrations/reads/broaden.js +144 -33
  227. package/dist/plus/integrations/reads/broaden.js.map +1 -1
  228. package/dist/plus/integrations/reads/filters.d.ts +18 -0
  229. package/dist/plus/integrations/reads/filters.d.ts.map +1 -1
  230. package/dist/plus/integrations/reads/filters.js +37 -1
  231. package/dist/plus/integrations/reads/filters.js.map +1 -1
  232. package/dist/plus/integrations/reads/issueBatch.d.ts +51 -0
  233. package/dist/plus/integrations/reads/issueBatch.d.ts.map +1 -0
  234. package/dist/plus/integrations/reads/issueBatch.js +91 -0
  235. package/dist/plus/integrations/reads/issueBatch.js.map +1 -0
  236. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
  237. package/dist/plus/integrations/reads/issueTracker.js +23 -17
  238. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  239. package/dist/plus/integrations/reads/sweeps.d.ts.map +1 -1
  240. package/dist/plus/integrations/reads/sweeps.js +5 -3
  241. package/dist/plus/integrations/reads/sweeps.js.map +1 -1
  242. package/dist/plus/integrations/reads/trackerIssue.d.ts +21 -0
  243. package/dist/plus/integrations/reads/trackerIssue.d.ts.map +1 -0
  244. package/dist/plus/integrations/reads/trackerIssue.js +51 -0
  245. package/dist/plus/integrations/reads/trackerIssue.js.map +1 -0
  246. package/dist/plus/integrations/reads/warnings.d.ts +2 -15
  247. package/dist/plus/integrations/reads/warnings.d.ts.map +1 -1
  248. package/dist/plus/integrations/reads/warnings.js +19 -1
  249. package/dist/plus/integrations/reads/warnings.js.map +1 -1
  250. package/dist/plus/integrations/results.d.ts +4 -20
  251. package/dist/plus/integrations/results.d.ts.map +1 -1
  252. package/dist/plus/integrations/results.js.map +1 -1
  253. package/dist/utils/promise.d.ts +2 -0
  254. package/dist/utils/promise.d.ts.map +1 -1
  255. package/dist/utils/promise.js +11 -0
  256. package/dist/utils/promise.js.map +1 -1
  257. package/dist/utils/promiseCache.d.ts +19 -0
  258. package/dist/utils/promiseCache.d.ts.map +1 -1
  259. package/dist/utils/promiseCache.js +30 -0
  260. package/dist/utils/promiseCache.js.map +1 -1
  261. package/dist/utils/resourceUsage.d.ts +5 -0
  262. package/dist/utils/resourceUsage.d.ts.map +1 -0
  263. package/dist/utils/resourceUsage.js +2 -0
  264. package/dist/utils/resourceUsage.js.map +1 -0
  265. package/dist/utils/string.d.ts +12 -0
  266. package/dist/utils/string.d.ts.map +1 -1
  267. package/dist/utils/string.js +36 -1
  268. package/dist/utils/string.js.map +1 -1
  269. package/docs/integrations.md +48 -33
  270. package/docs/kepler-read-api-parity.md +25 -4
  271. package/package.json +12 -4
  272. package/src/git/cache.ts +36 -0
  273. package/src/git/context.ts +11 -0
  274. package/src/git/errors.ts +13 -1
  275. package/src/git/features.ts +51 -0
  276. package/src/git/gitHealth.ts +522 -0
  277. package/src/git/models/search.ts +19 -4
  278. package/src/git/parsers/diffParser.ts +27 -4
  279. package/src/git/providers/config.ts +42 -1
  280. package/src/git/providers/graph.ts +12 -0
  281. package/src/git/providers/maintenance.ts +224 -0
  282. package/src/git/providers/operations.ts +10 -0
  283. package/src/git/providers/pausedOperations.ts +3 -0
  284. package/src/git/providers/provider.ts +2 -0
  285. package/src/git/providers/tags.ts +1 -0
  286. package/src/git/repositoryService.ts +1 -0
  287. package/src/git/run.types.ts +8 -0
  288. package/src/git/service.ts +3 -0
  289. package/src/git/utils/search.utils.ts +129 -5
  290. package/src/git/watching/watchService.ts +10 -0
  291. package/src/git-cli/cliGitProvider.ts +25 -0
  292. package/src/git-cli/exec/git.ts +120 -6
  293. package/src/git-cli/exec/gitQueue.ts +19 -17
  294. package/src/git-cli/parsers/logParser.ts +4 -1
  295. package/src/git-cli/providers/blame.ts +3 -8
  296. package/src/git-cli/providers/branches.ts +28 -8
  297. package/src/git-cli/providers/commits.ts +34 -2
  298. package/src/git-cli/providers/config.ts +38 -6
  299. package/src/git-cli/providers/graph.ts +107 -7
  300. package/src/git-cli/providers/maintenance.ts +2599 -0
  301. package/src/git-cli/providers/operations.ts +11 -0
  302. package/src/git-cli/providers/pausedOperations.ts +7 -2
  303. package/src/git-cli/providers/tags.ts +36 -1
  304. package/src/plus/agents/agentCapabilities.ts +286 -0
  305. package/src/plus/agents/providers/claudeCodeTranscript.ts +313 -58
  306. package/src/plus/agents/providers/{claudeCodeProvider.ts → gkAgentProvider.ts} +1123 -277
  307. package/src/plus/agents/types.ts +137 -40
  308. package/src/plus/ai/models/promptTemplates.ts +1 -1
  309. package/src/plus/ai/prompts.ts +62 -4
  310. package/src/plus/git-github/api/github.ts +404 -82
  311. package/src/plus/git-github/api/issueSearchQuery.ts +49 -1
  312. package/src/plus/git-github/providers/github/blame.ts +2 -1
  313. package/src/plus/integrations/collectionMetadata.ts +23 -1
  314. package/src/plus/integrations/context.ts +1 -1
  315. package/src/plus/integrations/index.ts +1 -0
  316. package/src/plus/integrations/integrationService.ts +29 -4
  317. package/src/plus/integrations/manager.ts +48 -0
  318. package/src/plus/integrations/models/gitHostIntegration.ts +165 -129
  319. package/src/plus/integrations/models/integration.ts +57 -22
  320. package/src/plus/integrations/models/issueCache.ts +29 -0
  321. package/src/plus/integrations/models/issueReads.ts +15 -0
  322. package/src/plus/integrations/models/issuesIntegration.ts +38 -8
  323. package/src/plus/integrations/providers/azureDevOps.ts +16 -13
  324. package/src/plus/integrations/providers/bitbucket-server.ts +4 -6
  325. package/src/plus/integrations/providers/bitbucket.ts +3 -4
  326. package/src/plus/integrations/providers/github.ts +23 -7
  327. package/src/plus/integrations/providers/gitlab.ts +4 -6
  328. package/src/plus/integrations/providers/jira.ts +52 -26
  329. package/src/plus/integrations/providers/jiraIssueByKey.ts +155 -0
  330. package/src/plus/integrations/providers/linear.ts +38 -25
  331. package/src/plus/integrations/providers/models.ts +17 -5
  332. package/src/plus/integrations/providers/providerErrors.ts +115 -0
  333. package/src/plus/integrations/providers/providersApi.ts +26 -68
  334. package/src/plus/integrations/providers/trello.ts +5 -4
  335. package/src/plus/integrations/providers/utils/providerPaging.ts +14 -7
  336. package/src/plus/integrations/reads/broaden.ts +282 -70
  337. package/src/plus/integrations/reads/filters.ts +39 -1
  338. package/src/plus/integrations/reads/issueBatch.ts +197 -0
  339. package/src/plus/integrations/reads/issueTracker.ts +26 -24
  340. package/src/plus/integrations/reads/sweeps.ts +19 -12
  341. package/src/plus/integrations/reads/trackerIssue.ts +105 -0
  342. package/src/plus/integrations/reads/warnings.ts +23 -17
  343. package/src/plus/integrations/results.ts +4 -20
  344. package/src/utils/promise.ts +15 -0
  345. package/src/utils/promiseCache.ts +43 -0
  346. package/src/utils/resourceUsage.ts +5 -0
  347. package/src/utils/string.ts +38 -1
  348. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +0 -1
  349. package/dist/plus/agents/providers/claudeCodeProvider.js.map +0 -1
@@ -113,28 +113,34 @@ provider before calling the token backend; never reuse an id discovered under a
113
113
  Every read returns `ProviderResult<T>` (`items` + `warnings` + `fetchFailed?`), and every paged read extends
114
114
  it with `page` + `hasMore` + `cursor?`. **No read throws for a provider-side failure** — see §6.
115
115
 
116
- | Method | Returns | Scope |
117
- | ---------------------------- | ------------------------- | ------------------------------------------------------------------------------------- |
118
- | `listOrgs` | `ProviderOrganization` | Orgs / workspaces / groups; issue-tracker resources (Jira sites, …). |
119
- | `listProjects` | `ProviderOrganization` | The project tier: Azure DevOps, and issue-tracker projects. |
120
- | `listRepos` | `ProviderRepositoryShape` | Repos of an `org`, or account-wide user-affiliated repos when `org` is omitted. |
121
- | `listPullRequestsPage` | `PullRequestShape` | With `repos`: those repos' PRs. Without: the user's PRs account-wide. |
122
- | `searchPullRequestsPage` | `PullRequestShape` | PRs involving the user that match structured criteria, optionally repo/org-scoped. |
123
- | `countPullRequests` | `PullRequestCountResult` | How many PRs match each scope, fetching none of them. See §5.1. |
124
- | `listIssuesPage` | `IssueShape` | Same split, for a **git host**'s issues. |
125
- | `searchIssuesPage` | `IssueShape` | Issues matching structured criteria over a repo/org scope — **no** `@me` binding. |
126
- | `countIssues` | `IssueCountResult` | How many match each scope, fetching none of them. See §5.1. |
127
- | `listIssueTrackerIssuesPage` | `IssueShape` | Jira / Linear / Trello (issues live under resource project). |
128
- | `sweepPullRequests` | `ProviderSweepResult` | Drains **every** page across providers (`maxPages`, default 100). |
129
- | `sweepClosedPullRequests` | `ProviderSweepResult` | Same, pinned to `['closed','merged']`. |
130
- | `broadenIssues` | `ProviderBroadenResult` | Per-org fan-out: list the org's repos, then read their issues unfiltered by assignee. |
131
- | `resolveRepository` | `ResolveRepositoryResult` | Remote URL canonical provider identity (the `gk repo resolve` equivalent). |
132
- | `getSupportedFilters` | filter capability table | Static, connection-free. See §7. |
116
+ | Method | Returns | Scope |
117
+ | ---------------------------- | ------------------------- | --------------------------------------------------------------------------------------- |
118
+ | `listOrgs` | `ProviderOrganization` | Orgs / workspaces / groups; issue-tracker resources (Jira sites, …). |
119
+ | `listProjects` | `ProviderOrganization` | The project tier: Azure DevOps, and issue-tracker projects. |
120
+ | `listRepos` | `ProviderRepositoryShape` | Repos of an `org`, or account-wide user-affiliated repos when `org` is omitted. |
121
+ | `listPullRequestsPage` | `PullRequestShape` | With `repos`: those repos' PRs. Without: the user's PRs account-wide. |
122
+ | `searchPullRequestsPage` | `PullRequestShape` | PRs involving the user that match structured criteria, optionally repo/org-scoped. |
123
+ | `countPullRequests` | `PullRequestCountResult` | How many PRs match each scope, fetching none of them. See §5.1. |
124
+ | `listIssuesPage` | `IssueShape` | Same split, for a **git host**'s issues. |
125
+ | `searchIssuesPage` | `IssueShape` | Issues matching structured criteria over a repo/org scope — **no** `@me` binding. |
126
+ | `countIssues` | `IssueCountResult` | How many match each scope, fetching none of them. See §5.1. |
127
+ | `getIssuesBatch` | `IssueBatchResult` | Resolves N `(owner, repo, number)` coordinates in one request; an absence is proven. |
128
+ | `getTrackerIssue` | `TrackerIssueResult` | Resolves ONE tracker issue by key within a resource; an absence is proven. Jira/Linear. |
129
+ | `listIssueTrackerIssuesPage` | `IssueShape` | Jira / Linear / Trello (issues live under resource → project). |
130
+ | `sweepPullRequests` | `ProviderSweepResult` | Drains **every** page across providers (`maxPages`, default 100). |
131
+ | `sweepClosedPullRequests` | `ProviderSweepResult` | Same, pinned to `['closed','merged']`. |
132
+ | `broadenIssues` | `ProviderBroadenResult` | Per-org fan-out for every visible issue, unfiltered by assignee. |
133
+ | `resolveRepository` | `ResolveRepositoryResult` | Remote URL → canonical provider identity (the `gk repo resolve` equivalent). |
134
+ | `getSupportedFilters` | filter capability table | Static, connection-free. See §7. |
133
135
 
134
136
  A provider that cannot serve a surface says so explicitly — a warning explaining that the operation is
135
137
  unsupported plus `fetchFailed`, never a silent empty page. That distinction is the whole point of the result
136
138
  shape: an empty `items` with no warning means "this account genuinely has nothing".
137
139
 
140
+ `getTrackerIssue` takes `resourceId` for both supported trackers. Jira also takes `resourceUrl`, the site URL
141
+ returned by `listOrgs`; the REST response only supplies an API `self` link, so the caller provides the already-known
142
+ site identity rather than making this point read perform resource discovery. Linear does not need it.
143
+
138
144
  ## 5. Paging
139
145
 
140
146
  Two mechanisms live behind one shape, and they are **not** interchangeable:
@@ -330,7 +336,9 @@ on it without parsing `message`:
330
336
  if (warning.omission != null) {
331
337
  // The read SUCCEEDED — message it as incompleteness, not failure.
332
338
  // Whether anything would fetch the rest is a separate question; see `recovery` below.
333
- if (warning.omission.recovery !== 'none') offerLoadMore(warning.omission);
339
+ // Switch on the VALUE. `!== 'none'` is not "fetchable": `narrow-scope` is not.
340
+ if (warning.omission.recovery === 'page-budget') offerLoadMore(warning.omission);
341
+ else if (warning.omission.recovery === 'narrow-scope') suggestNarrowingTheScope(warning.omission);
334
342
  }
335
343
  ```
336
344
 
@@ -360,19 +368,22 @@ mid-read left an unread tail too, but a retry may complete it — that one carri
360
368
  a provider that gave no usable cursor are the same kind, but only the first can be fetched. Gate a "load more"
361
369
  affordance on `recovery`, never on `kind`:
362
370
 
363
- | `omission.recovery` | Means | What a consumer does |
364
- | ------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------- |
365
- | `none` | Nothing you can call returns the missing items. | Say the results are capped. Do not offer to fetch more. |
366
- | `page-budget` | Re-run the same read with a higher `maxPages` (sweep options). | Offer it — but note it re-reads from the start, so make it user-initiated. |
371
+ | `omission.recovery` | Means | What a consumer does |
372
+ | ------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
373
+ | `none` | Nothing you can call returns the missing items. | Say the results are capped. Do not offer to fetch more. |
374
+ | `page-budget` | Re-run the same read with a higher `maxPages` (sweep options). | Offer it — but note it re-reads from the start, so make it user-initiated. |
375
+ | `narrow-scope` | A smaller server-side scope can avoid the backstop; no budget or retry reaches the rest. | Suggest narrowing the scope. Do **not** offer to fetch more. |
367
376
 
368
377
  `recovery` is **required** — unlike `limit`, `totalCount` and `scope`, it is never absent. An absent value
369
378
  would be indistinguishable from `none` while actually meaning "this producer didn't say", which is the
370
379
  ambiguity `omission` exists to remove.
371
380
 
372
381
  It is also **conservative**: it names only what a producer can prove, so `none` means "not known to be
373
- recoverable", not "proven unrecoverable". Today only a sweep that spent its own page budget reports
374
- `page-budget`; everything else every provider cap, every exhausted internal budget, and every omission
375
- derived from SDK metadata is `none`. A `scope` does not change that. It attributes where results were
382
+ recoverable", not "proven unrecoverable". Only a sweep that spent its own page budget reports `page-budget`, and
383
+ only a broad Jira project query that provably stopped at its own page backstop reports `narrow-scope`.
384
+ Already-scoped Jira reads and Linear reads use `none` when they emit an omission because changing the public
385
+ scope cannot make those provider requests narrower. Other caps and exhausted budgets also use `none`; a stalled
386
+ cursor or failed page may instead be a failure with no omission. A `scope` does not change that. It attributes where results were
376
387
  withheld, and the SDK reports the same scoped shape both for a scope it merely sampled and for one whose
377
388
  cursor stalled, so re-reading it is not something this layer can promise.
378
389
 
@@ -523,8 +534,10 @@ Derived from the provider models and `providersMetadata`. ✓ supported · ✗ r
523
534
  | `countPullRequests` | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
524
535
  | Issues, repo-scoped | ✓ | ✓ | ✗ | ✗ | ✓ | — | — | — |
525
536
  | Issues, account-wide | ✓ | ✓ | ✗ | ✗ | ✓ | — | — | — |
526
- | `searchIssuesPage` | ✓ | | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
527
- | `countIssues` | ✓ | | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
537
+ | `searchIssuesPage` | ✓ | | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
538
+ | `countIssues` | ✓ | | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
539
+ | `getIssuesBatch` | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
540
+ | `getTrackerIssue` | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ |
528
541
  | Issues by `org`/`project` | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ |
529
542
  | `listIssueTrackerIssuesPage` | — | — | — | — | — | ✓ | ✓ | ✓ |
530
543
  | `broadenIssues` | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ |
@@ -604,12 +617,14 @@ free text have no equivalent on either.
604
617
  recovered. `hasMore` reports only untouched forward progress. A cursor can therefore remain with
605
618
  `hasMore: false`; reusing it is an explicit manual retry of failed work, not a normal paging loop.
606
619
 
607
- **`broadenIssues` vs `searchIssuesPage`.** If you already know your repository set, prefer
608
- `searchIssuesPage({ repos })`: `broadenIssues` has to discover each org's repositories first (a paged drain)
609
- and then reads their issues through the SDK path with the recovery walk, so it costs strictly more for the
610
- same answer. It remains the read for "fan out across these orgs, whatever repos they turn out to contain",
611
- with per-provider attribution (`broadenedProviderIds` / `failedProviderIds` / `incompleteProviderIds`) that
612
- the single-provider search doesn't produce.
620
+ **`broadenIssues` vs `searchIssuesPage`.** `broadenIssues` now reads each org through the org-scoped
621
+ filtered search where the provider declares one (GitHub/GHE), so it no longer discovers repositories first
622
+ and no longer routes through the SDK read's recovery walk one request per page, per org. A provider with
623
+ no filtered search (Azure DevOps, GitLab) still takes the repository drain, since refusing the org would be
624
+ worse. It remains the read for "fan out across these orgs, whatever repos they turn out to contain", with
625
+ per-provider attribution (`broadenedProviderIds` / `failedProviderIds` / `incompleteProviderIds`) that the
626
+ single-provider search doesn't produce; reach for `searchIssuesPage` when you want ONE scope with an order
627
+ you control.
613
628
 
614
629
  If you do migrate: broaden means **all visible** — it drops the assignee constraint entirely, so unassigned
615
630
  issues are included. The equivalent is therefore an **omitted** `relationships`, **not**
@@ -168,11 +168,32 @@ searches, so the reported count is the **largest** of them (the total `searchPul
168
168
  via `Math.max` over facets), not their sum, and `exceedsProviderLimit` compares that max against the per-search
169
169
  ceiling. GitHub/GHE only, matching `searchPullRequestsPage`.
170
170
 
171
- **Not done, deliberately:** `broadenIssues` was left as-is rather than reimplemented on top of this. It is a
172
- multi-provider, multi-org fan-out with its own result type and per-org cursor bundle, so only its inner
173
- per-org read could be swapped; and its "all visible" breadth maps to an OMITTED relationship set, not to
174
- `any-assignee`, which excludes unassigned issues. See the note in `reads/broaden.ts` and
171
+ **Since done:** `broadenIssues`' inner per-org read WAS swapped onto the filtered search (#5804). Only that
172
+ inner read changed — the fan-out keeps its own result type, per-org cursor bundle and per-provider
173
+ attribution and its "all visible" breadth maps to an OMITTED relationship set, not to `any-assignee`,
174
+ which excludes unassigned issues. A provider that declares no filtered search keeps the repository drain.
175
+ See the note in `reads/broaden.ts` and
175
176
  [`integrations.md` §9](./integrations.md#9-per-provider-behavior-worth-designing-around).
176
177
 
178
+ **Batch issue resolution (#5802).** `getIssuesBatch` resolves N `(owner, repo, number)` coordinates in one
179
+ request, for the identity question a search cannot answer: "which issue does this branch name reference".
180
+ It aliases the point read rather than a search, so there is no result ceiling and no ordering — and an
181
+ absent slot is a PROVEN absence rather than "not found within a page budget", which is what lets a consumer
182
+ CACHE a miss. A target whose chunk failed is not returned at all, so the two stay distinguishable; caching a
183
+ failure as an absence is the bug that distinction prevents. GitHub/GHE only, matching `countIssues`.
184
+
185
+ **Tracker issue resolution by key (#5810).** `getTrackerIssue` is the same identity read for an issue TRACKER,
186
+ which `getIssuesBatch` cannot serve: its target is `(owner, repo, number)`, and a tracker issue is addressed by
187
+ `(resourceId, ABC-123)` — no owner, no repo, and an identifier that is not a number. It answers in one request
188
+ where the only published tracker surface (`listIssueTrackerIssuesPage`) needs a scoped page-walk that cannot
189
+ prove absence without draining the whole scope. Same absence/failure contract as the batch read, and the same
190
+ reason it matters: a tracker miss is the common outcome and was never cacheable.
191
+
192
+ `resourceId` is required and trusted, so the read performs no resource discovery. Jira also requires
193
+ `resourceUrl`, obtained alongside the resource ID, because the issue response's `self` is an API endpoint rather
194
+ than a browser link; supplying both retains the one-request contract. Linear needs only the resource ID. Jira and
195
+ Linear only; Trello refuses because its single-issue read can fall back to a capped board scan for a numeric
196
+ identifier, where a "not found" result cannot be distinguished from a card beyond the cap.
197
+
177
198
  **Kepler-side follow-up:** `ProviderScopeFilter` carries a single `repo?: string` today and needs the criteria
178
199
  set; the `provider-data` adapter then routes "All visible" to `searchIssuesPage` + `countIssues`.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gitkraken/core-gitlens",
3
3
  "description": "GitLens core — shared Git / AI / GitHub primitives for internal GitKraken consumption",
4
- "version": "0.5.113",
4
+ "version": "0.5.115",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
7
7
  "name": "GitKraken",
@@ -17,7 +17,7 @@
17
17
  "directory": "packages/core"
18
18
  },
19
19
  "engines": {
20
- "node": ">= 22.12.0"
20
+ "node": ">= 24"
21
21
  },
22
22
  "type": "module",
23
23
  "sideEffects": false,
@@ -83,6 +83,10 @@
83
83
  "types": "./dist/git/features.d.ts",
84
84
  "default": "./dist/git/features.js"
85
85
  },
86
+ "./git/gitHealth.js": {
87
+ "types": "./dist/git/gitHealth.d.ts",
88
+ "default": "./dist/git/gitHealth.js"
89
+ },
86
90
  "./git/models/*.js": {
87
91
  "types": "./dist/git/models/*.d.ts",
88
92
  "default": "./dist/git/models/*.js"
@@ -131,6 +135,10 @@
131
135
  "types": "./dist/ipc/ipcServer.d.ts",
132
136
  "default": "./dist/ipc/ipcServer.js"
133
137
  },
138
+ "./plus/agents/agentCapabilities.js": {
139
+ "types": "./dist/plus/agents/agentCapabilities.d.ts",
140
+ "default": "./dist/plus/agents/agentCapabilities.js"
141
+ },
134
142
  "./plus/agents/providers/*.js": {
135
143
  "types": "./dist/plus/agents/providers/*.d.ts",
136
144
  "default": "./dist/plus/agents/providers/*.js"
@@ -228,9 +236,9 @@
228
236
  }
229
237
  },
230
238
  "dependencies": {
231
- "@gitkraken/provider-apis": "0.57.0",
239
+ "@gitkraken/provider-apis": "0.58.0",
232
240
  "@octokit/graphql": "9.0.4",
233
- "@octokit/request": "10.0.13",
241
+ "@octokit/request": "10.0.14",
234
242
  "@octokit/request-error": "7.1.1",
235
243
  "@octokit/types": "17.0.0",
236
244
  "fast-string-truncated-width": "3.0.3",
package/src/git/cache.ts CHANGED
@@ -7,6 +7,7 @@ import { normalizePath } from '../utils/path.js';
7
7
  import type { PromiseOrValue } from '../utils/promise.js';
8
8
  import type { CacheController } from '../utils/promiseCache.js';
9
9
  import { PromiseCache, PromiseMap, RepoPromiseCacheMap } from '../utils/promiseCache.js';
10
+ import type { ResourceUsage } from '../utils/resourceUsage.js';
10
11
  import type { Uri } from '../utils/uri.js';
11
12
  import type { ProgressiveGitBlame } from './models/blame.js';
12
13
  import type { BranchMetadata, GitBranch } from './models/branch.js';
@@ -82,6 +83,24 @@ export type ConflictDetectionCacheKey =
82
83
  */
83
84
  const baseBranchNameTTL = 5 * 60 * 1000; // 5 minutes
84
85
 
86
+ /**
87
+ * Completed blame graphs retain several objects and substrings per line. Keep normal files hot, but let large
88
+ * documents be owned by their active tracked-document snapshot instead of retaining a second long-lived owner.
89
+ */
90
+ const maxCachedBlameLines = 5000;
91
+
92
+ export async function shouldEvictBlameCacheEntry(progressive: ProgressiveGitBlame | undefined): Promise<boolean> {
93
+ if (progressive == null) return false;
94
+
95
+ try {
96
+ const blame = await progressive.completed;
97
+ return blame.lines.length > maxCachedBlameLines;
98
+ } catch {
99
+ // The provider factory resolves as soon as streaming starts, so a later stream failure must also be retried.
100
+ return true;
101
+ }
102
+ }
103
+
85
104
  /**
86
105
  * gkConfig keys that participate in the `branchOverviews` cache's mergeTarget/mergeBase lineage.
87
106
  * Capture group 1 is the ref name (which may itself contain `.`/`/`).
@@ -266,6 +285,23 @@ export class Cache implements Disposable {
266
285
  this.reset();
267
286
  }
268
287
 
288
+ /** Resource usage retained by instantiated sub-caches and their bookkeeping maps. */
289
+ getResourceUsage(): ResourceUsage {
290
+ const usage: ResourceUsage = {};
291
+ for (const [name, cache] of Object.entries(this._caches)) {
292
+ if (cache != null) {
293
+ usage[`cache.${name}.entries.count`] =
294
+ cache instanceof RepoPromiseCacheMap ? cache.entryCount : cache.size;
295
+ }
296
+ }
297
+ usage['cache.commonPathRegistry.entries.count'] = this._commonPathRegistry.size;
298
+ usage['cache.worktreesByCommonPath.entries.count'] = this._worktreesByCommonPath.size;
299
+ usage['cache.statusGenerations.entries.count'] = this._statusGenerations.size;
300
+ usage['cache.closeGenerations.entries.count'] = this._closeGenerations.size;
301
+ usage['cache.gkConfigMergeSnapshots.entries.count'] = this._gkConfigMergeSnapshots.size;
302
+ return usage;
303
+ }
304
+
269
305
  get bestRemotes(): PromiseMap<RepoPath, GitRemote<RemoteProvider>[]> {
270
306
  return (this._caches.bestRemotes ??= new PromiseMap<RepoPath, GitRemote<RemoteProvider>[]>());
271
307
  }
@@ -76,6 +76,11 @@ export interface GitServiceConfig {
76
76
 
77
77
  /** Graph-specific configuration defaults. */
78
78
  readonly graph?: {
79
+ /** Whether to keep git's commit-graph file up to date in the background after graph loads —
80
+ * written when missing, periodically refreshed to cover new commits (accelerates ordered
81
+ * history walks — the graph's initial load). Fed from the master switch
82
+ * (`gitlens.gitOptimizations.enabled`); `false` disables the background write. */
83
+ readonly writeCommitGraph?: boolean;
79
84
  /** Graph commit ordering (falls back to `commits.ordering` or `'date'`). */
80
85
  readonly commitOrdering?: 'date' | 'author-date' | 'topo';
81
86
  /** Whether to only follow first parent in graph. */
@@ -86,6 +91,12 @@ export interface GitServiceConfig {
86
91
  readonly maxSearchItems?: number;
87
92
  };
88
93
 
94
+ /** Auto-tier git-optimization (maintenance) preferences. */
95
+ readonly maintenance?: {
96
+ /** Master switch for the auto-tier optimizations (maps to `gitlens.gitOptimizations.enabled`). Defaults to `true`. */
97
+ readonly enabled?: boolean;
98
+ };
99
+
89
100
  /** Force-push preferences. */
90
101
  readonly push?: {
91
102
  /** Whether to use `--force-with-lease` instead of a plain `--force` when force-pushing. Defaults to `true`. */
package/src/git/errors.ts CHANGED
@@ -68,12 +68,18 @@ export abstract class GitCommandError<Details extends { gitCommand?: GitCommandC
68
68
  }
69
69
  }
70
70
 
71
+ export type GitSearchErrorReason = 'invalidPattern' | 'invalidRef';
72
+
71
73
  export class GitSearchError extends Error {
72
74
  static is(ex: unknown): ex is GitSearchError {
73
75
  return ex instanceof GitSearchError;
74
76
  }
75
77
 
76
- constructor(public readonly original: Error) {
78
+ constructor(
79
+ public readonly original: Error,
80
+ public readonly reason?: GitSearchErrorReason,
81
+ public readonly detail?: string,
82
+ ) {
77
83
  super(original.message);
78
84
 
79
85
  Error.captureStackTrace?.(this, new.target);
@@ -451,6 +457,7 @@ export class PausedOperationAbortError extends GitCommandError<PausedOperationAb
451
457
  export type PausedOperationContinueErrorReason =
452
458
  | 'conflicts'
453
459
  | 'emptyCommit'
460
+ | 'messageEditFailed'
454
461
  | 'nothingToContinue'
455
462
  | 'uncommittedChanges'
456
463
  | 'unmergedFiles'
@@ -483,6 +490,8 @@ export class PausedOperationContinueError extends GitCommandError<PausedOperatio
483
490
  return `Cannot ${details.skip ? 'skip' : 'continue'} the ${details.operation.type} operation as there are unresolved conflicts`;
484
491
  case 'emptyCommit':
485
492
  return `Cannot ${details.skip ? 'skip' : 'continue'} the ${details.operation.type} operation as the previous commit is empty`;
493
+ case 'messageEditFailed':
494
+ return `Cannot ${details.skip ? 'skip' : 'continue'} the ${details.operation.type} operation as a commit message needs to be edited and the editor could not be opened`;
486
495
  case 'nothingToContinue':
487
496
  return `Cannot ${details.skip ? 'skip' : 'continue'} the ${details.operation.type} operation as there is no ${details.operation.type} in progress`;
488
497
  case 'uncommittedChanges':
@@ -868,6 +877,7 @@ export type TagErrorReason =
868
877
  | 'notFound'
869
878
  | 'permissionDenied'
870
879
  | 'remoteRejected'
880
+ | 'tagConflict'
871
881
  | 'other';
872
882
  interface TagErrorDetails {
873
883
  reason?: TagErrorReason;
@@ -906,6 +916,8 @@ export class TagError extends GitCommandError<TagErrorDetails> {
906
916
  return `${baseMessage} because you don't have permission to push to this remote repository.`;
907
917
  case 'remoteRejected':
908
918
  return `${baseMessage} because the remote repository rejected the push.`;
919
+ case 'tagConflict':
920
+ return `${baseMessage} because the remote already has a tag with that name. Use force to overwrite it.`;
909
921
  default:
910
922
  return baseMessage;
911
923
  }
@@ -1,19 +1,32 @@
1
1
  // GitFeature's must start with `git:` to be recognized in all usages
2
2
  export type GitFeatures =
3
3
  | 'git:checkout:pathspec-from-file'
4
+ | 'git:commit-graph'
5
+ | 'git:commit-graph:changed-paths'
4
6
  | 'git:for-each-ref:worktreePath'
7
+ | 'git:fsmonitor'
8
+ | 'git:fsmonitor:linux'
5
9
  | 'git:ignoreRevsFile'
10
+ | 'git:index:skipHash'
11
+ | 'git:maintenance'
12
+ | 'git:maintenance:pack-refs'
13
+ | 'git:maintenance:start'
14
+ | 'git:maintenance:start:systemd'
15
+ | 'git:manyFiles'
6
16
  | 'git:merge-tree'
7
17
  | 'git:merge-tree:write-tree'
8
18
  | 'git:push:force-if-includes'
19
+ | 'git:rebase:autosquash'
9
20
  | 'git:rev-parse:end-of-options'
10
21
  | 'git:signing:ssh'
11
22
  | 'git:signing:x509'
23
+ | 'git:sparse-index'
12
24
  | 'git:stash:push:pathspecs'
13
25
  | 'git:stash:push:staged'
14
26
  | 'git:stash:push:stdin'
15
27
  | 'git:status:find-renames'
16
28
  | 'git:status:porcelain-v2'
29
+ | 'git:untrackedCache'
17
30
  | 'git:worktrees';
18
31
 
19
32
  type ExtractPrefix<T> = T extends `${infer Prefix}:${infer Rest}`
@@ -30,18 +43,56 @@ export type FilteredGitFeatures<T extends GitFeatureOrPrefix> = T extends GitFea
30
43
  export const gitMinimumVersion = '2.7.2';
31
44
  export const gitFeaturesByVersion = new Map<GitFeatures, string>([
32
45
  ['git:checkout:pathspec-from-file', '2.26'],
46
+ // 2.24 is when git READS the commit-graph file by default (core.commitGraph on); writing it for
47
+ // older gits would be dead weight.
48
+ ['git:commit-graph', '2.24'],
49
+ // Changed-path Bloom filters (`--changed-paths`), the v2 filter format — pre-2.31 shipped Bloom filters
50
+ // with real correctness bugs (bad results for merge commits), so 2.31 is the safe floor to write them.
51
+ ['git:commit-graph:changed-paths', '2.31'],
33
52
  ['git:for-each-ref:worktreePath', '2.23'],
53
+ // `core.fsmonitor=true` selects the built-in FSMonitor daemon (accepting a bool rather than only a
54
+ // hook path). This 2.37 floor is the Windows + macOS one.
55
+ ['git:fsmonitor', '2.37'],
56
+ // Linux got its own FSMonitor backend (inotify) only in 2.55, hence a separate floor. Note the backend
57
+ // places a watch on EVERY directory, so a large repo can exhaust `fs.inotify.max_user_watches` and the
58
+ // daemon fails at runtime even on a new enough git — the apply path must still probe, not just gate.
59
+ ['git:fsmonitor:linux', '2.55'],
34
60
  ['git:ignoreRevsFile', '2.23'],
61
+ // `index.skipHash` (skip the trailing index checksum for faster writes); part of `feature.manyFiles`.
62
+ ['git:index:skipHash', '2.40'],
63
+ // `git maintenance run --task=…`. The `maintenance` builtin + `commit-graph`/`gc` tasks are 2.29, but
64
+ // the loose-objects + incremental-repack tasks the auto tier uses landed in 2.30 (and `core.multiPackIndex`
65
+ // is default-on from 2.30, so no separate midx config write is needed) — 2.30 is the safe floor.
66
+ ['git:maintenance', '2.30'],
67
+ // The pack-refs maintenance task landed one release after the maintenance builtin.
68
+ ['git:maintenance:pack-refs', '2.31'],
69
+ // `git maintenance start` — the subcommands exist from 2.30 (cron only); launchctl (macOS) + schtasks
70
+ // (Windows) scheduling arrived in 2.31, so 2.31 is the cross-platform-safe floor.
71
+ ['git:maintenance:start', '2.31'],
72
+ // `git maintenance start` systemd-timer scheduling. On Linux, 2.31–2.33 is cron-only and modern distros
73
+ // often ship without cron (scheduling then silently fails); the systemd fallback arrived in 2.34.
74
+ ['git:maintenance:start:systemd', '2.34'],
75
+ // `feature.manyFiles` umbrella (index v4 + untracked cache + skipHash where available).
76
+ ['git:manyFiles', '2.24'],
35
77
  ['git:merge-tree', '2.33'],
36
78
  ['git:merge-tree:write-tree', '2.38'],
37
79
  ['git:push:force-if-includes', '2.30.0'],
80
+ // `--autosquash` WITHOUT `-i` (folding `fixup!`/`squash!` commits into a plain/automatic rebase).
81
+ // Interactive rebases support autosquash on every git version GitLens supports, so this floor only
82
+ // gates the non-interactive path.
83
+ ['git:rebase:autosquash', '2.44'],
38
84
  ['git:rev-parse:end-of-options', '2.30'],
39
85
  ['git:signing:ssh', '2.34.0'],
40
86
  ['git:signing:x509', '2.19.0'],
87
+ // Sparse-index support debuted earlier, but 2.33 shipped a corruption fix and 2.34 broadened command
88
+ // support. Use 2.34 as the conservative floor before offering a repository mutation.
89
+ ['git:sparse-index', '2.34'],
41
90
  ['git:stash:push:pathspecs', '2.13.2'],
42
91
  ['git:stash:push:staged', '2.35.0'],
43
92
  ['git:stash:push:stdin', '2.30.0'],
44
93
  ['git:status:find-renames', '2.18'],
45
94
  ['git:status:porcelain-v2', '2.11'],
95
+ // `core.untrackedCache=true` (repo-local cache of untracked-file scans — the auto-tier config lever).
96
+ ['git:untrackedCache', '2.8'],
46
97
  ['git:worktrees', '2.17.0'],
47
98
  ]);