@gitkraken/core-gitlens 0.5.109 → 0.5.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -1
- package/dist/git/cache.d.ts +111 -6
- package/dist/git/cache.d.ts.map +1 -1
- package/dist/git/cache.js +312 -43
- package/dist/git/cache.js.map +1 -1
- package/dist/git/context.d.ts +11 -0
- package/dist/git/context.d.ts.map +1 -1
- package/dist/git/context.js.map +1 -1
- package/dist/git/models/fileStatus.d.ts +1 -0
- package/dist/git/models/fileStatus.d.ts.map +1 -1
- package/dist/git/models/fileStatus.js +1 -0
- package/dist/git/models/fileStatus.js.map +1 -1
- package/dist/git/models/issue.d.ts +4 -0
- package/dist/git/models/issue.d.ts.map +1 -1
- package/dist/git/models/mergeConflicts.d.ts +2 -0
- package/dist/git/models/mergeConflicts.d.ts.map +1 -1
- package/dist/git/models/pullRequest.d.ts +119 -2
- package/dist/git/models/pullRequest.d.ts.map +1 -1
- package/dist/git/models/pullRequest.js +27 -1
- package/dist/git/models/pullRequest.js.map +1 -1
- package/dist/git/models/repository.d.ts +32 -5
- package/dist/git/models/repository.d.ts.map +1 -1
- package/dist/git/models/repository.js +58 -12
- package/dist/git/models/repository.js.map +1 -1
- package/dist/git/models/statusFile.d.ts.map +1 -1
- package/dist/git/models/statusFile.js +3 -0
- package/dist/git/models/statusFile.js.map +1 -1
- package/dist/git/providers/branches.d.ts +2 -0
- package/dist/git/providers/branches.d.ts.map +1 -1
- package/dist/git/providers/commits.d.ts +8 -0
- package/dist/git/providers/commits.d.ts.map +1 -1
- package/dist/git/providers/config.d.ts +19 -1
- package/dist/git/providers/config.d.ts.map +1 -1
- package/dist/git/providers/operations.d.ts +1 -0
- package/dist/git/providers/operations.d.ts.map +1 -1
- package/dist/git/providers/pausedOperations.d.ts +2 -0
- package/dist/git/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git/providers/status.d.ts +1 -0
- package/dist/git/providers/status.d.ts.map +1 -1
- package/dist/git/utils/config.utils.d.ts +3 -0
- package/dist/git/utils/config.utils.d.ts.map +1 -0
- package/dist/git/utils/config.utils.js +8 -0
- package/dist/git/utils/config.utils.js.map +1 -0
- package/dist/git/utils/issue.utils.d.ts.map +1 -1
- package/dist/git/utils/issue.utils.js +2 -0
- package/dist/git/utils/issue.utils.js.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.d.ts +14 -0
- package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.js +23 -0
- package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
- package/dist/git/utils/pullRequest.utils.d.ts +24 -1
- package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/pullRequest.utils.js +71 -0
- package/dist/git/utils/pullRequest.utils.js.map +1 -1
- package/dist/git/watching/changeEvent.d.ts +6 -1
- package/dist/git/watching/changeEvent.d.ts.map +1 -1
- package/dist/git/watching/classifyChange.d.ts.map +1 -1
- package/dist/git/watching/classifyChange.js +14 -1
- package/dist/git/watching/classifyChange.js.map +1 -1
- package/dist/git/watching/watchService.d.ts.map +1 -1
- package/dist/git/watching/watchService.js +18 -3
- package/dist/git/watching/watchService.js.map +1 -1
- package/dist/git/watching/watchSession.d.ts +8 -1
- package/dist/git/watching/watchSession.d.ts.map +1 -1
- package/dist/git/watching/watchSession.js +38 -6
- package/dist/git/watching/watchSession.js.map +1 -1
- package/dist/git/watching/watcherPatterns.d.ts +2 -2
- package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
- package/dist/git/watching/watcherPatterns.js +1 -1
- package/dist/git/watching/watcherPatterns.js.map +1 -1
- package/dist/git-cli/exec/git.d.ts +1 -1
- package/dist/git-cli/exec/git.d.ts.map +1 -1
- package/dist/git-cli/exec/git.js +13 -3
- package/dist/git-cli/exec/git.js.map +1 -1
- package/dist/git-cli/providers/branches.d.ts +19 -0
- package/dist/git-cli/providers/branches.d.ts.map +1 -1
- package/dist/git-cli/providers/branches.js +282 -78
- package/dist/git-cli/providers/branches.js.map +1 -1
- package/dist/git-cli/providers/commits.d.ts +4 -0
- package/dist/git-cli/providers/commits.d.ts.map +1 -1
- package/dist/git-cli/providers/commits.js +84 -11
- package/dist/git-cli/providers/commits.js.map +1 -1
- package/dist/git-cli/providers/config.d.ts +42 -0
- package/dist/git-cli/providers/config.d.ts.map +1 -1
- package/dist/git-cli/providers/config.js +186 -5
- package/dist/git-cli/providers/config.js.map +1 -1
- package/dist/git-cli/providers/contributors.d.ts.map +1 -1
- package/dist/git-cli/providers/contributors.js +1 -1
- package/dist/git-cli/providers/contributors.js.map +1 -1
- package/dist/git-cli/providers/graph.d.ts +2 -2
- package/dist/git-cli/providers/graph.d.ts.map +1 -1
- package/dist/git-cli/providers/graph.js +27 -9
- package/dist/git-cli/providers/graph.js.map +1 -1
- package/dist/git-cli/providers/operations.d.ts.map +1 -1
- package/dist/git-cli/providers/operations.js +40 -12
- package/dist/git-cli/providers/operations.js.map +1 -1
- package/dist/git-cli/providers/pausedOperations.d.ts +5 -0
- package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git-cli/providers/pausedOperations.js +87 -16
- package/dist/git-cli/providers/pausedOperations.js.map +1 -1
- package/dist/git-cli/providers/refs.d.ts +5 -3
- package/dist/git-cli/providers/refs.d.ts.map +1 -1
- package/dist/git-cli/providers/refs.js +33 -4
- package/dist/git-cli/providers/refs.js.map +1 -1
- package/dist/git-cli/providers/status.d.ts +1 -0
- package/dist/git-cli/providers/status.d.ts.map +1 -1
- package/dist/git-cli/providers/status.js +18 -3
- package/dist/git-cli/providers/status.js.map +1 -1
- package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
- package/dist/git-cli/providers/worktrees.js +4 -0
- package/dist/git-cli/providers/worktrees.js.map +1 -1
- package/dist/git-cli/service.d.ts.map +1 -1
- package/dist/git-cli/service.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts +39 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.js +978 -71
- package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +24 -2
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.js +84 -9
- package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
- package/dist/plus/agents/types.d.ts +37 -2
- package/dist/plus/agents/types.d.ts.map +1 -1
- package/dist/plus/agents/types.js +2 -0
- package/dist/plus/agents/types.js.map +1 -1
- package/dist/plus/ai/errors.d.ts +10 -0
- package/dist/plus/ai/errors.d.ts.map +1 -1
- package/dist/plus/ai/errors.js +29 -0
- package/dist/plus/ai/errors.js.map +1 -1
- package/dist/plus/ai/models/model.d.ts +4 -0
- package/dist/plus/ai/models/model.d.ts.map +1 -1
- package/dist/plus/ai/models/model.js +51 -6
- package/dist/plus/ai/models/model.js.map +1 -1
- package/dist/plus/ai/models/promptTemplates.d.ts +1 -1
- package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
- package/dist/plus/ai/models/provider.d.ts +60 -2
- package/dist/plus/ai/models/provider.d.ts.map +1 -1
- package/dist/plus/ai/prompts.d.ts +12 -0
- package/dist/plus/ai/prompts.d.ts.map +1 -1
- package/dist/plus/ai/prompts.js +177 -61
- package/dist/plus/ai/prompts.js.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.d.ts +10 -2
- package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.js +139 -46
- package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.d.ts +2 -0
- package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.js +10 -21
- package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.d.ts +1 -0
- package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.js +19 -0
- package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.d.ts +5 -1
- package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.js +118 -3
- package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -0
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.js +5 -0
- package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.d.ts +3 -1
- package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.js +99 -19
- package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.d.ts +4 -3
- package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.js +38 -3
- package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.d.ts +1 -0
- package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.js +4 -0
- package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +154 -5
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js +259 -10
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.d.ts +4 -0
- package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.js +9 -0
- package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.d.ts +1 -0
- package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.js +1 -0
- package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
- package/dist/plus/ai/providers/responseFormatCache.d.ts +8 -0
- package/dist/plus/ai/providers/responseFormatCache.d.ts.map +1 -0
- package/dist/plus/ai/providers/responseFormatCache.js +25 -0
- package/dist/plus/ai/providers/responseFormatCache.js.map +1 -0
- package/dist/plus/ai/providers/xaiProvider.d.ts +1 -0
- package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/xaiProvider.js +10 -1
- package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
- package/dist/plus/ai/utils/ai.utils.d.ts +3 -0
- package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/ai.utils.js +13 -0
- package/dist/plus/ai/utils/ai.utils.js.map +1 -1
- package/dist/plus/ai/utils/results.utils.d.ts +16 -2
- package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/results.utils.js +204 -28
- package/dist/plus/ai/utils/results.utils.js.map +1 -1
- package/dist/plus/git-github/api/github.d.ts +92 -4
- package/dist/plus/git-github/api/github.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.js +324 -20
- package/dist/plus/git-github/api/github.js.map +1 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts +27 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts.map +1 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.js +73 -6
- package/dist/plus/git-github/api/pullRequestSearchQuery.js.map +1 -1
- package/dist/plus/git-github/models.d.ts +33 -5
- package/dist/plus/git-github/models.d.ts.map +1 -1
- package/dist/plus/git-github/models.js +43 -4
- package/dist/plus/git-github/models.js.map +1 -1
- package/dist/plus/git-github/providers/github/status.d.ts +1 -0
- package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/status.js.map +1 -1
- package/dist/plus/integrations/context.d.ts +4 -0
- package/dist/plus/integrations/context.d.ts.map +1 -1
- package/dist/plus/integrations/index.d.ts.map +1 -1
- package/dist/plus/integrations/index.js +2 -0
- package/dist/plus/integrations/index.js.map +1 -1
- package/dist/plus/integrations/integrationService.d.ts +16 -1
- package/dist/plus/integrations/integrationService.d.ts.map +1 -1
- package/dist/plus/integrations/integrationService.js +9 -1
- package/dist/plus/integrations/integrationService.js.map +1 -1
- package/dist/plus/integrations/manager.d.ts +45 -5
- package/dist/plus/integrations/manager.d.ts.map +1 -1
- package/dist/plus/integrations/models/gitHostIntegration.d.ts +18 -3
- package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
- package/dist/plus/integrations/models/gitHostIntegration.js +30 -2
- package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
- package/dist/plus/integrations/models/integration.d.ts +4 -2
- package/dist/plus/integrations/models/integration.d.ts.map +1 -1
- package/dist/plus/integrations/models/integration.js +2 -2
- package/dist/plus/integrations/models/integration.js.map +1 -1
- package/dist/plus/integrations/providerFilters.d.ts +1 -1
- package/dist/plus/integrations/providerFilters.d.ts.map +1 -1
- package/dist/plus/integrations/providers/accounts.d.ts +6 -0
- package/dist/plus/integrations/providers/accounts.d.ts.map +1 -0
- package/dist/plus/integrations/providers/accounts.js +34 -0
- package/dist/plus/integrations/providers/accounts.js.map +1 -0
- package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/azure/models.js +3 -0
- package/dist/plus/integrations/providers/azure/models.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/models.js +1 -0
- package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
- package/dist/plus/integrations/providers/github.d.ts +23 -2
- package/dist/plus/integrations/providers/github.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github.js +169 -138
- package/dist/plus/integrations/providers/github.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab.d.ts +9 -0
- package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab.js +23 -4
- package/dist/plus/integrations/providers/gitlab.js.map +1 -1
- package/dist/plus/integrations/providers/models.d.ts +14 -32
- package/dist/plus/integrations/providers/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/models.js +66 -109
- package/dist/plus/integrations/providers/models.js.map +1 -1
- package/dist/plus/integrations/providers/pullRequestReviews.d.ts +50 -0
- package/dist/plus/integrations/providers/pullRequestReviews.d.ts.map +1 -0
- package/dist/plus/integrations/providers/pullRequestReviews.js +99 -0
- package/dist/plus/integrations/providers/pullRequestReviews.js.map +1 -0
- package/dist/plus/integrations/reads/broaden.d.ts.map +1 -1
- package/dist/plus/integrations/reads/broaden.js +6 -1
- package/dist/plus/integrations/reads/broaden.js.map +1 -1
- package/dist/plus/integrations/reads/counts.d.ts +55 -0
- package/dist/plus/integrations/reads/counts.d.ts.map +1 -1
- package/dist/plus/integrations/reads/counts.js +146 -2
- package/dist/plus/integrations/reads/counts.js.map +1 -1
- package/dist/plus/integrations/reads/drains.d.ts +7 -1
- package/dist/plus/integrations/reads/drains.d.ts.map +1 -1
- package/dist/plus/integrations/reads/drains.js +20 -6
- package/dist/plus/integrations/reads/drains.js.map +1 -1
- package/dist/plus/integrations/reads/filters.d.ts.map +1 -1
- package/dist/plus/integrations/reads/filters.js +22 -0
- package/dist/plus/integrations/reads/filters.js.map +1 -1
- package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -1
- package/dist/plus/integrations/reads/hierarchy.js +3 -1
- package/dist/plus/integrations/reads/hierarchy.js.map +1 -1
- package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
- package/dist/plus/integrations/reads/issueTracker.js +8 -3
- package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
- package/dist/plus/integrations/reads/issues.d.ts.map +1 -1
- package/dist/plus/integrations/reads/issues.js +9 -4
- package/dist/plus/integrations/reads/issues.js.map +1 -1
- package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -1
- package/dist/plus/integrations/reads/pullRequests.js +9 -4
- package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
- package/dist/plus/integrations/reads/searchPullRequests.d.ts +4 -3
- package/dist/plus/integrations/reads/searchPullRequests.d.ts.map +1 -1
- package/dist/plus/integrations/reads/searchPullRequests.js +6 -4
- package/dist/plus/integrations/reads/searchPullRequests.js.map +1 -1
- package/dist/plus/integrations/reads/sweeps.js +1 -1
- package/dist/plus/integrations/reads/sweeps.js.map +1 -1
- package/dist/plus/integrations/reads/warnings.d.ts +2 -2
- package/dist/plus/integrations/reads/warnings.d.ts.map +1 -1
- package/dist/plus/integrations/reads/warnings.js +11 -2
- package/dist/plus/integrations/reads/warnings.js.map +1 -1
- package/dist/plus/integrations/results.d.ts +6 -1
- package/dist/plus/integrations/results.d.ts.map +1 -1
- package/dist/plus/integrations/results.js.map +1 -1
- package/dist/utils/env/browser/base64.d.ts +1 -1
- package/dist/utils/env/browser/base64.d.ts.map +1 -1
- package/dist/utils/env/node/base64.d.ts +1 -1
- package/dist/utils/env/node/base64.d.ts.map +1 -1
- package/dist/utils/env/node/base64.js +2 -0
- package/dist/utils/env/node/base64.js.map +1 -1
- package/dist/utils/keys/chord.d.ts +52 -0
- package/dist/utils/keys/chord.d.ts.map +1 -0
- package/dist/utils/keys/chord.js +135 -0
- package/dist/utils/keys/chord.js.map +1 -0
- package/dist/utils/keys/keybinding.d.ts +53 -0
- package/dist/utils/keys/keybinding.d.ts.map +1 -0
- package/dist/utils/keys/keybinding.js +58 -0
- package/dist/utils/keys/keybinding.js.map +1 -0
- package/dist/utils/path.d.ts +11 -0
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +13 -0
- package/dist/utils/path.js.map +1 -1
- package/docs/integrations.md +76 -10
- package/docs/kepler-read-api-parity.md +9 -0
- package/package.json +13 -5
- package/src/git/cache.ts +383 -47
- package/src/git/context.ts +11 -0
- package/src/git/models/fileStatus.ts +1 -0
- package/src/git/models/issue.ts +4 -0
- package/src/git/models/mergeConflicts.ts +3 -2
- package/src/git/models/pullRequest.ts +117 -1
- package/src/git/models/repository.ts +58 -17
- package/src/git/models/statusFile.ts +3 -0
- package/src/git/providers/branches.ts +6 -0
- package/src/git/providers/commits.ts +11 -0
- package/src/git/providers/config.ts +18 -0
- package/src/git/providers/operations.ts +1 -0
- package/src/git/providers/pausedOperations.ts +2 -0
- package/src/git/providers/status.ts +1 -0
- package/src/git/utils/config.utils.ts +8 -0
- package/src/git/utils/issue.utils.ts +2 -0
- package/src/git/utils/pausedOperationStatus.utils.ts +28 -0
- package/src/git/utils/pullRequest.utils.ts +86 -0
- package/src/git/watching/changeEvent.ts +6 -1
- package/src/git/watching/classifyChange.ts +15 -1
- package/src/git/watching/watchService.ts +20 -3
- package/src/git/watching/watchSession.ts +41 -6
- package/src/git/watching/watcherPatterns.ts +1 -1
- package/src/git-cli/exec/git.ts +13 -3
- package/src/git-cli/providers/branches.ts +384 -132
- package/src/git-cli/providers/commits.ts +106 -15
- package/src/git-cli/providers/config.ts +229 -8
- package/src/git-cli/providers/contributors.ts +5 -1
- package/src/git-cli/providers/graph.ts +26 -13
- package/src/git-cli/providers/operations.ts +45 -20
- package/src/git-cli/providers/pausedOperations.ts +109 -17
- package/src/git-cli/providers/refs.ts +33 -3
- package/src/git-cli/providers/status.ts +25 -4
- package/src/git-cli/providers/worktrees.ts +5 -0
- package/src/git-cli/service.ts +0 -1
- package/src/plus/agents/providers/claudeCodeProvider.ts +1130 -87
- package/src/plus/agents/providers/claudeCodeTranscript.ts +95 -9
- package/src/plus/agents/types.ts +46 -2
- package/src/plus/ai/errors.ts +30 -0
- package/src/plus/ai/models/model.ts +56 -6
- package/src/plus/ai/models/promptTemplates.ts +1 -1
- package/src/plus/ai/models/provider.ts +69 -2
- package/src/plus/ai/prompts.ts +186 -61
- package/src/plus/ai/providers/anthropicProvider.ts +155 -47
- package/src/plus/ai/providers/deepSeekProvider.ts +11 -21
- package/src/plus/ai/providers/geminiProvider.ts +19 -0
- package/src/plus/ai/providers/gitkrakenProvider.ts +126 -3
- package/src/plus/ai/providers/huggingFaceProvider.ts +6 -0
- package/src/plus/ai/providers/mistralProvider.ts +102 -19
- package/src/plus/ai/providers/ollamaProvider.ts +55 -4
- package/src/plus/ai/providers/openAICompatibleProvider.ts +5 -0
- package/src/plus/ai/providers/openAICompatibleProviderBase.ts +360 -17
- package/src/plus/ai/providers/openRouterProvider.ts +17 -0
- package/src/plus/ai/providers/openaiProvider.ts +1 -0
- package/src/plus/ai/providers/responseFormatCache.ts +39 -0
- package/src/plus/ai/providers/xaiProvider.ts +10 -1
- package/src/plus/ai/utils/ai.utils.ts +14 -0
- package/src/plus/ai/utils/results.utils.ts +255 -31
- package/src/plus/git-github/api/github.ts +467 -23
- package/src/plus/git-github/api/pullRequestSearchQuery.ts +81 -7
- package/src/plus/git-github/models.ts +77 -7
- package/src/plus/git-github/providers/github/status.ts +1 -0
- package/src/plus/integrations/context.ts +4 -0
- package/src/plus/integrations/index.ts +2 -0
- package/src/plus/integrations/integrationService.ts +25 -2
- package/src/plus/integrations/manager.ts +50 -5
- package/src/plus/integrations/models/gitHostIntegration.ts +54 -2
- package/src/plus/integrations/models/integration.ts +24 -13
- package/src/plus/integrations/providerFilters.ts +6 -1
- package/src/plus/integrations/providers/accounts.ts +38 -0
- package/src/plus/integrations/providers/azure/models.ts +3 -0
- package/src/plus/integrations/providers/bitbucket/models.ts +1 -0
- package/src/plus/integrations/providers/github.ts +218 -145
- package/src/plus/integrations/providers/gitlab.ts +30 -20
- package/src/plus/integrations/providers/models.ts +99 -127
- package/src/plus/integrations/providers/pullRequestReviews.ts +122 -0
- package/src/plus/integrations/reads/broaden.ts +6 -1
- package/src/plus/integrations/reads/counts.ts +273 -2
- package/src/plus/integrations/reads/drains.ts +19 -6
- package/src/plus/integrations/reads/filters.ts +22 -0
- package/src/plus/integrations/reads/hierarchy.ts +3 -1
- package/src/plus/integrations/reads/issueTracker.ts +9 -3
- package/src/plus/integrations/reads/issues.ts +9 -4
- package/src/plus/integrations/reads/pullRequests.ts +9 -4
- package/src/plus/integrations/reads/searchPullRequests.ts +12 -4
- package/src/plus/integrations/reads/sweeps.ts +1 -1
- package/src/plus/integrations/reads/warnings.ts +12 -1
- package/src/plus/integrations/results.ts +6 -1
- package/src/utils/env/browser/base64.ts +1 -1
- package/src/utils/env/node/base64.ts +3 -1
- package/src/utils/keys/chord.ts +184 -0
- package/src/utils/keys/keybinding.ts +116 -0
- package/src/utils/path.ts +14 -0
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
CursorPageInput,
|
|
14
14
|
EnterpriseOptions,
|
|
15
15
|
GetRepoInput,
|
|
16
|
+
GitBuildStatus,
|
|
16
17
|
GitBuildStatusState as GitBuildStatusStateType,
|
|
17
18
|
GitHub,
|
|
18
19
|
GitIssueState as GitIssueStateType,
|
|
@@ -41,26 +42,22 @@ import type {
|
|
|
41
42
|
SetPullRequestInput,
|
|
42
43
|
Trello,
|
|
43
44
|
} from '@gitkraken/provider-apis';
|
|
44
|
-
import
|
|
45
|
-
import
|
|
45
|
+
import { EntityIdentifierUtils } from '@gitkraken/provider-apis/entity-identifiers';
|
|
46
|
+
import { GitProviderUtils } from '@gitkraken/provider-apis/provider-utils';
|
|
46
47
|
import { githubSearchResultLimit } from '../../git-github/api/config.js';
|
|
47
48
|
import type { Account as UserAccount } from '../../../git/models/author.js';
|
|
48
|
-
import type {
|
|
49
|
+
import type { IssueProject, IssueShape, IssueStateFilter } from '../../../git/models/issue.js';
|
|
49
50
|
import { Issue, RepositoryAccessLevel } from '../../../git/models/issue.js';
|
|
50
51
|
import type {
|
|
51
|
-
PullRequestMember,
|
|
52
52
|
PullRequestRef,
|
|
53
53
|
PullRequestRefs,
|
|
54
54
|
PullRequestRepositoryIdentityDescriptor,
|
|
55
|
-
PullRequestReviewer,
|
|
56
55
|
PullRequestState,
|
|
57
56
|
PullRequestStateFilter,
|
|
58
57
|
} from '../../../git/models/pullRequest.js';
|
|
59
58
|
import {
|
|
60
59
|
PullRequest,
|
|
61
60
|
PullRequestMergeableState,
|
|
62
|
-
PullRequestReviewDecision,
|
|
63
|
-
PullRequestReviewState,
|
|
64
61
|
PullRequestStatusCheckRollupState,
|
|
65
62
|
} from '../../../git/models/pullRequest.js';
|
|
66
63
|
import type { Provider, ProviderReference } from '../../../git/models/remoteProvider.js';
|
|
@@ -75,7 +72,12 @@ import {
|
|
|
75
72
|
IssuesCloudHostIntegrationId,
|
|
76
73
|
} from '../constants.js';
|
|
77
74
|
import type { Integration, IntegrationType } from '../models/integration.js';
|
|
78
|
-
import type {
|
|
75
|
+
import type {
|
|
76
|
+
IssueSearchCapabilities,
|
|
77
|
+
IssueSorting,
|
|
78
|
+
PullRequestSearchCapabilities,
|
|
79
|
+
PullRequestSorting,
|
|
80
|
+
} from '../providerFilters.js';
|
|
79
81
|
import { IssueFilter, PullRequestFilter } from '../providerFilters.js';
|
|
80
82
|
|
|
81
83
|
export { IssueFilter, PullRequestFilter } from '../providerFilters.js';
|
|
@@ -87,10 +89,13 @@ export type {
|
|
|
87
89
|
IssueSorting,
|
|
88
90
|
PullRequestSearchCapabilities,
|
|
89
91
|
PullRequestSearchCriteria,
|
|
92
|
+
PullRequestSortField,
|
|
93
|
+
PullRequestSorting,
|
|
90
94
|
} from '../providerFilters.js';
|
|
91
95
|
import type { ProviderRepositoryShape } from '../results.js';
|
|
92
96
|
|
|
93
97
|
export type { ProviderOrganization, ProviderRepositoryShape } from '../results.js';
|
|
98
|
+
import { fromProviderAccount, toProviderAccount } from './accounts.js';
|
|
94
99
|
import {
|
|
95
100
|
azureAccountWideIssueSorts,
|
|
96
101
|
azureIssueSorts,
|
|
@@ -102,6 +107,15 @@ import {
|
|
|
102
107
|
linearIssueSorts,
|
|
103
108
|
trelloIssueSorts,
|
|
104
109
|
} from './issueSorts.js';
|
|
110
|
+
import type { ProviderPullRequestReview, ProviderPullRequestReviews } from './pullRequestReviews.js';
|
|
111
|
+
import {
|
|
112
|
+
fromPullRequestReviewDecision,
|
|
113
|
+
providerPullRequestReviewStateDismissed,
|
|
114
|
+
toCompletedReviews,
|
|
115
|
+
toProviderReviewDecision,
|
|
116
|
+
toProviderReviews,
|
|
117
|
+
toReviewRequests,
|
|
118
|
+
} from './pullRequestReviews.js';
|
|
105
119
|
import { getEntityIdentifierInput } from './utils.js';
|
|
106
120
|
|
|
107
121
|
type GitBuildStatusState = GitBuildStatusStateType;
|
|
@@ -110,9 +124,6 @@ type GitPullRequestMergeableState = GitPullRequestMergeableStateType;
|
|
|
110
124
|
type GitPullRequestReviewState = GitPullRequestReviewStateType;
|
|
111
125
|
type GitPullRequestState = GitPullRequestStateType;
|
|
112
126
|
|
|
113
|
-
const { EntityIdentifierUtils } = entityIdentifiersModule;
|
|
114
|
-
const { GitProviderUtils } = providerUtilsModule;
|
|
115
|
-
|
|
116
127
|
// Local runtime copies of the `@gitkraken/provider-apis` string enums. Duplicated (not imported as
|
|
117
128
|
// values) because the SDK ships as CJS whose named enum exports can't be statically imported as ESM
|
|
118
129
|
// values from the bundled `dist`. Exported so the enum-parity test can deep-equal them against the
|
|
@@ -191,7 +202,7 @@ export function isRepoIdsInput(input: unknown): input is (string | number)[] {
|
|
|
191
202
|
);
|
|
192
203
|
}
|
|
193
204
|
|
|
194
|
-
export type ProviderPullRequest = GitPullRequest;
|
|
205
|
+
export type ProviderPullRequest = Omit<GitPullRequest, 'reviews'> & { reviews: ProviderPullRequestReviews };
|
|
195
206
|
export type ProviderRepository = GitRepository;
|
|
196
207
|
export type ProviderIssue = ProviderApiIssue;
|
|
197
208
|
export type ProviderEnterpriseOptions = EnterpriseOptions;
|
|
@@ -859,19 +870,36 @@ const githubIssueSearchCapabilities: IssueSearchCapabilities = {
|
|
|
859
870
|
sorts: githubIssueSorts,
|
|
860
871
|
};
|
|
861
872
|
|
|
873
|
+
/**
|
|
874
|
+
* The ordering vocabulary of GitHub's filtered PR search: `created` and `updated`, both directions.
|
|
875
|
+
*
|
|
876
|
+
* Hand-declared rather than derived from `@gitkraken/provider-apis` (which has no PR-sort surface), and narrower
|
|
877
|
+
* than the issue set on purpose: the merged relationship × state facets can only be re-ordered by a field a
|
|
878
|
+
* `PullRequestShape` carries (see `getPullRequestComparator`), and GitHub PRs have no priority and no relevance
|
|
879
|
+
* that orders stably under the result ceiling. A parity test pins this to `gitHubPullRequestSortQualifiers`' keys
|
|
880
|
+
* so the capability can't outrun the emitter.
|
|
881
|
+
*/
|
|
882
|
+
const githubPullRequestSorts: PullRequestSorting[] = ['updated:desc', 'updated:asc', 'created:desc', 'created:asc'];
|
|
883
|
+
|
|
862
884
|
/** GitHub and GHE use the same filtered pull-request search syntax and result ceiling. */
|
|
863
885
|
const githubPullRequestSearchCapabilities: PullRequestSearchCapabilities = {
|
|
864
886
|
relationships: [
|
|
865
887
|
PullRequestFilter.Author,
|
|
866
888
|
PullRequestFilter.Assignee,
|
|
867
889
|
PullRequestFilter.ReviewRequested,
|
|
890
|
+
PullRequestFilter.Reviewed,
|
|
868
891
|
PullRequestFilter.Mention,
|
|
869
892
|
],
|
|
870
893
|
states: ['open', 'closed', 'merged', 'all'],
|
|
871
894
|
text: true,
|
|
895
|
+
updatedAfter: true,
|
|
896
|
+
createdAfter: true,
|
|
872
897
|
includeArchived: true,
|
|
898
|
+
draft: true,
|
|
873
899
|
repositoryScope: true,
|
|
874
900
|
organizationScope: true,
|
|
901
|
+
// `sort:updated`, `sort:updated-asc`, `sort:created-desc`, `sort:created-asc` — see `githubPullRequestSorts`.
|
|
902
|
+
sorts: githubPullRequestSorts,
|
|
875
903
|
};
|
|
876
904
|
|
|
877
905
|
export const providersMetadata: ProvidersMetadata = {
|
|
@@ -894,6 +922,7 @@ export const providersMetadata: ProvidersMetadata = {
|
|
|
894
922
|
PullRequestFilter.Author,
|
|
895
923
|
PullRequestFilter.Assignee,
|
|
896
924
|
PullRequestFilter.ReviewRequested,
|
|
925
|
+
PullRequestFilter.Reviewed,
|
|
897
926
|
PullRequestFilter.Mention,
|
|
898
927
|
],
|
|
899
928
|
supportedPullRequestSearch: githubPullRequestSearchCapabilities,
|
|
@@ -930,6 +959,7 @@ export const providersMetadata: ProvidersMetadata = {
|
|
|
930
959
|
PullRequestFilter.Author,
|
|
931
960
|
PullRequestFilter.Assignee,
|
|
932
961
|
PullRequestFilter.ReviewRequested,
|
|
962
|
+
PullRequestFilter.Reviewed,
|
|
933
963
|
PullRequestFilter.Mention,
|
|
934
964
|
],
|
|
935
965
|
supportedPullRequestSearch: githubPullRequestSearchCapabilities,
|
|
@@ -1320,21 +1350,35 @@ export const fromProviderBuildStatusState = {
|
|
|
1320
1350
|
[GitBuildStatusState.Warning]: undefined,
|
|
1321
1351
|
};
|
|
1322
1352
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1353
|
+
/** Rolls every check context up into one state, the way a provider's own rollup does: failed, errored, or
|
|
1354
|
+
* action-required fails; else pending or running is pending; else success — reading only the first context
|
|
1355
|
+
* would call a pull request passing on the strength of whichever check happens to come back first. States
|
|
1356
|
+
* carrying no verdict (cancelled, skipped, optional action required, warning) don't vote. Reads the raw
|
|
1357
|
+
* state rather than `fromProviderBuildStatusState`, which drops errored and running to `undefined` and
|
|
1358
|
+
* would let a lone success outvote a check still in flight. */
|
|
1359
|
+
function toStatusCheckRollupState(
|
|
1360
|
+
statuses: GitBuildStatus[] | null | undefined,
|
|
1361
|
+
): PullRequestStatusCheckRollupState | undefined {
|
|
1362
|
+
if (!statuses?.length) return undefined;
|
|
1363
|
+
|
|
1364
|
+
let rollup: PullRequestStatusCheckRollupState | undefined;
|
|
1365
|
+
for (const { state } of statuses) {
|
|
1366
|
+
switch (state) {
|
|
1367
|
+
case GitBuildStatusState.Failed:
|
|
1368
|
+
case GitBuildStatusState.Error:
|
|
1369
|
+
case GitBuildStatusState.ActionRequired:
|
|
1370
|
+
return PullRequestStatusCheckRollupState.Failed;
|
|
1371
|
+
case GitBuildStatusState.Pending:
|
|
1372
|
+
case GitBuildStatusState.Running:
|
|
1373
|
+
rollup = PullRequestStatusCheckRollupState.Pending;
|
|
1374
|
+
break;
|
|
1375
|
+
case GitBuildStatusState.Success:
|
|
1376
|
+
rollup ??= PullRequestStatusCheckRollupState.Success;
|
|
1377
|
+
break;
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
return rollup;
|
|
1381
|
+
}
|
|
1338
1382
|
|
|
1339
1383
|
export const toProviderPullRequestMergeableState = {
|
|
1340
1384
|
[PullRequestMergeableState.Mergeable]: GitPullRequestMergeableState.Mergeable,
|
|
@@ -1355,68 +1399,6 @@ export const fromProviderPullRequestMergeableState = {
|
|
|
1355
1399
|
[GitPullRequestMergeableState.Unstable]: PullRequestMergeableState.Unknown,
|
|
1356
1400
|
};
|
|
1357
1401
|
|
|
1358
|
-
export function toProviderReviews(reviewers: PullRequestReviewer[]): ProviderPullRequest['reviews'] {
|
|
1359
|
-
return reviewers
|
|
1360
|
-
.filter(r => r.state !== PullRequestReviewState.Dismissed && r.state !== PullRequestReviewState.Pending)
|
|
1361
|
-
.map(reviewer => ({
|
|
1362
|
-
reviewer: toProviderAccount(reviewer.reviewer),
|
|
1363
|
-
state: toProviderPullRequestReviewState[reviewer.state] ?? GitPullRequestReviewState.ReviewRequested,
|
|
1364
|
-
}));
|
|
1365
|
-
}
|
|
1366
|
-
|
|
1367
|
-
export function toReviewRequests(reviews: ProviderPullRequest['reviews']): PullRequestReviewer[] | undefined {
|
|
1368
|
-
return reviews == null
|
|
1369
|
-
? undefined
|
|
1370
|
-
: reviews
|
|
1371
|
-
?.filter(r => r.state === GitPullRequestReviewState.ReviewRequested)
|
|
1372
|
-
.map(r => ({
|
|
1373
|
-
isCodeOwner: false, // TODO: Find this value, and implement in the shared lib if needed
|
|
1374
|
-
reviewer: fromProviderAccount(r.reviewer),
|
|
1375
|
-
state: PullRequestReviewState.ReviewRequested,
|
|
1376
|
-
}));
|
|
1377
|
-
}
|
|
1378
|
-
|
|
1379
|
-
export function toCompletedReviews(reviews: ProviderPullRequest['reviews']): PullRequestReviewer[] | undefined {
|
|
1380
|
-
return reviews == null
|
|
1381
|
-
? undefined
|
|
1382
|
-
: reviews
|
|
1383
|
-
?.filter(r => r.state !== GitPullRequestReviewState.ReviewRequested)
|
|
1384
|
-
.map(r => ({
|
|
1385
|
-
isCodeOwner: false, // TODO: Find this value, and implement in the shared lib if needed
|
|
1386
|
-
reviewer: fromProviderAccount(r.reviewer),
|
|
1387
|
-
state: fromProviderPullRequestReviewState[r.state],
|
|
1388
|
-
}));
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1391
|
-
export function toProviderReviewDecision(
|
|
1392
|
-
reviewDecision?: PullRequestReviewDecision,
|
|
1393
|
-
reviewers?: PullRequestReviewer[],
|
|
1394
|
-
): GitPullRequestReviewState | null {
|
|
1395
|
-
switch (reviewDecision) {
|
|
1396
|
-
case PullRequestReviewDecision.Approved:
|
|
1397
|
-
return GitPullRequestReviewState.Approved;
|
|
1398
|
-
case PullRequestReviewDecision.ChangesRequested:
|
|
1399
|
-
return GitPullRequestReviewState.ChangesRequested;
|
|
1400
|
-
case PullRequestReviewDecision.ReviewRequired:
|
|
1401
|
-
return GitPullRequestReviewState.ReviewRequested;
|
|
1402
|
-
default: {
|
|
1403
|
-
if (reviewers?.some(r => r.state === PullRequestReviewState.ReviewRequested)) {
|
|
1404
|
-
return GitPullRequestReviewState.ReviewRequested;
|
|
1405
|
-
} else if (reviewers?.some(r => r.state === PullRequestReviewState.Commented)) {
|
|
1406
|
-
return GitPullRequestReviewState.Commented;
|
|
1407
|
-
}
|
|
1408
|
-
return null;
|
|
1409
|
-
}
|
|
1410
|
-
}
|
|
1411
|
-
}
|
|
1412
|
-
|
|
1413
|
-
export const fromPullRequestReviewDecision = {
|
|
1414
|
-
[GitPullRequestReviewState.Approved]: PullRequestReviewDecision.Approved,
|
|
1415
|
-
[GitPullRequestReviewState.ChangesRequested]: PullRequestReviewDecision.ChangesRequested,
|
|
1416
|
-
[GitPullRequestReviewState.Commented]: undefined,
|
|
1417
|
-
[GitPullRequestReviewState.ReviewRequested]: PullRequestReviewDecision.ReviewRequired,
|
|
1418
|
-
};
|
|
1419
|
-
|
|
1420
1402
|
export function toProviderPullRequestState(state: PullRequestState): GitPullRequestState {
|
|
1421
1403
|
return state === 'opened'
|
|
1422
1404
|
? GitPullRequestState.Open
|
|
@@ -1521,7 +1503,7 @@ export function toProviderPullRequest(pr: PullRequest): ProviderPullRequest {
|
|
|
1521
1503
|
mergedDate: pr.mergedDate ?? null,
|
|
1522
1504
|
commentCount: pr.commentsCount ?? null,
|
|
1523
1505
|
upvoteCount: pr.thumbsUpCount ?? null,
|
|
1524
|
-
commitCount: null,
|
|
1506
|
+
commitCount: pr.commitCount ?? null,
|
|
1525
1507
|
fileCount: null,
|
|
1526
1508
|
additions: pr.additions ?? null,
|
|
1527
1509
|
deletions: pr.deletions ?? null,
|
|
@@ -1541,7 +1523,11 @@ export function toProviderPullRequest(pr: PullRequest): ProviderPullRequest {
|
|
|
1541
1523
|
name: pr.refs.head.branch,
|
|
1542
1524
|
oid: pr.refs.head.sha,
|
|
1543
1525
|
},
|
|
1544
|
-
|
|
1526
|
+
// `null` when the source carried no review data at all, rather than the empty array a lite read would
|
|
1527
|
+
// otherwise produce: `toCompletedReviews`/`toReviewRequests` map `null` back to `undefined`, which is what
|
|
1528
|
+
// lets a consumer tell "nobody has reviewed this" from "this read never fetched reviews" (see
|
|
1529
|
+
// `PullRequestShape.latestReviews`). An empty array from a full projection stays an empty array.
|
|
1530
|
+
reviews: pr.reviewRequests == null && pr.latestReviews == null ? null : toProviderReviews(prReviews),
|
|
1545
1531
|
reviewDecision: toProviderReviewDecision(pr.reviewDecision, prReviews),
|
|
1546
1532
|
repository:
|
|
1547
1533
|
pr.repository != null
|
|
@@ -1678,11 +1664,12 @@ export function fromProviderPullRequest(
|
|
|
1678
1664
|
toReviewRequests(pr.reviews),
|
|
1679
1665
|
toCompletedReviews(pr.reviews),
|
|
1680
1666
|
pr.assignees?.map(fromProviderAccount) ?? undefined,
|
|
1681
|
-
pr.headCommit?.buildStatuses
|
|
1682
|
-
? fromProviderBuildStatusState[pr.headCommit.buildStatuses[0].state]
|
|
1683
|
-
: undefined,
|
|
1667
|
+
toStatusCheckRollupState(pr.headCommit?.buildStatuses),
|
|
1684
1668
|
options?.project,
|
|
1685
1669
|
pr.version,
|
|
1670
|
+
pr.commitCount ?? undefined,
|
|
1671
|
+
undefined, // stack — GK's proxy type has no stack concept; membership is joined host-side
|
|
1672
|
+
pr.fileCount ?? undefined,
|
|
1686
1673
|
pr.description ?? undefined,
|
|
1687
1674
|
pr.number,
|
|
1688
1675
|
options?.currentAccountId != null ? pr.author?.id === options.currentAccountId : undefined,
|
|
@@ -1740,46 +1727,31 @@ export function fromProviderIssue(
|
|
|
1740
1727
|
}
|
|
1741
1728
|
|
|
1742
1729
|
export function toProviderPullRequestWithUniqueId(pr: PullRequest): PullRequestWithUniqueID {
|
|
1730
|
+
const { reviews, ...providerPr } = toProviderPullRequest(pr);
|
|
1743
1731
|
return {
|
|
1744
|
-
...
|
|
1732
|
+
...providerPr,
|
|
1733
|
+
// The SDK boundary: `getActionablePullRequests` categorizes by review state and only knows
|
|
1734
|
+
// provider-apis' own vocabulary, so the locally-added dismissed state is dropped here rather than
|
|
1735
|
+
// handed over as a value it would fall through on. Our own projection keeps it — see
|
|
1736
|
+
// `providerPullRequestReviewStateDismissed`. `commitOid` rides along on the surviving reviews: it is an
|
|
1737
|
+
// extra property the SDK ignores, not a value it could misread.
|
|
1738
|
+
reviews:
|
|
1739
|
+
reviews?.filter(
|
|
1740
|
+
(r): r is ProviderPullRequestReview & { state: GitPullRequestReviewState } =>
|
|
1741
|
+
r.state !== providerPullRequestReviewStateDismissed,
|
|
1742
|
+
) ?? null,
|
|
1745
1743
|
uuid: EntityIdentifierUtils.encode(getEntityIdentifierInput(pr)),
|
|
1746
1744
|
};
|
|
1747
1745
|
}
|
|
1748
1746
|
|
|
1749
|
-
export function toProviderAccount(account: PullRequestMember | IssueMember): ProviderAccount {
|
|
1750
|
-
return {
|
|
1751
|
-
id: account.id ?? null,
|
|
1752
|
-
avatarUrl: account.avatarUrl ?? null,
|
|
1753
|
-
name: account.name ?? null,
|
|
1754
|
-
url: account.url ?? null,
|
|
1755
|
-
// TODO: Implement these in our own model
|
|
1756
|
-
email: '',
|
|
1757
|
-
username: account.name ?? null,
|
|
1758
|
-
};
|
|
1759
|
-
}
|
|
1760
|
-
|
|
1761
|
-
export function fromProviderAccount(account: ProviderAccount | null): PullRequestMember | IssueMember {
|
|
1762
|
-
return {
|
|
1763
|
-
id: account?.id ?? '',
|
|
1764
|
-
// An absent name stays absent. `'unknown'` was a display fallback invented in the provider layer, and a
|
|
1765
|
-
// consumer couldn't tell it apart from a member genuinely named that — so it couldn't be undone where a
|
|
1766
|
-
// name-shaped placeholder is wrong (rendering an avatar-only chip, or building an AI prompt, where
|
|
1767
|
-
// `Assignees: unknown` reads as a real assignee). It also disagreed with {@link toIssueShape}, which
|
|
1768
|
-
// collapsed the same absent name to `''` — same facade method, two fallbacks. Both now emit `undefined`.
|
|
1769
|
-
name: account?.name ?? undefined,
|
|
1770
|
-
avatarUrl: account?.avatarUrl ?? undefined,
|
|
1771
|
-
// `url` is optional, so an absent one must be `undefined`, not `''`. `''` passes a `!= null` presence
|
|
1772
|
-
// check and renders as a link to nowhere, and it disagreed with {@link toIssueShape} — which already
|
|
1773
|
-
// collapses to `undefined` — even though BOTH mappers feed `listIssuesPage` (the repo-scoped path goes
|
|
1774
|
-
// through `toIssueShape`, Azure's account-wide path through {@link fromProviderIssue}). Same facade
|
|
1775
|
-
// method, two shapes. Matches {@link toProviderRepositoryShape}, which collapses every absent optional.
|
|
1776
|
-
url: account?.url ?? undefined,
|
|
1777
|
-
};
|
|
1778
|
-
}
|
|
1779
|
-
|
|
1780
1747
|
export type ProviderActionablePullRequest = ActionablePullRequest;
|
|
1781
1748
|
|
|
1782
|
-
|
|
1749
|
+
/**
|
|
1750
|
+
* Built on the SDK's `GitPullRequest`, NOT the local {@link ProviderPullRequest} widening: this is handed to
|
|
1751
|
+
* `getActionablePullRequests`, which categorizes by review state and only knows provider-apis' vocabulary.
|
|
1752
|
+
* {@link toProviderPullRequestWithUniqueId} is what narrows `reviews` down to it.
|
|
1753
|
+
*/
|
|
1754
|
+
export type EnrichablePullRequest = GitPullRequest & {
|
|
1783
1755
|
uuid: string;
|
|
1784
1756
|
type: 'pullrequest';
|
|
1785
1757
|
provider: ProviderReference;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { GitPullRequest } from '@gitkraken/provider-apis';
|
|
2
|
+
import { GitPullRequestReviewState } from '@gitkraken/provider-apis';
|
|
3
|
+
import type { PullRequestReviewer } from '../../../git/models/pullRequest.js';
|
|
4
|
+
import { PullRequestReviewDecision, PullRequestReviewState } from '../../../git/models/pullRequest.js';
|
|
5
|
+
import { fromProviderAccount, toProviderAccount } from './accounts.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The GitLens-local extension of provider-apis' review shape, in two parts: a `DISMISSED` state the upstream
|
|
9
|
+
* `GitPullRequestReviewState` has no member for, and the head-commit oid a review was submitted against
|
|
10
|
+
* (optional, so a raw SDK review stays assignable — only the GitHub path populates it).
|
|
11
|
+
*
|
|
12
|
+
* Both exist for the same case: on GitHub the `dismiss stale reviews` rule flips an approval to dismissed on
|
|
13
|
+
* the next push, which is exactly the "the PR moved past my review" situation the oid detects. Dropping such a
|
|
14
|
+
* review instead would hand a consumer a PR out of the `reviewed-by:@me` set with no review row at all,
|
|
15
|
+
* indistinguishable from never having reviewed it.
|
|
16
|
+
*/
|
|
17
|
+
export const providerPullRequestReviewStateDismissed = 'DISMISSED' as const;
|
|
18
|
+
export type ProviderPullRequestReview = Omit<NonNullable<GitPullRequest['reviews']>[number], 'state'> & {
|
|
19
|
+
state: GitPullRequestReviewState | typeof providerPullRequestReviewStateDismissed;
|
|
20
|
+
commitOid?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The review list as it travels on {@link ProviderPullRequest}: `null` when the read carried no review data at
|
|
24
|
+
* all, as opposed to an empty array for a pull request nobody has reviewed.
|
|
25
|
+
*/
|
|
26
|
+
export type ProviderPullRequestReviews = ProviderPullRequestReview[] | null;
|
|
27
|
+
|
|
28
|
+
export const toProviderPullRequestReviewState = {
|
|
29
|
+
[PullRequestReviewState.Approved]: GitPullRequestReviewState.Approved,
|
|
30
|
+
[PullRequestReviewState.ChangesRequested]: GitPullRequestReviewState.ChangesRequested,
|
|
31
|
+
[PullRequestReviewState.Commented]: GitPullRequestReviewState.Commented,
|
|
32
|
+
[PullRequestReviewState.ReviewRequested]: GitPullRequestReviewState.ReviewRequested,
|
|
33
|
+
[PullRequestReviewState.Dismissed]: providerPullRequestReviewStateDismissed,
|
|
34
|
+
// A review the author started but never submitted. Visible only to that author and carrying no verdict, so
|
|
35
|
+
// it stays unmapped and is dropped by the projection.
|
|
36
|
+
[PullRequestReviewState.Pending]: null,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const fromProviderPullRequestReviewState = {
|
|
40
|
+
[GitPullRequestReviewState.Approved]: PullRequestReviewState.Approved,
|
|
41
|
+
[GitPullRequestReviewState.ChangesRequested]: PullRequestReviewState.ChangesRequested,
|
|
42
|
+
[GitPullRequestReviewState.Commented]: PullRequestReviewState.Commented,
|
|
43
|
+
[GitPullRequestReviewState.ReviewRequested]: PullRequestReviewState.ReviewRequested,
|
|
44
|
+
[providerPullRequestReviewStateDismissed]: PullRequestReviewState.Dismissed,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export function toProviderReviews(reviewers: PullRequestReviewer[]): ProviderPullRequestReviews {
|
|
48
|
+
// Only `Pending` maps to null (see `toProviderPullRequestReviewState`), so this drops exactly the reviews
|
|
49
|
+
// that carry no verdict rather than defaulting them to `ReviewRequested` — which would report an unsubmitted
|
|
50
|
+
// draft as a pending request from that reviewer.
|
|
51
|
+
return reviewers
|
|
52
|
+
.filter(r => r.state !== PullRequestReviewState.Pending)
|
|
53
|
+
.map(reviewer => ({
|
|
54
|
+
reviewer: toProviderAccount(reviewer.reviewer),
|
|
55
|
+
state: toProviderPullRequestReviewState[reviewer.state] ?? GitPullRequestReviewState.ReviewRequested,
|
|
56
|
+
commitOid: reviewer.commitOid,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function toReviewRequests(reviews: ProviderPullRequestReviews): PullRequestReviewer[] | undefined {
|
|
61
|
+
return reviews == null
|
|
62
|
+
? undefined
|
|
63
|
+
: reviews
|
|
64
|
+
?.filter(r => r.state === GitPullRequestReviewState.ReviewRequested)
|
|
65
|
+
.map(r => ({
|
|
66
|
+
isCodeOwner: false, // TODO: Find this value, and implement in the shared lib if needed
|
|
67
|
+
reviewer: fromProviderAccount(r.reviewer),
|
|
68
|
+
state: PullRequestReviewState.ReviewRequested,
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function toCompletedReviews(reviews: ProviderPullRequestReviews): PullRequestReviewer[] | undefined {
|
|
73
|
+
return reviews == null
|
|
74
|
+
? undefined
|
|
75
|
+
: reviews
|
|
76
|
+
?.filter(
|
|
77
|
+
r =>
|
|
78
|
+
r.state !== GitPullRequestReviewState.ReviewRequested &&
|
|
79
|
+
// provider-apis' own GitHub normalizer maps only its four known states, so a review it has no
|
|
80
|
+
// member for (a real `DISMISSED` one, which its `latestReviews(first: 100)` selection does
|
|
81
|
+
// return) arrives with `state: undefined` — a value its type says cannot happen. Publishing it
|
|
82
|
+
// would put an unswitchable state on `PullRequestShape.latestReviews`, and mapping back would
|
|
83
|
+
// hit `toProviderReviews`' fallback and report a dismissed review as an outstanding request.
|
|
84
|
+
// Our own GitHub path never lands here: it carries `providerPullRequestReviewStateDismissed`.
|
|
85
|
+
fromProviderPullRequestReviewState[r.state] != null,
|
|
86
|
+
)
|
|
87
|
+
.map(r => ({
|
|
88
|
+
isCodeOwner: false, // TODO: Find this value, and implement in the shared lib if needed
|
|
89
|
+
reviewer: fromProviderAccount(r.reviewer),
|
|
90
|
+
state: fromProviderPullRequestReviewState[r.state],
|
|
91
|
+
commitOid: r.commitOid,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function toProviderReviewDecision(
|
|
96
|
+
reviewDecision?: PullRequestReviewDecision,
|
|
97
|
+
reviewers?: PullRequestReviewer[],
|
|
98
|
+
): GitPullRequestReviewState | null {
|
|
99
|
+
switch (reviewDecision) {
|
|
100
|
+
case PullRequestReviewDecision.Approved:
|
|
101
|
+
return GitPullRequestReviewState.Approved;
|
|
102
|
+
case PullRequestReviewDecision.ChangesRequested:
|
|
103
|
+
return GitPullRequestReviewState.ChangesRequested;
|
|
104
|
+
case PullRequestReviewDecision.ReviewRequired:
|
|
105
|
+
return GitPullRequestReviewState.ReviewRequested;
|
|
106
|
+
default: {
|
|
107
|
+
if (reviewers?.some(r => r.state === PullRequestReviewState.ReviewRequested)) {
|
|
108
|
+
return GitPullRequestReviewState.ReviewRequested;
|
|
109
|
+
} else if (reviewers?.some(r => r.state === PullRequestReviewState.Commented)) {
|
|
110
|
+
return GitPullRequestReviewState.Commented;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export const fromPullRequestReviewDecision = {
|
|
118
|
+
[GitPullRequestReviewState.Approved]: PullRequestReviewDecision.Approved,
|
|
119
|
+
[GitPullRequestReviewState.ChangesRequested]: PullRequestReviewDecision.ChangesRequested,
|
|
120
|
+
[GitPullRequestReviewState.Commented]: undefined,
|
|
121
|
+
[GitPullRequestReviewState.ReviewRequested]: PullRequestReviewDecision.ReviewRequired,
|
|
122
|
+
};
|
|
@@ -140,7 +140,12 @@ export async function broadenIssues(
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
items.push(...result.items);
|
|
143
|
-
|
|
143
|
+
// Deduped across orgs: several orgs of one provider commonly fail the same way (one expired token, one
|
|
144
|
+
// rate limit), producing the identical warning per slice, and the array's contract is that no two entries
|
|
145
|
+
// are equal — `traverseToRequestedPage` already dedupes when it folds these same warnings across rounds.
|
|
146
|
+
for (const warning of result.warnings) {
|
|
147
|
+
appendDedupedWarning(warnings, warning);
|
|
148
|
+
}
|
|
144
149
|
for (const id of result.broadenedProviderIds) {
|
|
145
150
|
broadenedProviderIds.add(id);
|
|
146
151
|
}
|