@gitkraken/core-gitlens 0.2.0 → 0.3.1

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 (448) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/git/cache.d.ts +38 -8
  3. package/dist/git/cache.d.ts.map +1 -1
  4. package/dist/git/cache.js +120 -55
  5. package/dist/git/cache.js.map +1 -1
  6. package/dist/git/context.d.ts +19 -0
  7. package/dist/git/context.d.ts.map +1 -1
  8. package/dist/git/context.js.map +1 -1
  9. package/dist/git/features.d.ts +1 -1
  10. package/dist/git/features.d.ts.map +1 -1
  11. package/dist/git/features.js +1 -0
  12. package/dist/git/features.js.map +1 -1
  13. package/dist/git/models/commit.d.ts.map +1 -1
  14. package/dist/git/models/commit.js.map +1 -1
  15. package/dist/git/models/graph.d.ts +96 -0
  16. package/dist/git/models/graph.d.ts.map +1 -1
  17. package/dist/git/models/graph.js +24 -1
  18. package/dist/git/models/graph.js.map +1 -1
  19. package/dist/git/models/reference.d.ts +31 -0
  20. package/dist/git/models/reference.d.ts.map +1 -1
  21. package/dist/git/models/remote.d.ts.map +1 -1
  22. package/dist/git/models/remote.js.map +1 -1
  23. package/dist/git/models/remoteProvider.d.ts +1 -0
  24. package/dist/git/models/remoteProvider.d.ts.map +1 -1
  25. package/dist/git/models/remoteProvider.js.map +1 -1
  26. package/dist/git/models/repository.d.ts +30 -13
  27. package/dist/git/models/repository.d.ts.map +1 -1
  28. package/dist/git/models/repository.js +89 -87
  29. package/dist/git/models/repository.js.map +1 -1
  30. package/dist/git/models/search.d.ts +2 -2
  31. package/dist/git/models/search.d.ts.map +1 -1
  32. package/dist/git/models/statusFile.d.ts +9 -0
  33. package/dist/git/models/statusFile.d.ts.map +1 -1
  34. package/dist/git/models/statusFile.js +11 -0
  35. package/dist/git/models/statusFile.js.map +1 -1
  36. package/dist/git/models/worktree.d.ts +4 -1
  37. package/dist/git/models/worktree.d.ts.map +1 -1
  38. package/dist/git/models/worktree.js +2 -2
  39. package/dist/git/models/worktree.js.map +1 -1
  40. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  41. package/dist/git/parsers/diffParser.js.map +1 -1
  42. package/dist/git/providers/branches.d.ts +15 -4
  43. package/dist/git/providers/branches.d.ts.map +1 -1
  44. package/dist/git/providers/commits.d.ts +4 -0
  45. package/dist/git/providers/commits.d.ts.map +1 -1
  46. package/dist/git/providers/config.d.ts +5 -4
  47. package/dist/git/providers/config.d.ts.map +1 -1
  48. package/dist/git/providers/operations.d.ts +61 -12
  49. package/dist/git/providers/operations.d.ts.map +1 -1
  50. package/dist/git/providers/pausedOperations.d.ts +3 -1
  51. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  52. package/dist/git/providers/refs.d.ts +23 -2
  53. package/dist/git/providers/refs.d.ts.map +1 -1
  54. package/dist/git/providers/staging.d.ts +16 -0
  55. package/dist/git/providers/staging.d.ts.map +1 -1
  56. package/dist/git/providers/status.d.ts +4 -1
  57. package/dist/git/providers/status.d.ts.map +1 -1
  58. package/dist/git/remotes/azure-devops.d.ts.map +1 -1
  59. package/dist/git/remotes/azure-devops.js.map +1 -1
  60. package/dist/git/remotes/custom.d.ts +2 -0
  61. package/dist/git/remotes/custom.d.ts.map +1 -1
  62. package/dist/git/remotes/custom.js +20 -0
  63. package/dist/git/remotes/custom.js.map +1 -1
  64. package/dist/git/{exec.types.d.ts → run.types.d.ts} +22 -3
  65. package/dist/git/run.types.d.ts.map +1 -0
  66. package/dist/git/run.types.js +2 -0
  67. package/dist/git/run.types.js.map +1 -0
  68. package/dist/git/service.d.ts.map +1 -1
  69. package/dist/git/service.js.map +1 -1
  70. package/dist/git/utils/autolink.utils.d.ts.map +1 -1
  71. package/dist/git/utils/autolink.utils.js.map +1 -1
  72. package/dist/git/utils/blame.utils.d.ts.map +1 -1
  73. package/dist/git/utils/blame.utils.js.map +1 -1
  74. package/dist/git/utils/conflictResolution.utils.d.ts +6 -0
  75. package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -0
  76. package/dist/git/utils/conflictResolution.utils.js +25 -0
  77. package/dist/git/utils/conflictResolution.utils.js.map +1 -0
  78. package/dist/git/utils/contributor.utils.d.ts +3 -0
  79. package/dist/git/utils/contributor.utils.d.ts.map +1 -1
  80. package/dist/git/utils/contributor.utils.js +22 -0
  81. package/dist/git/utils/contributor.utils.js.map +1 -1
  82. package/dist/git/utils/fileStatus.utils.d.ts +2 -1
  83. package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
  84. package/dist/git/utils/fileStatus.utils.js +4 -0
  85. package/dist/git/utils/fileStatus.utils.js.map +1 -1
  86. package/dist/git/utils/reachability.utils.d.ts +37 -0
  87. package/dist/git/utils/reachability.utils.d.ts.map +1 -0
  88. package/dist/git/utils/reachability.utils.js +96 -0
  89. package/dist/git/utils/reachability.utils.js.map +1 -0
  90. package/dist/git/utils/search.utils.d.ts.map +1 -1
  91. package/dist/git/utils/search.utils.js +3 -0
  92. package/dist/git/utils/search.utils.js.map +1 -1
  93. package/dist/git/utils/sorting.d.ts +8 -0
  94. package/dist/git/utils/sorting.d.ts.map +1 -1
  95. package/dist/git/utils/sorting.js +15 -0
  96. package/dist/git/utils/sorting.js.map +1 -1
  97. package/dist/git/utils/status.utils.d.ts.map +1 -1
  98. package/dist/git/utils/status.utils.js.map +1 -1
  99. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  100. package/dist/git/watching/classifyChange.js +8 -0
  101. package/dist/git/watching/classifyChange.js.map +1 -1
  102. package/dist/git/watching/gitIgnoreFilter.js +1 -1
  103. package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
  104. package/dist/git/watching/initWatcher.d.ts.map +1 -1
  105. package/dist/git/watching/initWatcher.js.map +1 -1
  106. package/dist/git/watching/watchGroup.d.ts.map +1 -1
  107. package/dist/git/watching/watchGroup.js.map +1 -1
  108. package/dist/git/watching/watchService.d.ts +4 -2
  109. package/dist/git/watching/watchService.d.ts.map +1 -1
  110. package/dist/git/watching/watchService.js +31 -6
  111. package/dist/git/watching/watchService.js.map +1 -1
  112. package/dist/git/watching/watchSession.d.ts +14 -12
  113. package/dist/git/watching/watchSession.d.ts.map +1 -1
  114. package/dist/git/watching/watchSession.js +56 -55
  115. package/dist/git/watching/watchSession.js.map +1 -1
  116. package/dist/git-cli/exec/exec.types.d.ts +1 -1
  117. package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
  118. package/dist/git-cli/exec/git.d.ts +3 -3
  119. package/dist/git-cli/exec/git.d.ts.map +1 -1
  120. package/dist/git-cli/exec/git.js.map +1 -1
  121. package/dist/git-cli/exec/gitQueue.d.ts +10 -2
  122. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  123. package/dist/git-cli/exec/gitQueue.js +39 -12
  124. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  125. package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
  126. package/dist/git-cli/parsers/blameParser.js.map +1 -1
  127. package/dist/git-cli/parsers/logParser.js.map +1 -1
  128. package/dist/git-cli/parsers/refParser.d.ts +3 -30
  129. package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
  130. package/dist/git-cli/parsers/refParser.js +30 -30
  131. package/dist/git-cli/parsers/refParser.js.map +1 -1
  132. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  133. package/dist/git-cli/providers/blame.js.map +1 -1
  134. package/dist/git-cli/providers/branches.d.ts +15 -5
  135. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  136. package/dist/git-cli/providers/branches.js +99 -68
  137. package/dist/git-cli/providers/branches.js.map +1 -1
  138. package/dist/git-cli/providers/commits.d.ts +1 -0
  139. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  140. package/dist/git-cli/providers/commits.js +86 -30
  141. package/dist/git-cli/providers/commits.js.map +1 -1
  142. package/dist/git-cli/providers/config.d.ts +19 -6
  143. package/dist/git-cli/providers/config.d.ts.map +1 -1
  144. package/dist/git-cli/providers/config.js +86 -38
  145. package/dist/git-cli/providers/config.js.map +1 -1
  146. package/dist/git-cli/providers/diff.d.ts.map +1 -1
  147. package/dist/git-cli/providers/diff.js +5 -3
  148. package/dist/git-cli/providers/diff.js.map +1 -1
  149. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  150. package/dist/git-cli/providers/graph.js +139 -16
  151. package/dist/git-cli/providers/graph.js.map +1 -1
  152. package/dist/git-cli/providers/operations.d.ts +17 -14
  153. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  154. package/dist/git-cli/providers/operations.js +135 -63
  155. package/dist/git-cli/providers/operations.js.map +1 -1
  156. package/dist/git-cli/providers/patch.d.ts.map +1 -1
  157. package/dist/git-cli/providers/patch.js.map +1 -1
  158. package/dist/git-cli/providers/pausedOperations.d.ts +3 -1
  159. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  160. package/dist/git-cli/providers/pausedOperations.js +7 -1
  161. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  162. package/dist/git-cli/providers/refs.d.ts +19 -2
  163. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  164. package/dist/git-cli/providers/refs.js +286 -2
  165. package/dist/git-cli/providers/refs.js.map +1 -1
  166. package/dist/git-cli/providers/revision.js.map +1 -1
  167. package/dist/git-cli/providers/staging.d.ts +6 -0
  168. package/dist/git-cli/providers/staging.d.ts.map +1 -1
  169. package/dist/git-cli/providers/staging.js +32 -0
  170. package/dist/git-cli/providers/staging.js.map +1 -1
  171. package/dist/git-cli/providers/stash.d.ts.map +1 -1
  172. package/dist/git-cli/providers/stash.js +20 -2
  173. package/dist/git-cli/providers/stash.js.map +1 -1
  174. package/dist/git-cli/providers/status.d.ts +4 -1
  175. package/dist/git-cli/providers/status.d.ts.map +1 -1
  176. package/dist/git-cli/providers/status.js +8 -4
  177. package/dist/git-cli/providers/status.js.map +1 -1
  178. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  179. package/dist/git-cli/providers/tags.js +10 -6
  180. package/dist/git-cli/providers/tags.js.map +1 -1
  181. package/dist/ipc/discovery.d.ts +49 -0
  182. package/dist/ipc/discovery.d.ts.map +1 -0
  183. package/dist/ipc/discovery.js +147 -0
  184. package/dist/ipc/discovery.js.map +1 -0
  185. package/dist/ipc/ipcServer.d.ts +20 -0
  186. package/dist/ipc/ipcServer.d.ts.map +1 -0
  187. package/dist/ipc/ipcServer.js +162 -0
  188. package/dist/ipc/ipcServer.js.map +1 -0
  189. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +167 -0
  190. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -0
  191. package/dist/plus/agents/providers/claudeCodeProvider.js +1786 -0
  192. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -0
  193. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +36 -0
  194. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -0
  195. package/dist/plus/agents/providers/claudeCodeTranscript.js +171 -0
  196. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -0
  197. package/dist/plus/agents/sanitizePrompt.d.ts +15 -0
  198. package/dist/plus/agents/sanitizePrompt.d.ts.map +1 -0
  199. package/dist/plus/agents/sanitizePrompt.js +103 -0
  200. package/dist/plus/agents/sanitizePrompt.js.map +1 -0
  201. package/dist/plus/agents/stateMachine.d.ts +32 -0
  202. package/dist/plus/agents/stateMachine.d.ts.map +1 -0
  203. package/dist/plus/agents/stateMachine.js +180 -0
  204. package/dist/plus/agents/stateMachine.js.map +1 -0
  205. package/dist/plus/agents/types.d.ts +254 -0
  206. package/dist/plus/agents/types.d.ts.map +1 -0
  207. package/dist/plus/agents/types.js +49 -0
  208. package/dist/plus/agents/types.js.map +1 -0
  209. package/dist/plus/ai/errors.d.ts +4 -1
  210. package/dist/plus/ai/errors.d.ts.map +1 -1
  211. package/dist/plus/ai/errors.js +38 -0
  212. package/dist/plus/ai/errors.js.map +1 -1
  213. package/dist/plus/ai/models/model.d.ts +1 -1
  214. package/dist/plus/ai/models/model.d.ts.map +1 -1
  215. package/dist/plus/ai/models/model.js.map +1 -1
  216. package/dist/plus/ai/models/promptTemplates.d.ts +11 -2
  217. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  218. package/dist/plus/ai/models/provider.d.ts +3 -0
  219. package/dist/plus/ai/models/provider.d.ts.map +1 -1
  220. package/dist/plus/ai/prompts.d.ts +1 -0
  221. package/dist/plus/ai/prompts.d.ts.map +1 -1
  222. package/dist/plus/ai/prompts.js +48 -8
  223. package/dist/plus/ai/prompts.js.map +1 -1
  224. package/dist/plus/ai/providers/gitkrakenProvider.d.ts +1 -1
  225. package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
  226. package/dist/plus/ai/providers/gitkrakenProvider.js +4 -1
  227. package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
  228. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +4 -3
  229. package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
  230. package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -6
  231. package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
  232. package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
  233. package/dist/plus/ai/utils/ai.utils.js +2 -0
  234. package/dist/plus/ai/utils/ai.utils.js.map +1 -1
  235. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  236. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  237. package/dist/plus/git-github/api/github.d.ts +12 -1
  238. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  239. package/dist/plus/git-github/api/github.js +245 -51
  240. package/dist/plus/git-github/api/github.js.map +1 -1
  241. package/dist/plus/git-github/api/types.d.ts +8 -0
  242. package/dist/plus/git-github/api/types.d.ts.map +1 -1
  243. package/dist/plus/git-github/models.d.ts +1 -1
  244. package/dist/plus/git-github/models.d.ts.map +1 -1
  245. package/dist/plus/git-github/models.js.map +1 -1
  246. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  247. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  248. package/dist/plus/git-github/providers/github/branches.d.ts +5 -1
  249. package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
  250. package/dist/plus/git-github/providers/github/branches.js +47 -24
  251. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  252. package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
  253. package/dist/plus/git-github/providers/github/commits.js +144 -92
  254. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  255. package/dist/plus/git-github/providers/github/diff.d.ts +1 -1
  256. package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
  257. package/dist/plus/git-github/providers/github/diff.js +23 -9
  258. package/dist/plus/git-github/providers/github/diff.js.map +1 -1
  259. package/dist/plus/git-github/providers/github/refs.d.ts +9 -1
  260. package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
  261. package/dist/plus/git-github/providers/github/refs.js +39 -14
  262. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  263. package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
  264. package/dist/plus/git-github/providers/github/revision.js +1 -2
  265. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  266. package/dist/plus/git-github/providers/github/status.d.ts +4 -1
  267. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  268. package/dist/plus/git-github/providers/github/status.js +1 -1
  269. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  270. package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
  271. package/dist/plus/git-github/providers/github/tags.js +35 -36
  272. package/dist/plus/git-github/providers/github/tags.js.map +1 -1
  273. package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
  274. package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
  275. package/dist/utils/color.d.ts.map +1 -1
  276. package/dist/utils/color.js.map +1 -1
  277. package/dist/utils/date.d.ts.map +1 -1
  278. package/dist/utils/date.js +6 -0
  279. package/dist/utils/date.js.map +1 -1
  280. package/dist/utils/debounce.js +1 -1
  281. package/dist/utils/decorators/serializable.d.ts.map +1 -1
  282. package/dist/utils/decorators/serializable.js.map +1 -1
  283. package/dist/utils/dedupedAsyncCache.d.ts +37 -0
  284. package/dist/utils/dedupedAsyncCache.d.ts.map +1 -0
  285. package/dist/utils/dedupedAsyncCache.js +68 -0
  286. package/dist/utils/dedupedAsyncCache.js.map +1 -0
  287. package/dist/utils/diff.d.ts +2 -0
  288. package/dist/utils/diff.d.ts.map +1 -0
  289. package/dist/utils/diff.js +53 -0
  290. package/dist/utils/diff.js.map +1 -0
  291. package/dist/utils/disposable.d.ts.map +1 -1
  292. package/dist/utils/disposable.js.map +1 -1
  293. package/dist/utils/env/node/exec.d.ts.map +1 -1
  294. package/dist/utils/env/node/exec.js.map +1 -1
  295. package/dist/utils/error.d.ts.map +1 -1
  296. package/dist/utils/error.js.map +1 -1
  297. package/dist/utils/iterable.d.ts +7 -1
  298. package/dist/utils/iterable.d.ts.map +1 -1
  299. package/dist/utils/iterable.js +12 -4
  300. package/dist/utils/iterable.js.map +1 -1
  301. package/dist/utils/logger.d.ts.map +1 -1
  302. package/dist/utils/logger.js.map +1 -1
  303. package/dist/utils/lruMap.d.ts +9 -0
  304. package/dist/utils/lruMap.d.ts.map +1 -1
  305. package/dist/utils/lruMap.js +26 -4
  306. package/dist/utils/lruMap.js.map +1 -1
  307. package/dist/utils/markdown.d.ts.map +1 -1
  308. package/dist/utils/markdown.js.map +1 -1
  309. package/dist/utils/mru.d.ts.map +1 -1
  310. package/dist/utils/mru.js.map +1 -1
  311. package/dist/utils/object.d.ts +22 -1
  312. package/dist/utils/object.d.ts.map +1 -1
  313. package/dist/utils/object.js +56 -3
  314. package/dist/utils/object.js.map +1 -1
  315. package/dist/utils/paging.js +14 -15
  316. package/dist/utils/paging.js.map +1 -1
  317. package/dist/utils/path.d.ts.map +1 -1
  318. package/dist/utils/path.js.map +1 -1
  319. package/dist/utils/promise.d.ts +1 -0
  320. package/dist/utils/promise.d.ts.map +1 -1
  321. package/dist/utils/promise.js +17 -0
  322. package/dist/utils/promise.js.map +1 -1
  323. package/dist/utils/promiseCache.d.ts +10 -0
  324. package/dist/utils/promiseCache.d.ts.map +1 -1
  325. package/dist/utils/promiseCache.js +34 -4
  326. package/dist/utils/promiseCache.js.map +1 -1
  327. package/dist/utils/string.d.ts.map +1 -1
  328. package/dist/utils/string.js +1 -1
  329. package/dist/utils/string.js.map +1 -1
  330. package/dist/utils/uri.d.ts.map +1 -1
  331. package/dist/utils/uri.js.map +1 -1
  332. package/dist/utils/version.d.ts.map +1 -1
  333. package/dist/utils/version.js.map +1 -1
  334. package/package.json +13 -1
  335. package/src/git/cache.ts +192 -90
  336. package/src/git/context.ts +21 -0
  337. package/src/git/features.ts +2 -0
  338. package/src/git/models/commit.ts +1 -0
  339. package/src/git/models/graph.ts +97 -0
  340. package/src/git/models/reference.ts +33 -0
  341. package/src/git/models/remote.ts +1 -0
  342. package/src/git/models/remoteProvider.ts +1 -0
  343. package/src/git/models/repository.ts +105 -96
  344. package/src/git/models/search.ts +2 -2
  345. package/src/git/models/statusFile.ts +12 -0
  346. package/src/git/models/worktree.ts +10 -2
  347. package/src/git/parsers/diffParser.ts +2 -0
  348. package/src/git/providers/branches.ts +22 -4
  349. package/src/git/providers/commits.ts +4 -0
  350. package/src/git/providers/config.ts +3 -5
  351. package/src/git/providers/operations.ts +65 -1
  352. package/src/git/providers/pausedOperations.ts +1 -0
  353. package/src/git/providers/refs.ts +32 -3
  354. package/src/git/providers/staging.ts +12 -0
  355. package/src/git/providers/status.ts +6 -1
  356. package/src/git/remotes/azure-devops.ts +2 -0
  357. package/src/git/remotes/custom.ts +23 -0
  358. package/src/git/{exec.types.ts → run.types.ts} +22 -2
  359. package/src/git/service.ts +1 -0
  360. package/src/git/utils/autolink.utils.ts +1 -0
  361. package/src/git/utils/blame.utils.ts +2 -0
  362. package/src/git/utils/conflictResolution.utils.ts +31 -0
  363. package/src/git/utils/contributor.utils.ts +24 -0
  364. package/src/git/utils/fileStatus.utils.ts +7 -1
  365. package/src/git/utils/reachability.utils.ts +109 -0
  366. package/src/git/utils/search.utils.ts +2 -0
  367. package/src/git/utils/sorting.ts +17 -0
  368. package/src/git/utils/status.utils.ts +1 -0
  369. package/src/git/watching/classifyChange.ts +9 -0
  370. package/src/git/watching/gitIgnoreFilter.ts +2 -2
  371. package/src/git/watching/initWatcher.ts +2 -0
  372. package/src/git/watching/watchGroup.ts +3 -0
  373. package/src/git/watching/watchService.ts +45 -7
  374. package/src/git/watching/watchSession.ts +71 -55
  375. package/src/git-cli/exec/exec.types.ts +2 -2
  376. package/src/git-cli/exec/git.ts +6 -5
  377. package/src/git-cli/exec/gitQueue.ts +41 -12
  378. package/src/git-cli/parsers/blameParser.ts +1 -0
  379. package/src/git-cli/parsers/logParser.ts +1 -0
  380. package/src/git-cli/parsers/refParser.ts +33 -34
  381. package/src/git-cli/providers/blame.ts +1 -0
  382. package/src/git-cli/providers/branches.ts +165 -93
  383. package/src/git-cli/providers/commits.ts +107 -37
  384. package/src/git-cli/providers/config.ts +101 -48
  385. package/src/git-cli/providers/diff.ts +10 -3
  386. package/src/git-cli/providers/graph.ts +156 -16
  387. package/src/git-cli/providers/operations.ts +208 -83
  388. package/src/git-cli/providers/patch.ts +1 -0
  389. package/src/git-cli/providers/pausedOperations.ts +8 -0
  390. package/src/git-cli/providers/refs.ts +247 -3
  391. package/src/git-cli/providers/revision.ts +2 -2
  392. package/src/git-cli/providers/staging.ts +33 -0
  393. package/src/git-cli/providers/stash.ts +20 -2
  394. package/src/git-cli/providers/status.ts +24 -5
  395. package/src/git-cli/providers/tags.ts +15 -16
  396. package/src/ipc/discovery.ts +186 -0
  397. package/src/ipc/ipcServer.ts +171 -0
  398. package/src/plus/agents/providers/claudeCodeProvider.ts +2122 -0
  399. package/src/plus/agents/providers/claudeCodeTranscript.ts +214 -0
  400. package/src/plus/agents/sanitizePrompt.ts +109 -0
  401. package/src/plus/agents/stateMachine.ts +197 -0
  402. package/src/plus/agents/types.ts +325 -0
  403. package/src/plus/ai/errors.ts +40 -0
  404. package/src/plus/ai/models/model.ts +1 -0
  405. package/src/plus/ai/models/promptTemplates.ts +13 -0
  406. package/src/plus/ai/models/provider.ts +7 -1
  407. package/src/plus/ai/prompts.ts +49 -8
  408. package/src/plus/ai/providers/gitkrakenProvider.ts +4 -0
  409. package/src/plus/ai/providers/openAICompatibleProviderBase.ts +21 -4
  410. package/src/plus/ai/utils/ai.utils.ts +2 -0
  411. package/src/plus/ai/utils/results.utils.ts +2 -0
  412. package/src/plus/git-github/api/github.ts +315 -57
  413. package/src/plus/git-github/api/types.ts +15 -0
  414. package/src/plus/git-github/models.ts +1 -1
  415. package/src/plus/git-github/providers/github/blame.ts +2 -0
  416. package/src/plus/git-github/providers/github/branches.ts +61 -31
  417. package/src/plus/git-github/providers/github/commits.ts +231 -160
  418. package/src/plus/git-github/providers/github/diff.ts +27 -19
  419. package/src/plus/git-github/providers/github/refs.ts +58 -23
  420. package/src/plus/git-github/providers/github/revision.ts +1 -2
  421. package/src/plus/git-github/providers/github/status.ts +6 -1
  422. package/src/plus/git-github/providers/github/tags.ts +61 -62
  423. package/src/plus/git-github/providers/githubGitProvider.ts +1 -0
  424. package/src/utils/color.ts +2 -0
  425. package/src/utils/date.ts +5 -0
  426. package/src/utils/debounce.ts +1 -1
  427. package/src/utils/decorators/serializable.ts +1 -0
  428. package/src/utils/dedupedAsyncCache.ts +74 -0
  429. package/src/utils/diff.ts +61 -0
  430. package/src/utils/disposable.ts +2 -0
  431. package/src/utils/env/node/exec.ts +2 -0
  432. package/src/utils/error.ts +1 -0
  433. package/src/utils/iterable.ts +17 -3
  434. package/src/utils/logger.ts +1 -0
  435. package/src/utils/lruMap.ts +29 -4
  436. package/src/utils/markdown.ts +1 -0
  437. package/src/utils/mru.ts +2 -0
  438. package/src/utils/object.ts +55 -4
  439. package/src/utils/paging.ts +14 -14
  440. package/src/utils/path.ts +1 -0
  441. package/src/utils/promise.ts +22 -0
  442. package/src/utils/promiseCache.ts +48 -16
  443. package/src/utils/string.ts +3 -1
  444. package/src/utils/uri.ts +1 -0
  445. package/src/utils/version.ts +1 -0
  446. package/dist/git/exec.types.d.ts.map +0 -1
  447. package/dist/git/exec.types.js +0 -2
  448. package/dist/git/exec.types.js.map +0 -1
@@ -32,9 +32,9 @@ import {
32
32
  getRemoteNameFromBranchName,
33
33
  } from '../../git/utils/branch.utils.js';
34
34
  import { getChangedFilesCount } from '../../git/utils/commit.utils.js';
35
+ import { createReachabilityTableBuilder } from '../../git/utils/reachability.utils.js';
35
36
  import { isUncommitted } from '../../git/utils/revision.utils.js';
36
37
  import { getSearchQueryComparisonKey, parseSearchQueryGitCommand } from '../../git/utils/search.utils.js';
37
- import { compareReachableRefs } from '../../git/utils/sorting.js';
38
38
  import { getTagId } from '../../git/utils/tag.utils.js';
39
39
  import { isUserMatch } from '../../git/utils/user.utils.js';
40
40
  import { getWorktreeId, groupWorktreesByBranch } from '../../git/utils/worktree.utils.js';
@@ -119,9 +119,14 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
119
119
  const [worktrees, worktreesByBranch] = getSettledValue(worktreesResult) ?? [[], new Map<string, GitWorktree>()];
120
120
 
121
121
  let branchIdOfMainWorktree: string | undefined;
122
+ let mainWorktree: GitWorktree | undefined;
122
123
  if (worktreesByBranch != null) {
123
- branchIdOfMainWorktree = find(worktreesByBranch, ([, wt]) => wt.isDefault)?.[0];
124
- if (branchIdOfMainWorktree != null) {
124
+ const defaultEntry = find(worktreesByBranch, ([, wt]) => wt.isDefault);
125
+ if (defaultEntry != null) {
126
+ [branchIdOfMainWorktree, mainWorktree] = defaultEntry;
127
+ // Remove the main/default worktree so the branch-row decoration shows `+checkedout`
128
+ // (not `+worktree`) for the main checkout. `mainWorktree` is retained below purely so
129
+ // Undo Commit can still reach the main worktree's HEAD from a secondary worktree's graph.
125
130
  worktreesByBranch.delete(branchIdOfMainWorktree);
126
131
  }
127
132
  }
@@ -142,9 +147,62 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
142
147
  const avatars = new Map<string, string>();
143
148
  const ids = new Set<string>();
144
149
  const reachableFromHEAD = new Set<string>();
150
+ // SHAs on the first-parent chain from HEAD up to (excluding) the first merge commit — the only
151
+ // commits a plain (non-`--rebase-merges`) interactive rebase can safely rewrite. `headSha` seeds
152
+ // the chain; `rewriteableNextSha` tracks the next sha expected on it. Outer scope so they persist
153
+ // across `more()` pagination, like `reachableFromHEAD`.
154
+ const rewriteableFromHEAD = new Set<string>();
155
+ let headSha: string | undefined;
156
+ let rewriteableNextSha: string | undefined;
157
+ // Undo Commit is offered only on a worktree HEAD that is a LEAF (nothing is built on it) —
158
+ // undoing a commit other work is stacked on is unsafe. The leaf check is only needed for the
159
+ // undo-eligible tips (the active HEAD + each worktree's HEAD), so track just those shas rather
160
+ // than every commit, keeping this O(#worktrees) instead of O(#commits).
161
+ const undoableTipShas = new Set<string>();
162
+ if (headBranch?.sha != null) {
163
+ undoableTipShas.add(headBranch.sha);
164
+ }
165
+ for (const wt of worktrees) {
166
+ if (wt.sha != null) {
167
+ undoableTipShas.add(wt.sha);
168
+ }
169
+ }
170
+ // The subset of `undoableTipShas` that turn out to have a child (are an ancestor of another
171
+ // commit) — i.e. NOT leaves. Built newest-first during the walk, so by the time a tip's row is
172
+ // processed every newer commit (its only possible children) has been seen. Undo is withheld for
173
+ // shas recorded here. Stash rows are excluded (a stash sitting on a tip must not block undoing it).
174
+ const tipShasWithChildren = new Set<string>();
175
+ // SHAs reachable from HEAD's tracking upstream tip. Combined with `reachableFromHEAD`,
176
+ // this lets us mark commits as unpushed (reachable from HEAD but not from HEAD's upstream).
177
+ const reachableFromHeadUpstream = new Set<string>();
145
178
 
146
179
  // Map<sha, Map<refKey, ref>> — inner map deduplicates refs during propagation
147
180
  const reachableRefs = new Map<string, Map<string, ReachableRef>>();
181
+
182
+ // Stable, append-only reachability table built as we walk — the PRIMARY representation shipped to
183
+ // consumers. Lives in the outer scope so it accumulates across `more()` pagination; indices
184
+ // already assigned never change, since git reachability only propagates to older (later-walked)
185
+ // commits. Per-row ref arrays are NOT retained — each row keeps only its set index
186
+ // (`contexts.reachabilityIndex`), and the working `reachableRefs` entry is dropped once emitted.
187
+ // The encoder lives next to its decoder in `reachability.utils` so the wire format can't drift.
188
+ const reachabilityBuilder = createReachabilityTableBuilder();
189
+
190
+ function finalizeRowReachability(
191
+ row: GitGraphRow,
192
+ sha: string,
193
+ refs: Map<string, ReachableRef> | undefined,
194
+ ): void {
195
+ const setIndex = reachabilityBuilder.intern(refs?.values());
196
+ if (setIndex != null) {
197
+ (row.contexts ??= {}).reachabilityIndex = setIndex;
198
+ }
199
+ // Drop the transient per-row arrays so emitted rows don't retain reachability, and release the
200
+ // working entry — once a commit is emitted its children are all walked and its parents already
201
+ // seeded, so nothing reads `reachableRefs.get(sha)` again (orderings keep parents after children).
202
+ row.reachability = undefined;
203
+ reachableRefs.delete(sha);
204
+ }
205
+
148
206
  const rowStats: GitGraphRowsStats = new Map<string, GitGraphRowStats>();
149
207
  let pendingRowsStatsCount = 0;
150
208
  let iterations = 0;
@@ -224,6 +282,12 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
224
282
  branchIdOfMainWorktree: branchIdOfMainWorktree,
225
283
  stashes: gitStash?.stashes,
226
284
  reachableFromHEAD: reachableFromHEAD,
285
+ rewriteableFromHEAD: rewriteableFromHEAD,
286
+ tipShasWithChildren: tipShasWithChildren,
287
+ // `undefined` when HEAD has no upstream, so the processor flags nothing as
288
+ // unpublished; otherwise the live set (mutated during the walk, read by ref).
289
+ reachableFromHeadUpstream:
290
+ headRefUpstreamName != null ? reachableFromHeadUpstream : undefined,
227
291
  avatars: avatars,
228
292
  }
229
293
  : undefined;
@@ -234,7 +298,14 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
234
298
  // - SHA + limit = 0: Find SHA, stop immediately
235
299
  // - No SHA + limit > 0: Load exactly `limit` commits
236
300
  // - No SHA + limit = 0: Load everything remaining
237
- if ((limit && count >= limit && (!sha || found)) || (!limit && sha && found)) {
301
+ // - SHA + limit > 0 + still unfound past 10× limit: defensive cap so an unreachable
302
+ // SHA (e.g. a stale merge-base the webview hasn't yet seen invalidated) can't
303
+ // walk the entire history. `hasMore=true` lets callers retry; the graph-wrapper
304
+ // side deduplicates re-requests so the cap doesn't loop.
305
+ if (
306
+ (limit && count >= limit && (!sha || found || count >= limit * 10)) ||
307
+ (!limit && sha && found)
308
+ ) {
238
309
  hasMore = true;
239
310
  aborter.abort();
240
311
  break;
@@ -250,6 +321,7 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
250
321
  total++;
251
322
  shaOrRemapped = remappedIds.get(commit.sha);
252
323
  if (shaOrRemapped && ids.has(shaOrRemapped)) continue;
324
+
253
325
  shaOrRemapped ??= commit.sha;
254
326
 
255
327
  ids.add(shaOrRemapped);
@@ -280,6 +352,7 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
280
352
  if (tip.startsWith('HEAD')) {
281
353
  head = true;
282
354
  reachableFromHEAD.add(shaOrRemapped);
355
+ headSha ??= shaOrRemapped;
283
356
 
284
357
  if (tip !== 'HEAD') {
285
358
  tip = tip.substring(8);
@@ -294,12 +367,16 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
294
367
  if (branchName === 'HEAD') continue;
295
368
 
296
369
  remoteBranchId = getBranchId(repoPath, true, tip);
370
+ const isHeadUpstream = tip === headRefUpstreamName;
371
+ if (isHeadUpstream) {
372
+ reachableFromHeadUpstream.add(shaOrRemapped);
373
+ }
297
374
  refRemoteHead = {
298
375
  id: remoteBranchId,
299
376
  name: branchName,
300
377
  owner: remote.name,
301
378
  url: remote.url,
302
- current: tip === headRefUpstreamName,
379
+ current: isHeadUpstream,
303
380
  hostingServiceType: remote.provider?.gkProviderId,
304
381
  };
305
382
  refRemoteHeads.push(refRemoteHead);
@@ -310,7 +387,16 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
310
387
 
311
388
  branch = branchMap.get(tip);
312
389
  branchId = branch?.id ?? getBranchId(repoPath, false, tip);
313
- const worktree = worktreesByBranch?.get(branchId);
390
+ // `worktreesByBranch` has the main/default worktree removed (above), so recover it
391
+ // here — Undo Commit needs to reach the main worktree's HEAD even when the active
392
+ // workspace is a secondary worktree.
393
+ const worktree =
394
+ worktreesByBranch?.get(branchId) ??
395
+ (branchId === branchIdOfMainWorktree ? mainWorktree : undefined);
396
+ const worktreeRef =
397
+ worktree != null
398
+ ? { id: getWorktreeId(repoPath, worktree.name), path: worktree.path }
399
+ : undefined;
314
400
  refHead = {
315
401
  id: branchId,
316
402
  name: tip,
@@ -322,7 +408,12 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
322
408
  id: getBranchId(repoPath, true, branch.upstream.name),
323
409
  }
324
410
  : undefined,
325
- worktreeId: worktree != null ? getWorktreeId(repoPath, worktree.name) : undefined,
411
+ worktree: worktreeRef,
412
+ // Mirror `worktree.id` for `@gitkraken/gitkraken-components` — its bundled renderer
413
+ // reads `head.worktreeId` to pick the WORKTREE vs HEAD ref-badge. Scope to NON-default
414
+ // worktrees so the main checkout keeps its HEAD badge even though `worktree` (above)
415
+ // is populated for it for Undo routing.
416
+ worktreeId: worktree?.isDefault === false ? worktreeRef?.id : undefined,
326
417
  };
327
418
  refHeads.push(refHead);
328
419
  if (branch?.upstream?.name != null) {
@@ -345,6 +436,27 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
345
436
  }
346
437
  }
347
438
 
439
+ // First-parent rewriteable chain from HEAD: include each commit only while HEAD and
440
+ // every commit down to it has exactly one parent. Stops at (excludes) the first merge
441
+ // and the root — mirrors GitKraken's getDistinctCommitsFromHeadToFirstMergeCommit.
442
+ // Off-chain commits (a merge's other-parent ancestry, or anything below the first merge)
443
+ // are reachable-from-HEAD but NOT safely history-rewriteable by a plain interactive
444
+ // rebase. Relies on the same "commit emitted before its parents" ordering as above.
445
+ if (shaOrRemapped === headSha || shaOrRemapped === rewriteableNextSha) {
446
+ if (parents.length === 1) {
447
+ rewriteableFromHEAD.add(shaOrRemapped);
448
+ rewriteableNextSha = parents[0];
449
+ } else {
450
+ // A merge (>1 parents) or the root (0 parents) terminates the chain.
451
+ rewriteableNextSha = undefined;
452
+ }
453
+ }
454
+ if (reachableFromHeadUpstream.has(shaOrRemapped)) {
455
+ for (parent of parents) {
456
+ reachableFromHeadUpstream.add(parent);
457
+ }
458
+ }
459
+
348
460
  // Seed reachability from all ref types on this commit
349
461
  if (refHeads.length > 0 || refRemoteHeads.length > 0 || refTags.length > 0) {
350
462
  let refs = reachableRefs.get(shaOrRemapped);
@@ -398,12 +510,13 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
398
510
  heads: refHeads,
399
511
  remotes: refRemoteHeads,
400
512
  tags: refTags,
401
- reachability: refs?.size
402
- ? { partial: true, refs: [...refs.values()].sort(compareReachableRefs) }
403
- : undefined,
513
+ // Transient: the row processor's `+unique` decision reads this; stripped just below.
514
+ // Unsorted (the consumer re-sorts after decoding) — order doesn't affect interning.
515
+ reachability: refs?.size ? { partial: true, refs: [...refs.values()] } : undefined,
404
516
  isCurrentUser: true,
405
517
  };
406
518
  rowProcessor?.processRow(row, graphCtx!);
519
+ finalizeRowReachability(row, shaOrRemapped, refs);
407
520
  rows.push(row);
408
521
 
409
522
  if (stash.stats != null) {
@@ -416,6 +529,17 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
416
529
  } else {
417
530
  isCurrentUser = isUserMatch(currentUser, commit.author, commit.authorEmail);
418
531
 
532
+ // Mark any undo-eligible tip that THIS (non-stash) commit builds on as non-leaf, so
533
+ // its Undo Commit is withheld. Uses the full parent set (incl. merge second-parents)
534
+ // but only records shas that are actually undo tips — newer commits are walked first,
535
+ // so a tip is recorded before its own row is processed. Stash rows are intentionally
536
+ // not handled here, so a stash based on a tip doesn't block undoing that tip.
537
+ for (parent of parents) {
538
+ if (undoableTipShas.has(parent)) {
539
+ tipShasWithChildren.add(parent);
540
+ }
541
+ }
542
+
419
543
  const refs = reachableRefs.get(shaOrRemapped);
420
544
  const row: GitGraphRow = {
421
545
  sha: shaOrRemapped,
@@ -429,12 +553,13 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
429
553
  heads: refHeads,
430
554
  remotes: refRemoteHeads,
431
555
  tags: refTags,
432
- reachability: refs?.size
433
- ? { partial: true, refs: [...refs.values()].sort(compareReachableRefs) }
434
- : undefined,
556
+ // Transient: the row processor's `+unique` decision reads this; stripped just below.
557
+ // Unsorted (the consumer re-sorts after decoding) — order doesn't affect interning.
558
+ reachability: refs?.size ? { partial: true, refs: [...refs.values()] } : undefined,
435
559
  isCurrentUser: isCurrentUser || undefined,
436
560
  };
437
561
  rowProcessor?.processRow(row, graphCtx!);
562
+ finalizeRowReachability(row, shaOrRemapped, refs);
438
563
  rows.push(row);
439
564
 
440
565
  if (commit.stats != null) {
@@ -452,7 +577,7 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
452
577
  if (deferStats) {
453
578
  pendingRowsStatsCount++;
454
579
 
455
- // eslint-disable-next-line no-async-promise-executor
580
+ // oxlint-disable-next-line no-async-promise-executor
456
581
  const promise = new Promise<void>(async resolve => {
457
582
  try {
458
583
  const args = [...statsParser.arguments];
@@ -464,7 +589,7 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
464
589
  args.push(`--${ordering}-order`, '--all');
465
590
 
466
591
  const statsResult = await this.git.run(
467
- { cwd: repoPath, configs: gitConfigsLog, stdin: stdin },
592
+ { cwd: repoPath, configs: gitConfigsLog, stdin: stdin, priority: 'background' },
468
593
  'log',
469
594
  stdin ? '--stdin' : undefined,
470
595
  ...args,
@@ -506,6 +631,8 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
506
631
  worktrees: worktrees,
507
632
  worktreesByBranch: worktreesByBranch,
508
633
  reachableFromHEAD: reachableFromHEAD,
634
+ rewriteableFromHEAD: rewriteableFromHEAD,
635
+ reachability: reachabilityBuilder.build(),
509
636
  rows: rows,
510
637
  id: sha ?? rev,
511
638
  rowsStats: rowStats,
@@ -530,7 +657,19 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
530
657
  }
531
658
  }
532
659
 
533
- return getCommitsForGraphCore.call(this, defaultLimit, selectSha, undefined, cancellation);
660
+ let graph = await getCommitsForGraphCore.call(this, defaultLimit, selectSha, undefined, cancellation);
661
+
662
+ // Spurious-empty guard: the repo has branches (so `git log --all` should yield commits) yet the
663
+ // log returned no rows. That's an inconsistent result — almost always a transient ref-read race
664
+ // while a concurrent git operation rewrites refs/packed-refs — not a genuinely empty repo.
665
+ // Returning it would flash "No commits" in the graph. Retry once (transient glitches clear within
666
+ // ms). A truly empty repo has no branches and is left untouched.
667
+ if (graph.rows.length === 0 && branches?.length && !cancellation?.aborted) {
668
+ scope?.warn(`graph returned 0 rows but repo has ${branches.length} branches; retrying`);
669
+ graph = await getCommitsForGraphCore.call(this, defaultLimit, selectSha, undefined, cancellation);
670
+ }
671
+
672
+ return graph;
534
673
  }
535
674
 
536
675
  @debug({
@@ -725,6 +864,7 @@ export class GraphGitSubProvider implements GitGraphSubProvider {
725
864
  runningTotal: results.size,
726
865
  hasMore: true,
727
866
  };
867
+
728
868
  batch.length = 0;
729
869
  lastProgressTime = Date.now();
730
870
  }