@gitkraken/core-gitlens 0.4.0 → 0.4.101
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 +74 -1
- package/README.md +9 -2
- package/dist/git/cache.d.ts +29 -2
- package/dist/git/cache.d.ts.map +1 -1
- package/dist/git/cache.js +67 -7
- package/dist/git/cache.js.map +1 -1
- package/dist/git/context.d.ts.map +1 -1
- package/dist/git/errors.d.ts +31 -1
- package/dist/git/errors.d.ts.map +1 -1
- package/dist/git/errors.js +29 -0
- package/dist/git/errors.js.map +1 -1
- package/dist/git/models/author.d.ts.map +1 -1
- package/dist/git/models/author.js.map +1 -1
- package/dist/git/models/autolink.d.ts.map +1 -1
- package/dist/git/models/autolink.js.map +1 -1
- package/dist/git/models/blame.d.ts.map +1 -1
- package/dist/git/models/blame.js.map +1 -1
- package/dist/git/models/branch.d.ts.map +1 -1
- package/dist/git/models/branch.js.map +1 -1
- package/dist/git/models/commit.d.ts.map +1 -1
- package/dist/git/models/commit.js +1 -1
- package/dist/git/models/commit.js.map +1 -1
- package/dist/git/models/contributor.d.ts.map +1 -1
- package/dist/git/models/contributor.js.map +1 -1
- package/dist/git/models/defaultBranch.d.ts.map +1 -1
- package/dist/git/models/defaultBranch.js.map +1 -1
- package/dist/git/models/diff.d.ts.map +1 -1
- package/dist/git/models/diff.js.map +1 -1
- package/dist/git/models/file.d.ts.map +1 -1
- package/dist/git/models/file.js.map +1 -1
- package/dist/git/models/fileChange.d.ts.map +1 -1
- package/dist/git/models/fileChange.js.map +1 -1
- package/dist/git/models/fileStatus.d.ts +22 -22
- package/dist/git/models/fileStatus.d.ts.map +1 -1
- package/dist/git/models/fileStatus.js.map +1 -1
- package/dist/git/models/graph.d.ts +122 -1
- package/dist/git/models/graph.d.ts.map +1 -1
- package/dist/git/models/graph.js +4 -0
- package/dist/git/models/graph.js.map +1 -1
- package/dist/git/models/graphSearch.d.ts.map +1 -1
- package/dist/git/models/graphSearch.js.map +1 -1
- package/dist/git/models/graphSession.d.ts +177 -0
- package/dist/git/models/graphSession.d.ts.map +1 -0
- package/dist/git/models/graphSession.js +7 -0
- package/dist/git/models/graphSession.js.map +1 -0
- package/dist/git/models/issue.d.ts +12 -2
- package/dist/git/models/issue.d.ts.map +1 -1
- package/dist/git/models/issue.js +3 -1
- package/dist/git/models/issue.js.map +1 -1
- package/dist/git/models/issueOrPullRequest.d.ts.map +1 -1
- package/dist/git/models/issueOrPullRequest.js.map +1 -1
- package/dist/git/models/lineRange.d.ts.map +1 -1
- package/dist/git/models/lineRange.js.map +1 -1
- package/dist/git/models/log.d.ts.map +1 -1
- package/dist/git/models/log.js.map +1 -1
- package/dist/git/models/mergeConflicts.d.ts.map +1 -1
- package/dist/git/models/mergeConflicts.js.map +1 -1
- package/dist/git/models/patch.d.ts.map +1 -1
- package/dist/git/models/patch.js.map +1 -1
- package/dist/git/models/pausedOperationStatus.d.ts.map +1 -1
- package/dist/git/models/pausedOperationStatus.js.map +1 -1
- package/dist/git/models/pullRequest.d.ts +27 -2
- package/dist/git/models/pullRequest.d.ts.map +1 -1
- package/dist/git/models/pullRequest.js +7 -1
- package/dist/git/models/pullRequest.js.map +1 -1
- package/dist/git/models/rebase.d.ts.map +1 -1
- package/dist/git/models/rebase.js.map +1 -1
- package/dist/git/models/reference.d.ts.map +1 -1
- package/dist/git/models/reference.js.map +1 -1
- package/dist/git/models/reflog.d.ts.map +1 -1
- package/dist/git/models/reflog.js.map +1 -1
- package/dist/git/models/remote.d.ts.map +1 -1
- package/dist/git/models/remote.js.map +1 -1
- package/dist/git/models/remoteProvider.d.ts.map +1 -1
- package/dist/git/models/remoteProvider.js.map +1 -1
- package/dist/git/models/remoteResource.d.ts.map +1 -1
- package/dist/git/models/remoteResource.js.map +1 -1
- package/dist/git/models/repository.d.ts +20 -2
- package/dist/git/models/repository.d.ts.map +1 -1
- package/dist/git/models/repository.js +19 -0
- package/dist/git/models/repository.js.map +1 -1
- package/dist/git/models/repositoryChangeEvent.d.ts.map +1 -1
- package/dist/git/models/repositoryChangeEvent.js.map +1 -1
- package/dist/git/models/repositoryIdentities.d.ts.map +1 -1
- package/dist/git/models/repositoryIdentities.js.map +1 -1
- package/dist/git/models/repositoryMetadata.d.ts.map +1 -1
- package/dist/git/models/repositoryMetadata.js.map +1 -1
- package/dist/git/models/resourceDescriptor.d.ts +16 -0
- package/dist/git/models/resourceDescriptor.d.ts.map +1 -1
- package/dist/git/models/resourceDescriptor.js.map +1 -1
- package/dist/git/models/revision.d.ts.map +1 -1
- package/dist/git/models/revision.js.map +1 -1
- package/dist/git/models/search.d.ts.map +1 -1
- package/dist/git/models/search.js.map +1 -1
- package/dist/git/models/shortlog.d.ts.map +1 -1
- package/dist/git/models/shortlog.js.map +1 -1
- package/dist/git/models/signature.d.ts +14 -0
- package/dist/git/models/signature.d.ts.map +1 -1
- package/dist/git/models/signature.js.map +1 -1
- package/dist/git/models/staging.d.ts.map +1 -1
- package/dist/git/models/staging.js.map +1 -1
- package/dist/git/models/stash.d.ts.map +1 -1
- package/dist/git/models/stash.js.map +1 -1
- package/dist/git/models/status.d.ts.map +1 -1
- package/dist/git/models/status.js.map +1 -1
- package/dist/git/models/statusFile.d.ts.map +1 -1
- package/dist/git/models/statusFile.js.map +1 -1
- package/dist/git/models/tag.d.ts +11 -1
- package/dist/git/models/tag.d.ts.map +1 -1
- package/dist/git/models/tag.js +9 -2
- package/dist/git/models/tag.js.map +1 -1
- package/dist/git/models/tree.d.ts.map +1 -1
- package/dist/git/models/tree.js.map +1 -1
- package/dist/git/models/user.d.ts.map +1 -1
- package/dist/git/models/user.js.map +1 -1
- package/dist/git/models/worktree.d.ts.map +1 -1
- package/dist/git/models/worktree.js.map +1 -1
- package/dist/git/parsers/diffParser.d.ts.map +1 -1
- package/dist/git/parsers/diffParser.js +1 -1
- package/dist/git/parsers/diffParser.js.map +1 -1
- package/dist/git/parsers/rebaseTodoParser.d.ts.map +1 -1
- package/dist/git/parsers/rebaseTodoParser.js.map +1 -1
- package/dist/git/providers/blame.d.ts.map +1 -1
- package/dist/git/providers/blame.js.map +1 -1
- package/dist/git/providers/branches.d.ts +8 -1
- package/dist/git/providers/branches.d.ts.map +1 -1
- package/dist/git/providers/branches.js.map +1 -1
- package/dist/git/providers/commits.d.ts +6 -1
- package/dist/git/providers/commits.d.ts.map +1 -1
- package/dist/git/providers/commits.js.map +1 -1
- package/dist/git/providers/config.d.ts +6 -2
- package/dist/git/providers/config.d.ts.map +1 -1
- package/dist/git/providers/config.js.map +1 -1
- package/dist/git/providers/contributors.d.ts.map +1 -1
- package/dist/git/providers/contributors.js.map +1 -1
- package/dist/git/providers/diff.d.ts.map +1 -1
- package/dist/git/providers/diff.js.map +1 -1
- package/dist/git/providers/graph.d.ts +55 -1
- package/dist/git/providers/graph.d.ts.map +1 -1
- package/dist/git/providers/graph.js.map +1 -1
- package/dist/git/providers/operations.d.ts.map +1 -1
- package/dist/git/providers/operations.js.map +1 -1
- package/dist/git/providers/patch.d.ts.map +1 -1
- package/dist/git/providers/patch.js.map +1 -1
- package/dist/git/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git/providers/pausedOperations.js.map +1 -1
- package/dist/git/providers/provider.d.ts.map +1 -1
- package/dist/git/providers/provider.js.map +1 -1
- package/dist/git/providers/refs.d.ts.map +1 -1
- package/dist/git/providers/refs.js.map +1 -1
- package/dist/git/providers/remotes.d.ts.map +1 -1
- package/dist/git/providers/remotes.js.map +1 -1
- package/dist/git/providers/revision.d.ts.map +1 -1
- package/dist/git/providers/revision.js.map +1 -1
- package/dist/git/providers/shared/remotes.d.ts.map +1 -1
- package/dist/git/providers/shared/remotes.js.map +1 -1
- package/dist/git/providers/staging.d.ts.map +1 -1
- package/dist/git/providers/staging.js.map +1 -1
- package/dist/git/providers/stash.d.ts.map +1 -1
- package/dist/git/providers/stash.js.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/providers/status.js.map +1 -1
- package/dist/git/providers/tags.d.ts.map +1 -1
- package/dist/git/providers/tags.js.map +1 -1
- package/dist/git/providers/types.d.ts.map +1 -1
- package/dist/git/providers/types.js.map +1 -1
- package/dist/git/providers/worktrees.d.ts +3 -1
- package/dist/git/providers/worktrees.d.ts.map +1 -1
- package/dist/git/providers/worktrees.js.map +1 -1
- package/dist/git/remotes/azure-devops.d.ts.map +1 -1
- package/dist/git/remotes/azure-devops.js +27 -31
- package/dist/git/remotes/azure-devops.js.map +1 -1
- package/dist/git/remotes/bitbucket-server.d.ts.map +1 -1
- package/dist/git/remotes/bitbucket-server.js +21 -23
- package/dist/git/remotes/bitbucket-server.js.map +1 -1
- package/dist/git/remotes/bitbucket.d.ts.map +1 -1
- package/dist/git/remotes/bitbucket.js +21 -23
- package/dist/git/remotes/bitbucket.js.map +1 -1
- package/dist/git/remotes/custom.d.ts.map +1 -1
- package/dist/git/remotes/custom.js.map +1 -1
- package/dist/git/remotes/gerrit.d.ts.map +1 -1
- package/dist/git/remotes/gerrit.js +11 -13
- package/dist/git/remotes/gerrit.js.map +1 -1
- package/dist/git/remotes/gitea.d.ts.map +1 -1
- package/dist/git/remotes/gitea.js +12 -14
- package/dist/git/remotes/gitea.js.map +1 -1
- package/dist/git/remotes/github.d.ts.map +1 -1
- package/dist/git/remotes/github.js +54 -56
- package/dist/git/remotes/github.js.map +1 -1
- package/dist/git/remotes/gitlab.d.ts.map +1 -1
- package/dist/git/remotes/gitlab.js +93 -95
- package/dist/git/remotes/gitlab.js.map +1 -1
- package/dist/git/remotes/google-source.d.ts.map +1 -1
- package/dist/git/remotes/google-source.js.map +1 -1
- package/dist/git/remotes/matcher.d.ts.map +1 -1
- package/dist/git/remotes/matcher.js.map +1 -1
- package/dist/git/run.types.d.ts +62 -3
- package/dist/git/run.types.d.ts.map +1 -1
- package/dist/git/service.d.ts.map +1 -1
- package/dist/git/utils/autolink.utils.d.ts.map +1 -1
- package/dist/git/utils/autolink.utils.js.map +1 -1
- package/dist/git/utils/blame.utils.d.ts.map +1 -1
- package/dist/git/utils/blame.utils.js.map +1 -1
- package/dist/git/utils/branch.utils.d.ts.map +1 -1
- package/dist/git/utils/branch.utils.js +12 -1
- package/dist/git/utils/branch.utils.js.map +1 -1
- package/dist/git/utils/commit.utils.d.ts.map +1 -1
- package/dist/git/utils/commit.utils.js.map +1 -1
- package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -1
- package/dist/git/utils/conflictResolution.utils.js.map +1 -1
- package/dist/git/utils/contributor.utils.d.ts +1 -1
- package/dist/git/utils/contributor.utils.d.ts.map +1 -1
- package/dist/git/utils/contributor.utils.js +1 -2
- package/dist/git/utils/contributor.utils.js.map +1 -1
- package/dist/git/utils/fetch.utils.d.ts.map +1 -1
- package/dist/git/utils/fetch.utils.js.map +1 -1
- package/dist/git/utils/fileStatus.utils.d.ts +7 -0
- package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/fileStatus.utils.js +6 -0
- package/dist/git/utils/fileStatus.utils.js.map +1 -1
- package/dist/git/utils/graph.utils.d.ts +20 -0
- package/dist/git/utils/graph.utils.d.ts.map +1 -0
- package/dist/git/utils/graph.utils.js +40 -0
- package/dist/git/utils/graph.utils.js.map +1 -0
- package/dist/git/utils/issue.utils.d.ts.map +1 -1
- package/dist/git/utils/issue.utils.js +1 -0
- package/dist/git/utils/issue.utils.js.map +1 -1
- package/dist/git/utils/issueOrPullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/issueOrPullRequest.utils.js.map +1 -1
- package/dist/git/utils/mergeConflicts.utils.d.ts.map +1 -1
- package/dist/git/utils/mergeConflicts.utils.js.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.d.ts +13 -13
- package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
- package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/pullRequest.utils.js +9 -0
- package/dist/git/utils/pullRequest.utils.js.map +1 -1
- package/dist/git/utils/reachability.utils.d.ts +20 -2
- package/dist/git/utils/reachability.utils.d.ts.map +1 -1
- package/dist/git/utils/reachability.utils.js +68 -7
- package/dist/git/utils/reachability.utils.js.map +1 -1
- package/dist/git/utils/rebase.utils.d.ts.map +1 -1
- package/dist/git/utils/rebase.utils.js.map +1 -1
- package/dist/git/utils/reference.utils.d.ts.map +1 -1
- package/dist/git/utils/reference.utils.js.map +1 -1
- package/dist/git/utils/remote.utils.d.ts.map +1 -1
- package/dist/git/utils/remote.utils.js.map +1 -1
- package/dist/git/utils/repository.utils.d.ts.map +1 -1
- package/dist/git/utils/repository.utils.js.map +1 -1
- package/dist/git/utils/resourceDescriptor.utils.d.ts.map +1 -1
- package/dist/git/utils/resourceDescriptor.utils.js.map +1 -1
- package/dist/git/utils/revision.utils.d.ts.map +1 -1
- package/dist/git/utils/revision.utils.js.map +1 -1
- package/dist/git/utils/search.utils.d.ts.map +1 -1
- package/dist/git/utils/search.utils.js.map +1 -1
- package/dist/git/utils/sorting.d.ts.map +1 -1
- package/dist/git/utils/sorting.js.map +1 -1
- package/dist/git/utils/sshKey.utils.d.ts +7 -0
- package/dist/git/utils/sshKey.utils.d.ts.map +1 -0
- package/dist/git/utils/sshKey.utils.js +25 -0
- package/dist/git/utils/sshKey.utils.js.map +1 -0
- package/dist/git/utils/status.utils.d.ts.map +1 -1
- package/dist/git/utils/status.utils.js.map +1 -1
- package/dist/git/utils/statusFile.utils.d.ts.map +1 -1
- package/dist/git/utils/statusFile.utils.js.map +1 -1
- package/dist/git/utils/tag.utils.d.ts.map +1 -1
- package/dist/git/utils/tag.utils.js.map +1 -1
- package/dist/git/utils/tooltip.utils.d.ts.map +1 -1
- package/dist/git/utils/tooltip.utils.js.map +1 -1
- package/dist/git/utils/uriAuthority.d.ts.map +1 -1
- package/dist/git/utils/uriAuthority.js.map +1 -1
- package/dist/git/utils/user.utils.d.ts.map +1 -1
- package/dist/git/utils/user.utils.js.map +1 -1
- package/dist/git/utils/worktree.utils.d.ts.map +1 -1
- package/dist/git/utils/worktree.utils.js.map +1 -1
- package/dist/git/watching/changeEvent.d.ts.map +1 -1
- package/dist/git/watching/changeEvent.js.map +1 -1
- package/dist/git/watching/classifyChange.d.ts.map +1 -1
- package/dist/git/watching/classifyChange.js.map +1 -1
- package/dist/git/watching/gitIgnoreFilter.d.ts.map +1 -1
- package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
- package/dist/git/watching/initWatcher.d.ts.map +1 -1
- package/dist/git/watching/initWatcher.js.map +1 -1
- package/dist/git/watching/provider.d.ts.map +1 -1
- package/dist/git/watching/provider.js.map +1 -1
- package/dist/git/watching/watchGroup.d.ts.map +1 -1
- package/dist/git/watching/watchGroup.js.map +1 -1
- package/dist/git/watching/watchService.d.ts +4 -0
- package/dist/git/watching/watchService.d.ts.map +1 -1
- package/dist/git/watching/watchService.js +15 -1
- package/dist/git/watching/watchService.js.map +1 -1
- package/dist/git/watching/watchSession.d.ts +7 -0
- package/dist/git/watching/watchSession.d.ts.map +1 -1
- package/dist/git/watching/watchSession.js +14 -2
- package/dist/git/watching/watchSession.js.map +1 -1
- package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
- package/dist/git/watching/watcherPatterns.js.map +1 -1
- package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.errors.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.errors.js.map +1 -1
- package/dist/git-cli/exec/exec.js.map +1 -1
- package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.types.js.map +1 -1
- package/dist/git-cli/exec/features.d.ts.map +1 -1
- package/dist/git-cli/exec/features.js.map +1 -1
- package/dist/git-cli/exec/git.d.ts +19 -27
- package/dist/git-cli/exec/git.d.ts.map +1 -1
- package/dist/git-cli/exec/git.js +126 -34
- package/dist/git-cli/exec/git.js.map +1 -1
- package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
- package/dist/git-cli/exec/gitQueue.js.map +1 -1
- package/dist/git-cli/exec/locator.d.ts.map +1 -1
- package/dist/git-cli/exec/locator.js.map +1 -1
- package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/blameParser.js.map +1 -1
- package/dist/git-cli/parsers/indexParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/indexParser.js.map +1 -1
- package/dist/git-cli/parsers/logParser.d.ts +9 -1
- package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/logParser.js +141 -60
- package/dist/git-cli/parsers/logParser.js.map +1 -1
- package/dist/git-cli/parsers/mergeTreeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/mergeTreeParser.js.map +1 -1
- package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/refParser.js.map +1 -1
- package/dist/git-cli/parsers/reflogParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/reflogParser.js.map +1 -1
- package/dist/git-cli/parsers/remoteParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/remoteParser.js.map +1 -1
- package/dist/git-cli/parsers/shortlogParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/shortlogParser.js.map +1 -1
- package/dist/git-cli/parsers/signatureParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/signatureParser.js.map +1 -1
- package/dist/git-cli/parsers/sshSignatureParser.d.ts +21 -0
- package/dist/git-cli/parsers/sshSignatureParser.d.ts.map +1 -0
- package/dist/git-cli/parsers/sshSignatureParser.js +78 -0
- package/dist/git-cli/parsers/sshSignatureParser.js.map +1 -0
- package/dist/git-cli/parsers/statusParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/statusParser.js.map +1 -1
- package/dist/git-cli/parsers/treeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/treeParser.js.map +1 -1
- package/dist/git-cli/parsers/worktreeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/worktreeParser.js +5 -7
- package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
- package/dist/git-cli/providers/blame.d.ts.map +1 -1
- package/dist/git-cli/providers/blame.js.map +1 -1
- package/dist/git-cli/providers/branches.d.ts +1 -0
- package/dist/git-cli/providers/branches.d.ts.map +1 -1
- package/dist/git-cli/providers/branches.js +51 -32
- package/dist/git-cli/providers/branches.js.map +1 -1
- package/dist/git-cli/providers/commitFilesetUtils.d.ts.map +1 -1
- package/dist/git-cli/providers/commitFilesetUtils.js.map +1 -1
- package/dist/git-cli/providers/commits.d.ts +12 -1
- package/dist/git-cli/providers/commits.d.ts.map +1 -1
- package/dist/git-cli/providers/commits.js +89 -8
- package/dist/git-cli/providers/commits.js.map +1 -1
- package/dist/git-cli/providers/config.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/git-cli/providers/diff.d.ts.map +1 -1
- package/dist/git-cli/providers/diff.js.map +1 -1
- package/dist/git-cli/providers/graph.d.ts +35 -1
- package/dist/git-cli/providers/graph.d.ts.map +1 -1
- package/dist/git-cli/providers/graph.js +1434 -330
- 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.map +1 -1
- package/dist/git-cli/providers/patch.d.ts.map +1 -1
- package/dist/git-cli/providers/patch.js.map +1 -1
- package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git-cli/providers/pausedOperations.js +3 -3
- package/dist/git-cli/providers/pausedOperations.js.map +1 -1
- package/dist/git-cli/providers/refs.d.ts.map +1 -1
- package/dist/git-cli/providers/refs.js.map +1 -1
- package/dist/git-cli/providers/remotes.d.ts.map +1 -1
- package/dist/git-cli/providers/remotes.js.map +1 -1
- package/dist/git-cli/providers/revision.d.ts +1 -0
- package/dist/git-cli/providers/revision.d.ts.map +1 -1
- package/dist/git-cli/providers/revision.js +33 -0
- package/dist/git-cli/providers/revision.js.map +1 -1
- package/dist/git-cli/providers/staging.d.ts.map +1 -1
- package/dist/git-cli/providers/staging.js.map +1 -1
- package/dist/git-cli/providers/stash.d.ts.map +1 -1
- package/dist/git-cli/providers/stash.js.map +1 -1
- package/dist/git-cli/providers/status.d.ts +28 -0
- package/dist/git-cli/providers/status.d.ts.map +1 -1
- package/dist/git-cli/providers/status.js +240 -154
- package/dist/git-cli/providers/status.js.map +1 -1
- package/dist/git-cli/providers/tags.d.ts.map +1 -1
- package/dist/git-cli/providers/tags.js +2 -1
- package/dist/git-cli/providers/tags.js.map +1 -1
- package/dist/git-cli/providers/worktrees.d.ts +2 -1
- package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
- package/dist/git-cli/providers/worktrees.js +28 -3
- 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 +8 -0
- package/dist/git-cli/service.js.map +1 -1
- package/dist/ipc/ipcServer.d.ts.map +1 -1
- package/dist/ipc/ipcServer.js +1 -1
- package/dist/ipc/ipcServer.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts +6 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.js +19 -0
- package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +68 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.js +262 -8
- package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
- package/dist/plus/agents/types.d.ts +36 -2
- package/dist/plus/agents/types.d.ts.map +1 -1
- package/dist/plus/ai/constants.d.ts +1 -2
- package/dist/plus/ai/constants.d.ts.map +1 -1
- package/dist/plus/ai/constants.js +1 -8
- package/dist/plus/ai/constants.js.map +1 -1
- package/dist/plus/ai/errors.d.ts.map +1 -1
- package/dist/plus/ai/errors.js.map +1 -1
- package/dist/plus/ai/models/conversation.d.ts.map +1 -1
- package/dist/plus/ai/models/conversation.js.map +1 -1
- package/dist/plus/ai/models/model.d.ts +2 -1
- package/dist/plus/ai/models/model.d.ts.map +1 -1
- package/dist/plus/ai/models/model.js +50 -1
- package/dist/plus/ai/models/model.js.map +1 -1
- package/dist/plus/ai/models/promptTemplates.d.ts +5 -2
- package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
- package/dist/plus/ai/models/promptTemplates.js.map +1 -1
- package/dist/plus/ai/models/provider.d.ts.map +1 -1
- package/dist/plus/ai/models/provider.js.map +1 -1
- package/dist/plus/ai/models/results.d.ts.map +1 -1
- package/dist/plus/ai/models/results.js.map +1 -1
- package/dist/plus/ai/prompts.d.ts +1 -1
- package/dist/plus/ai/prompts.d.ts.map +1 -1
- package/dist/plus/ai/prompts.js +15 -47
- package/dist/plus/ai/prompts.js.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.d.ts +5 -0
- package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.js +40 -3
- package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
- package/dist/plus/ai/providers/azureProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/azureProvider.js.map +1 -1
- package/dist/plus/ai/providers/context.d.ts.map +1 -1
- package/dist/plus/ai/providers/context.js.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.js +17 -1
- package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.js +25 -6
- package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.js +1 -0
- package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.js +21 -18
- package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +10 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
- package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/xaiProvider.js +14 -1
- package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
- package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/ai.utils.js +0 -2
- package/dist/plus/ai/utils/ai.utils.js.map +1 -1
- package/dist/plus/ai/utils/results.utils.d.ts +3 -0
- package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/results.utils.js +26 -0
- package/dist/plus/ai/utils/results.utils.js.map +1 -1
- package/dist/plus/ai/utils/truncation.utils.d.ts +1 -1
- package/dist/plus/ai/utils/truncation.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/truncation.utils.js.map +1 -1
- package/dist/plus/git-github/api/config.d.ts.map +1 -1
- package/dist/plus/git-github/api/config.js.map +1 -1
- package/dist/plus/git-github/api/github.d.ts +66 -3
- package/dist/plus/git-github/api/github.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.js +345 -74
- package/dist/plus/git-github/api/github.js.map +1 -1
- package/dist/plus/git-github/api/github.utils.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.utils.js.map +1 -1
- package/dist/plus/git-github/api/token.d.ts.map +1 -1
- package/dist/plus/git-github/api/token.js.map +1 -1
- package/dist/plus/git-github/api/tokenUtils.d.ts.map +1 -1
- package/dist/plus/git-github/api/tokenUtils.js.map +1 -1
- package/dist/plus/git-github/api/types.d.ts.map +1 -1
- package/dist/plus/git-github/api/types.js.map +1 -1
- package/dist/plus/git-github/context.d.ts.map +1 -1
- package/dist/plus/git-github/models.d.ts +5 -0
- package/dist/plus/git-github/models.d.ts.map +1 -1
- package/dist/plus/git-github/models.js +27 -2
- package/dist/plus/git-github/models.js.map +1 -1
- package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/blame.js.map +1 -1
- package/dist/plus/git-github/providers/github/branches.d.ts +2 -1
- package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/branches.js +7 -3
- package/dist/plus/git-github/providers/github/branches.js.map +1 -1
- package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/commits.js.map +1 -1
- package/dist/plus/git-github/providers/github/config.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/config.js.map +1 -1
- package/dist/plus/git-github/providers/github/contributors.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/contributors.js.map +1 -1
- package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/diff.js +2 -2
- package/dist/plus/git-github/providers/github/diff.js.map +1 -1
- package/dist/plus/git-github/providers/github/graph.d.ts +12 -1
- package/dist/plus/git-github/providers/github/graph.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/graph.js +85 -0
- package/dist/plus/git-github/providers/github/graph.js.map +1 -1
- package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/refs.js.map +1 -1
- package/dist/plus/git-github/providers/github/remotes.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/remotes.js.map +1 -1
- package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/revision.js.map +1 -1
- 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/git-github/providers/github/tags.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/tags.js +3 -1
- package/dist/plus/git-github/providers/github/tags.js.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
- package/dist/plus/git-github/providers/githubProvider.d.ts.map +1 -1
- package/dist/plus/git-github/providers/githubProvider.js.map +1 -1
- package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts +20 -1
- package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/cloudIntegrationService.js +134 -10
- package/dist/plus/integrations/authentication/cloudIntegrationService.js.map +1 -1
- package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts +52 -5
- package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/configuredIntegrationService.js +248 -46
- package/dist/plus/integrations/authentication/configuredIntegrationService.js.map +1 -1
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts +24 -4
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js +58 -26
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js.map +1 -1
- package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/integrationAuthenticationService.js +7 -3
- package/dist/plus/integrations/authentication/integrationAuthenticationService.js.map +1 -1
- package/dist/plus/integrations/authentication/manualTokenProvider.d.ts +1 -0
- package/dist/plus/integrations/authentication/manualTokenProvider.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/manualTokenProvider.js +9 -5
- package/dist/plus/integrations/authentication/manualTokenProvider.js.map +1 -1
- package/dist/plus/integrations/authentication/models.d.ts +33 -0
- package/dist/plus/integrations/authentication/models.d.ts.map +1 -1
- package/dist/plus/integrations/authentication/models.js.map +1 -1
- package/dist/plus/integrations/collectionMetadata.d.ts +21 -0
- package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -0
- package/dist/plus/integrations/collectionMetadata.js +121 -0
- package/dist/plus/integrations/collectionMetadata.js.map +1 -0
- package/dist/plus/integrations/constants.d.ts +12 -2
- package/dist/plus/integrations/constants.d.ts.map +1 -1
- package/dist/plus/integrations/constants.js +10 -0
- package/dist/plus/integrations/constants.js.map +1 -1
- package/dist/plus/integrations/context.d.ts +10 -6
- package/dist/plus/integrations/context.d.ts.map +1 -1
- package/dist/plus/integrations/errors.d.ts +65 -0
- package/dist/plus/integrations/errors.d.ts.map +1 -1
- package/dist/plus/integrations/errors.js +135 -0
- package/dist/plus/integrations/errors.js.map +1 -1
- package/dist/plus/integrations/index.d.ts +57 -12
- package/dist/plus/integrations/index.d.ts.map +1 -1
- package/dist/plus/integrations/index.js +39 -37
- package/dist/plus/integrations/index.js.map +1 -1
- package/dist/plus/integrations/integrationService.d.ts +297 -13
- package/dist/plus/integrations/integrationService.d.ts.map +1 -1
- package/dist/plus/integrations/integrationService.js +672 -36
- package/dist/plus/integrations/integrationService.js.map +1 -1
- package/dist/plus/integrations/lite.d.ts +47 -0
- package/dist/plus/integrations/lite.d.ts.map +1 -0
- package/dist/plus/integrations/lite.js +141 -0
- package/dist/plus/integrations/lite.js.map +1 -0
- package/dist/plus/integrations/manager.d.ts +332 -0
- package/dist/plus/integrations/manager.d.ts.map +1 -0
- package/dist/plus/integrations/manager.js +2 -0
- package/dist/plus/integrations/manager.js.map +1 -0
- package/dist/plus/integrations/models/gitHostIntegration.d.ts +262 -10
- package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
- package/dist/plus/integrations/models/gitHostIntegration.js +675 -101
- package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
- package/dist/plus/integrations/models/integration.d.ts +88 -3
- package/dist/plus/integrations/models/integration.d.ts.map +1 -1
- package/dist/plus/integrations/models/integration.js +192 -21
- package/dist/plus/integrations/models/integration.js.map +1 -1
- package/dist/plus/integrations/models/issuesIntegration.d.ts +70 -7
- package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -1
- package/dist/plus/integrations/models/issuesIntegration.js +108 -35
- package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
- package/dist/plus/integrations/providerFilters.d.ts +12 -0
- package/dist/plus/integrations/providerFilters.d.ts.map +1 -0
- package/dist/plus/integrations/providerFilters.js +14 -0
- package/dist/plus/integrations/providerFilters.js.map +1 -0
- package/dist/plus/integrations/providers/apiClients.d.ts.map +1 -1
- package/dist/plus/integrations/providers/apiClients.js +3 -3
- package/dist/plus/integrations/providers/apiClients.js.map +1 -1
- package/dist/plus/integrations/providers/apiConfig.d.ts +52 -0
- package/dist/plus/integrations/providers/apiConfig.d.ts.map +1 -0
- package/dist/plus/integrations/providers/apiConfig.js +19 -0
- package/dist/plus/integrations/providers/apiConfig.js.map +1 -0
- package/dist/plus/integrations/providers/azure/azure.d.ts +14 -2
- package/dist/plus/integrations/providers/azure/azure.d.ts.map +1 -1
- package/dist/plus/integrations/providers/azure/azure.js +107 -32
- package/dist/plus/integrations/providers/azure/azure.js.map +1 -1
- package/dist/plus/integrations/providers/azure/models.d.ts +16 -0
- package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/azure/models.js +6 -6
- package/dist/plus/integrations/providers/azure/models.js.map +1 -1
- package/dist/plus/integrations/providers/azureDevOps.d.ts +55 -9
- package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -1
- package/dist/plus/integrations/providers/azureDevOps.js +572 -79
- package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +13 -2
- package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/bitbucket.js +108 -32
- package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +19 -1
- package/dist/plus/integrations/providers/bitbucket-server/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket-server/models.js +20 -1
- package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket-server.d.ts +28 -4
- package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket-server.js +110 -6
- package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -1
- package/dist/plus/integrations/providers/bitbucket.d.ts +38 -4
- package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -1
- package/dist/plus/integrations/providers/bitbucket.js +330 -34
- package/dist/plus/integrations/providers/bitbucket.js.map +1 -1
- package/dist/plus/integrations/providers/github/github.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github/github.js +1 -1
- package/dist/plus/integrations/providers/github/github.js.map +1 -1
- package/dist/plus/integrations/providers/github/github.utils.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github/github.utils.js.map +1 -1
- package/dist/plus/integrations/providers/github/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github/models.js.map +1 -1
- package/dist/plus/integrations/providers/github.d.ts +49 -6
- package/dist/plus/integrations/providers/github.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github.js +289 -4
- package/dist/plus/integrations/providers/github.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +11 -3
- package/dist/plus/integrations/providers/gitlab/gitlab.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab/gitlab.js +121 -47
- package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts +6 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.js +8 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab/models.d.ts +10 -0
- package/dist/plus/integrations/providers/gitlab/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab/models.js +8 -5
- package/dist/plus/integrations/providers/gitlab/models.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab.d.ts +50 -5
- package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab.js +274 -8
- package/dist/plus/integrations/providers/gitlab.js.map +1 -1
- package/dist/plus/integrations/providers/jira.d.ts +13 -2
- package/dist/plus/integrations/providers/jira.d.ts.map +1 -1
- package/dist/plus/integrations/providers/jira.js +200 -30
- package/dist/plus/integrations/providers/jira.js.map +1 -1
- package/dist/plus/integrations/providers/linear.d.ts +16 -5
- package/dist/plus/integrations/providers/linear.d.ts.map +1 -1
- package/dist/plus/integrations/providers/linear.js +127 -21
- package/dist/plus/integrations/providers/linear.js.map +1 -1
- package/dist/plus/integrations/providers/models.d.ts +339 -60
- package/dist/plus/integrations/providers/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/models.js +307 -59
- package/dist/plus/integrations/providers/models.js.map +1 -1
- package/dist/plus/integrations/providers/providersApi.d.ts +144 -11
- package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -1
- package/dist/plus/integrations/providers/providersApi.js +486 -55
- package/dist/plus/integrations/providers/providersApi.js.map +1 -1
- package/dist/plus/integrations/providers/trello.d.ts +47 -0
- package/dist/plus/integrations/providers/trello.d.ts.map +1 -0
- package/dist/plus/integrations/providers/trello.js +141 -0
- package/dist/plus/integrations/providers/trello.js.map +1 -0
- package/dist/plus/integrations/providers/utils/providerPaging.d.ts +29 -0
- package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -0
- package/dist/plus/integrations/providers/utils/providerPaging.js +154 -0
- package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -0
- package/dist/plus/integrations/providers/utils.d.ts +21 -0
- package/dist/plus/integrations/providers/utils.d.ts.map +1 -1
- package/dist/plus/integrations/providers/utils.js +57 -6
- package/dist/plus/integrations/providers/utils.js.map +1 -1
- package/dist/plus/integrations/reads/broaden.d.ts +20 -0
- package/dist/plus/integrations/reads/broaden.d.ts.map +1 -0
- package/dist/plus/integrations/reads/broaden.js +326 -0
- package/dist/plus/integrations/reads/broaden.js.map +1 -0
- package/dist/plus/integrations/reads/context.d.ts +74 -0
- package/dist/plus/integrations/reads/context.d.ts.map +1 -0
- package/dist/plus/integrations/reads/context.js +2 -0
- package/dist/plus/integrations/reads/context.js.map +1 -0
- package/dist/plus/integrations/reads/cursors.d.ts +66 -0
- package/dist/plus/integrations/reads/cursors.d.ts.map +1 -0
- package/dist/plus/integrations/reads/cursors.js +133 -0
- package/dist/plus/integrations/reads/cursors.js.map +1 -0
- package/dist/plus/integrations/reads/drains.d.ts +60 -0
- package/dist/plus/integrations/reads/drains.d.ts.map +1 -0
- package/dist/plus/integrations/reads/drains.js +255 -0
- package/dist/plus/integrations/reads/drains.js.map +1 -0
- package/dist/plus/integrations/reads/filters.d.ts +81 -0
- package/dist/plus/integrations/reads/filters.d.ts.map +1 -0
- package/dist/plus/integrations/reads/filters.js +87 -0
- package/dist/plus/integrations/reads/filters.js.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.d.ts +17 -0
- package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.js +320 -0
- package/dist/plus/integrations/reads/hierarchy.js.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.utils.d.ts +77 -0
- package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.utils.js +128 -0
- package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -0
- package/dist/plus/integrations/reads/issueTracker.d.ts +19 -0
- package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -0
- package/dist/plus/integrations/reads/issueTracker.js +334 -0
- package/dist/plus/integrations/reads/issueTracker.js.map +1 -0
- package/dist/plus/integrations/reads/issues.d.ts +34 -0
- package/dist/plus/integrations/reads/issues.d.ts.map +1 -0
- package/dist/plus/integrations/reads/issues.js +244 -0
- package/dist/plus/integrations/reads/issues.js.map +1 -0
- package/dist/plus/integrations/reads/paging.d.ts +136 -0
- package/dist/plus/integrations/reads/paging.d.ts.map +1 -0
- package/dist/plus/integrations/reads/paging.js +221 -0
- package/dist/plus/integrations/reads/paging.js.map +1 -0
- package/dist/plus/integrations/reads/pullRequests.d.ts +32 -0
- package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -0
- package/dist/plus/integrations/reads/pullRequests.js +151 -0
- package/dist/plus/integrations/reads/pullRequests.js.map +1 -0
- package/dist/plus/integrations/reads/resolveRepository.d.ts +25 -0
- package/dist/plus/integrations/reads/resolveRepository.d.ts.map +1 -0
- package/dist/plus/integrations/reads/resolveRepository.js +235 -0
- package/dist/plus/integrations/reads/resolveRepository.js.map +1 -0
- package/dist/plus/integrations/reads/sweeps.d.ts +11 -0
- package/dist/plus/integrations/reads/sweeps.d.ts.map +1 -0
- package/dist/plus/integrations/reads/sweeps.js +125 -0
- package/dist/plus/integrations/reads/sweeps.js.map +1 -0
- package/dist/plus/integrations/reads/warnings.d.ts +47 -0
- package/dist/plus/integrations/reads/warnings.d.ts.map +1 -0
- package/dist/plus/integrations/reads/warnings.js +81 -0
- package/dist/plus/integrations/reads/warnings.js.map +1 -0
- package/dist/plus/integrations/results.d.ts +189 -0
- package/dist/plus/integrations/results.d.ts.map +1 -0
- package/dist/plus/integrations/results.js +62 -0
- package/dist/plus/integrations/results.js.map +1 -0
- package/dist/plus/integrations/utils/domain.utils.d.ts +5 -0
- package/dist/plus/integrations/utils/domain.utils.d.ts.map +1 -0
- package/dist/plus/integrations/utils/domain.utils.js +27 -0
- package/dist/plus/integrations/utils/domain.utils.js.map +1 -0
- package/dist/plus/integrations/utils/integration.utils.d.ts +27 -1
- package/dist/plus/integrations/utils/integration.utils.d.ts.map +1 -1
- package/dist/plus/integrations/utils/integration.utils.js +86 -15
- package/dist/plus/integrations/utils/integration.utils.js.map +1 -1
- package/dist/utils/array.d.ts.map +1 -1
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/brand.d.ts.map +1 -1
- package/dist/utils/cancellation.d.ts +13 -0
- package/dist/utils/cancellation.d.ts.map +1 -1
- package/dist/utils/cancellation.js +52 -7
- package/dist/utils/cancellation.js.map +1 -1
- package/dist/utils/charCode.d.ts.map +1 -1
- package/dist/utils/coalescedRun.d.ts +16 -0
- package/dist/utils/coalescedRun.d.ts.map +1 -0
- package/dist/utils/coalescedRun.js +43 -0
- package/dist/utils/coalescedRun.js.map +1 -0
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/color.js +3 -3
- package/dist/utils/color.js.map +1 -1
- package/dist/utils/date.d.ts +24 -0
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +62 -0
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/debounce.js +1 -1
- package/dist/utils/debounce.js.map +1 -1
- package/dist/utils/decorators/debounce.d.ts.map +1 -1
- package/dist/utils/decorators/debounce.js.map +1 -1
- package/dist/utils/decorators/gate.d.ts.map +1 -1
- package/dist/utils/decorators/gate.js +2 -2
- package/dist/utils/decorators/gate.js.map +1 -1
- package/dist/utils/decorators/log.d.ts.map +1 -1
- package/dist/utils/decorators/log.js +5 -5
- package/dist/utils/decorators/log.js.map +1 -1
- package/dist/utils/decorators/memoize.d.ts.map +1 -1
- package/dist/utils/decorators/memoize.js +2 -2
- package/dist/utils/decorators/memoize.js.map +1 -1
- package/dist/utils/decorators/resolver.d.ts.map +1 -1
- package/dist/utils/decorators/resolver.js.map +1 -1
- package/dist/utils/decorators/sequentialize.d.ts.map +1 -1
- package/dist/utils/decorators/sequentialize.js +2 -2
- package/dist/utils/decorators/sequentialize.js.map +1 -1
- package/dist/utils/decorators/serializable.d.ts.map +1 -1
- package/dist/utils/decorators/serializable.js +1 -1
- package/dist/utils/decorators/serializable.js.map +1 -1
- package/dist/utils/dedupedAsyncCache.d.ts.map +1 -1
- package/dist/utils/env/browser/base64.d.ts.map +1 -1
- package/dist/utils/env/browser/base64.js.map +1 -1
- package/dist/utils/env/browser/crypto.d.ts.map +1 -1
- package/dist/utils/env/browser/crypto.js.map +1 -1
- package/dist/utils/env/browser/fs.d.ts.map +1 -1
- package/dist/utils/env/browser/fs.js.map +1 -1
- package/dist/utils/env/browser/hex.d.ts.map +1 -1
- package/dist/utils/env/browser/hex.js.map +1 -1
- package/dist/utils/env/browser/hrtime.d.ts.map +1 -1
- package/dist/utils/env/browser/hrtime.js.map +1 -1
- package/dist/utils/env/browser/logScope.d.ts.map +1 -1
- package/dist/utils/env/browser/logScope.js.map +1 -1
- package/dist/utils/env/browser/md5.d.ts.map +1 -1
- package/dist/utils/env/browser/md5.js.map +1 -1
- package/dist/utils/env/browser/platform.d.ts.map +1 -1
- package/dist/utils/env/browser/platform.js.map +1 -1
- package/dist/utils/env/node/base64.d.ts.map +1 -1
- package/dist/utils/env/node/base64.js.map +1 -1
- package/dist/utils/env/node/crypto.d.ts.map +1 -1
- package/dist/utils/env/node/crypto.js.map +1 -1
- package/dist/utils/env/node/exec.d.ts +9 -1
- package/dist/utils/env/node/exec.d.ts.map +1 -1
- package/dist/utils/env/node/exec.js +11 -4
- package/dist/utils/env/node/exec.js.map +1 -1
- package/dist/utils/env/node/fs.d.ts.map +1 -1
- package/dist/utils/env/node/fs.js.map +1 -1
- package/dist/utils/env/node/hex.d.ts.map +1 -1
- package/dist/utils/env/node/hex.js.map +1 -1
- package/dist/utils/env/node/hrtime.d.ts.map +1 -1
- package/dist/utils/env/node/hrtime.js.map +1 -1
- package/dist/utils/env/node/logScope.d.ts.map +1 -1
- package/dist/utils/env/node/logScope.js.map +1 -1
- package/dist/utils/env/node/platform.d.ts.map +1 -1
- package/dist/utils/env/node/platform.js.map +1 -1
- package/dist/utils/event.d.ts.map +1 -1
- package/dist/utils/event.js +18 -22
- package/dist/utils/event.js.map +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js.map +1 -1
- package/dist/utils/function.d.ts.map +1 -1
- package/dist/utils/function.js +3 -3
- package/dist/utils/function.js.map +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/iterable.d.ts.map +1 -1
- package/dist/utils/iterable.js +2 -6
- package/dist/utils/iterable.js.map +1 -1
- package/dist/utils/lazy.d.ts.map +1 -1
- package/dist/utils/lazy.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/logger.scoped.js +1 -1
- package/dist/utils/logger.scoped.js.map +1 -1
- package/dist/utils/lruMap.d.ts.map +1 -1
- package/dist/utils/lruMap.js.map +1 -1
- package/dist/utils/mru.d.ts.map +1 -1
- package/dist/utils/mru.js.map +1 -1
- package/dist/utils/object.js.map +1 -1
- package/dist/utils/paging.d.ts +29 -0
- package/dist/utils/paging.d.ts.map +1 -1
- package/dist/utils/paging.js +18 -0
- package/dist/utils/paging.js.map +1 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/promise.d.ts +10 -0
- package/dist/utils/promise.d.ts.map +1 -1
- package/dist/utils/promise.js +26 -3
- package/dist/utils/promise.js.map +1 -1
- package/dist/utils/promiseCache.d.ts +12 -2
- package/dist/utils/promiseCache.d.ts.map +1 -1
- package/dist/utils/promiseCache.js +80 -50
- package/dist/utils/promiseCache.js.map +1 -1
- package/dist/utils/searchTree.d.ts.map +1 -1
- package/dist/utils/searchTree.js +4 -1
- package/dist/utils/searchTree.js.map +1 -1
- package/dist/utils/stopwatch.d.ts.map +1 -1
- package/dist/utils/string.js +1 -1
- package/dist/utils/string.js.map +1 -1
- package/dist/utils/subscriptionManager.d.ts.map +1 -1
- package/dist/utils/subscriptionManager.js.map +1 -1
- package/dist/utils/trie.d.ts.map +1 -1
- package/dist/utils/trie.js +1 -0
- package/dist/utils/trie.js.map +1 -1
- package/docs/integrations.md +372 -0
- package/docs/kepler-read-api-parity.md +112 -0
- package/package.json +238 -213
- package/src/git/cache.ts +75 -8
- package/src/git/errors.ts +36 -1
- package/src/git/models/commit.ts +1 -1
- package/src/git/models/graph.ts +147 -0
- package/src/git/models/graphSession.ts +205 -0
- package/src/git/models/issue.ts +12 -1
- package/src/git/models/pullRequest.ts +27 -1
- package/src/git/models/repository.ts +24 -1
- package/src/git/models/resourceDescriptor.ts +17 -0
- package/src/git/models/signature.ts +16 -0
- package/src/git/models/tag.ts +6 -1
- package/src/git/parsers/diffParser.ts +1 -1
- package/src/git/providers/branches.ts +6 -1
- package/src/git/providers/commits.ts +6 -1
- package/src/git/providers/config.ts +5 -1
- package/src/git/providers/graph.ts +69 -2
- package/src/git/providers/status.ts +1 -1
- package/src/git/providers/worktrees.ts +3 -1
- package/src/git/remotes/azure-devops.ts +29 -33
- package/src/git/remotes/bitbucket-server.ts +23 -25
- package/src/git/remotes/bitbucket.ts +23 -25
- package/src/git/remotes/gerrit.ts +12 -14
- package/src/git/remotes/gitea.ts +13 -15
- package/src/git/remotes/github.ts +56 -58
- package/src/git/remotes/gitlab.ts +102 -104
- package/src/git/run.types.ts +54 -4
- package/src/git/utils/branch.utils.ts +12 -1
- package/src/git/utils/contributor.utils.ts +1 -1
- package/src/git/utils/fileStatus.utils.ts +7 -0
- package/src/git/utils/graph.utils.ts +46 -0
- package/src/git/utils/issue.utils.ts +1 -0
- package/src/git/utils/pullRequest.utils.ts +9 -0
- package/src/git/utils/reachability.utils.ts +79 -8
- package/src/git/utils/sshKey.utils.ts +30 -0
- package/src/git/watching/watchService.ts +16 -1
- package/src/git/watching/watchSession.ts +20 -2
- package/src/git-cli/exec/git.ts +144 -42
- package/src/git-cli/parsers/logParser.ts +83 -1
- package/src/git-cli/parsers/sshSignatureParser.ts +85 -0
- package/src/git-cli/parsers/worktreeParser.ts +5 -7
- package/src/git-cli/providers/branches.ts +60 -38
- package/src/git-cli/providers/commits.ts +102 -9
- package/src/git-cli/providers/graph.ts +1771 -393
- package/src/git-cli/providers/pausedOperations.ts +3 -3
- package/src/git-cli/providers/revision.ts +42 -0
- package/src/git-cli/providers/status.ts +333 -178
- package/src/git-cli/providers/tags.ts +2 -0
- package/src/git-cli/providers/worktrees.ts +40 -4
- package/src/git-cli/service.ts +9 -0
- package/src/ipc/ipcServer.ts +1 -1
- package/src/plus/agents/providers/claudeCodeProvider.ts +25 -0
- package/src/plus/agents/providers/claudeCodeTranscript.ts +320 -8
- package/src/plus/agents/types.ts +34 -0
- package/src/plus/ai/constants.ts +1 -9
- package/src/plus/ai/models/model.ts +53 -2
- package/src/plus/ai/models/promptTemplates.ts +9 -2
- package/src/plus/ai/prompts.ts +16 -48
- package/src/plus/ai/providers/anthropicProvider.ts +45 -3
- package/src/plus/ai/providers/deepSeekProvider.ts +17 -1
- package/src/plus/ai/providers/geminiProvider.ts +25 -6
- package/src/plus/ai/providers/gitkrakenProvider.ts +2 -0
- package/src/plus/ai/providers/huggingFaceProvider.ts +28 -21
- package/src/plus/ai/providers/openAICompatibleProviderBase.ts +16 -1
- package/src/plus/ai/providers/xaiProvider.ts +14 -1
- package/src/plus/ai/utils/ai.utils.ts +0 -2
- package/src/plus/ai/utils/results.utils.ts +32 -0
- package/src/plus/ai/utils/truncation.utils.ts +0 -1
- package/src/plus/git-github/api/github.ts +484 -104
- package/src/plus/git-github/models.ts +33 -0
- package/src/plus/git-github/providers/github/branches.ts +6 -3
- package/src/plus/git-github/providers/github/diff.ts +1 -1
- package/src/plus/git-github/providers/github/graph.ts +131 -0
- package/src/plus/git-github/providers/github/tags.ts +2 -0
- package/src/plus/integrations/authentication/cloudIntegrationService.ts +189 -17
- package/src/plus/integrations/authentication/configuredIntegrationService.ts +287 -50
- package/src/plus/integrations/authentication/integrationAuthenticationProvider.ts +105 -31
- package/src/plus/integrations/authentication/integrationAuthenticationService.ts +7 -3
- package/src/plus/integrations/authentication/manualTokenProvider.ts +12 -5
- package/src/plus/integrations/authentication/models.ts +35 -1
- package/src/plus/integrations/collectionMetadata.ts +143 -0
- package/src/plus/integrations/constants.ts +21 -0
- package/src/plus/integrations/context.ts +8 -9
- package/src/plus/integrations/errors.ts +153 -0
- package/src/plus/integrations/index.ts +148 -51
- package/src/plus/integrations/integrationService.ts +940 -49
- package/src/plus/integrations/lite.ts +233 -0
- package/src/plus/integrations/manager.ts +359 -0
- package/src/plus/integrations/models/gitHostIntegration.ts +1005 -134
- package/src/plus/integrations/models/integration.ts +293 -24
- package/src/plus/integrations/models/issuesIntegration.ts +132 -39
- package/src/plus/integrations/providerFilters.ts +12 -0
- package/src/plus/integrations/providers/apiClients.ts +8 -11
- package/src/plus/integrations/providers/apiConfig.ts +71 -0
- package/src/plus/integrations/providers/azure/azure.ts +164 -33
- package/src/plus/integrations/providers/azure/models.ts +19 -6
- package/src/plus/integrations/providers/azureDevOps.ts +766 -101
- package/src/plus/integrations/providers/bitbucket/bitbucket.ts +164 -34
- package/src/plus/integrations/providers/bitbucket-server/models.ts +32 -1
- package/src/plus/integrations/providers/bitbucket-server.ts +173 -8
- package/src/plus/integrations/providers/bitbucket.ts +489 -45
- package/src/plus/integrations/providers/github/github.ts +2 -2
- package/src/plus/integrations/providers/github/github.utils.ts +1 -1
- package/src/plus/integrations/providers/github.ts +390 -6
- package/src/plus/integrations/providers/gitlab/gitlab.ts +170 -60
- package/src/plus/integrations/providers/gitlab/gitlab.utils.ts +9 -0
- package/src/plus/integrations/providers/gitlab/models.ts +19 -5
- package/src/plus/integrations/providers/gitlab.ts +369 -10
- package/src/plus/integrations/providers/jira.ts +247 -42
- package/src/plus/integrations/providers/linear.ts +154 -27
- package/src/plus/integrations/providers/models.ts +583 -75
- package/src/plus/integrations/providers/providersApi.ts +849 -86
- package/src/plus/integrations/providers/trello.ts +205 -0
- package/src/plus/integrations/providers/utils/providerPaging.ts +177 -0
- package/src/plus/integrations/providers/utils.ts +68 -8
- package/src/plus/integrations/reads/broaden.ts +452 -0
- package/src/plus/integrations/reads/context.ts +99 -0
- package/src/plus/integrations/reads/cursors.ts +224 -0
- package/src/plus/integrations/reads/drains.ts +343 -0
- package/src/plus/integrations/reads/filters.ts +124 -0
- package/src/plus/integrations/reads/hierarchy.ts +473 -0
- package/src/plus/integrations/reads/hierarchy.utils.ts +155 -0
- package/src/plus/integrations/reads/issueTracker.ts +468 -0
- package/src/plus/integrations/reads/issues.ts +409 -0
- package/src/plus/integrations/reads/paging.ts +277 -0
- package/src/plus/integrations/reads/pullRequests.ts +260 -0
- package/src/plus/integrations/reads/resolveRepository.ts +272 -0
- package/src/plus/integrations/reads/sweeps.ts +185 -0
- package/src/plus/integrations/reads/warnings.ts +170 -0
- package/src/plus/integrations/results.ts +275 -0
- package/src/plus/integrations/utils/domain.utils.ts +26 -0
- package/src/plus/integrations/utils/integration.utils.ts +93 -16
- package/src/utils/brand.ts +0 -2
- package/src/utils/cancellation.ts +56 -7
- package/src/utils/coalescedRun.ts +45 -0
- package/src/utils/color.ts +3 -3
- package/src/utils/date.ts +72 -0
- package/src/utils/debounce.ts +1 -1
- package/src/utils/decorators/gate.ts +2 -2
- package/src/utils/decorators/log.ts +5 -5
- package/src/utils/decorators/memoize.ts +2 -2
- package/src/utils/decorators/sequentialize.ts +2 -2
- package/src/utils/decorators/serializable.ts +1 -1
- package/src/utils/env/node/exec.ts +20 -5
- package/src/utils/event.ts +19 -25
- package/src/utils/function.ts +3 -3
- package/src/utils/iterable.ts +2 -6
- package/src/utils/logger.scoped.ts +1 -1
- package/src/utils/logger.ts +1 -1
- package/src/utils/paging.ts +46 -0
- package/src/utils/promise.ts +33 -3
- package/src/utils/promiseCache.ts +81 -51
- package/src/utils/searchTree.ts +4 -2
- package/src/utils/string.ts +1 -1
- package/src/utils/trie.ts +1 -0
- package/dist/plus/ai/providers/githubModelsProvider.d.ts +0 -19
- package/dist/plus/ai/providers/githubModelsProvider.d.ts.map +0 -1
- package/dist/plus/ai/providers/githubModelsProvider.js +0 -51
- package/dist/plus/ai/providers/githubModelsProvider.js.map +0 -1
- package/src/plus/ai/providers/githubModelsProvider.ts +0 -92
|
@@ -45,6 +45,12 @@ export interface WatchSessionOptions {
|
|
|
45
45
|
* global event forwarding without affecting lifecycle callbacks.
|
|
46
46
|
*/
|
|
47
47
|
readonly onDidFireRepoChange?: (event: WatcherRepoChangeEvent) => void;
|
|
48
|
+
/**
|
|
49
|
+
* Called whenever a debounced working-tree change is dispatched to subscribers. Like
|
|
50
|
+
* {@link onDidFireRepoChange}, does NOT count as a subscriber — used by WatchService for global
|
|
51
|
+
* event forwarding (the single point that drives the cache's status clock for working-tree edits).
|
|
52
|
+
*/
|
|
53
|
+
readonly onDidFireWorkingTreeChange?: (repoPath: string) => void;
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
const defaultRepoDelay = 250;
|
|
@@ -82,6 +88,7 @@ export class RepositoryWatchSession implements UnifiedDisposable {
|
|
|
82
88
|
|
|
83
89
|
private readonly lifecycle?: WatchSessionLifecycle;
|
|
84
90
|
private readonly onDidFireRepoChangeCallback?: (event: WatcherRepoChangeEvent) => void;
|
|
91
|
+
private readonly onDidFireWorkingTreeChangeCallback?: (repoPath: string) => void;
|
|
85
92
|
|
|
86
93
|
constructor(options: WatchSessionOptions) {
|
|
87
94
|
this.repoPath = options.repoPath;
|
|
@@ -91,6 +98,7 @@ export class RepositoryWatchSession implements UnifiedDisposable {
|
|
|
91
98
|
this.effectiveWorkingTreeMs = this.defaultWorkingTreeMs;
|
|
92
99
|
this.lifecycle = options.lifecycle;
|
|
93
100
|
this.onDidFireRepoChangeCallback = options.onDidFireRepoChange;
|
|
101
|
+
this.onDidFireWorkingTreeChangeCallback = options.onDidFireWorkingTreeChange;
|
|
94
102
|
this._suspended = options.suspended ?? false;
|
|
95
103
|
}
|
|
96
104
|
|
|
@@ -274,7 +282,12 @@ export class RepositoryWatchSession implements UnifiedDisposable {
|
|
|
274
282
|
fireChangeImmediate(...changes: RepositoryChange[]): void {
|
|
275
283
|
if (this._disposed || changes.length === 0) return;
|
|
276
284
|
|
|
277
|
-
|
|
285
|
+
const event = new WatcherRepoChangeEvent(this.repoPath, changes);
|
|
286
|
+
// Same contract as `flushRepo`: notify the global forwarder (which advances the cache's status clock) BEFORE
|
|
287
|
+
// subscribers. Skipping it here would route changes to subscribers that no one advanced the clock for —
|
|
288
|
+
// subscribers see them as session-routed and (correctly) don't re-advance, so the cache would go stale.
|
|
289
|
+
this.onDidFireRepoChangeCallback?.(event);
|
|
290
|
+
this.repoEmitter.fire(event);
|
|
278
291
|
}
|
|
279
292
|
|
|
280
293
|
/** Push interpreted repo changes into the pipeline */
|
|
@@ -321,8 +334,10 @@ export class RepositoryWatchSession implements UnifiedDisposable {
|
|
|
321
334
|
if (event == null) return;
|
|
322
335
|
|
|
323
336
|
this.pendingRepoEvent = undefined;
|
|
324
|
-
|
|
337
|
+
// Advance any cache clock BEFORE notifying subscribers (same rationale as `flushWorkingTree`): a subscriber
|
|
338
|
+
// that synchronously reads status must see the post-change generation, not a joinable pre-change run.
|
|
325
339
|
this.onDidFireRepoChangeCallback?.(event);
|
|
340
|
+
this.repoEmitter.fire(event);
|
|
326
341
|
}
|
|
327
342
|
|
|
328
343
|
private scheduleRepoFlush(delayOverride?: number): void {
|
|
@@ -351,6 +366,9 @@ export class RepositoryWatchSession implements UnifiedDisposable {
|
|
|
351
366
|
|
|
352
367
|
const paths = this.pendingWorkingTreePaths;
|
|
353
368
|
this.pendingWorkingTreePaths = new Set();
|
|
369
|
+
// Advance the cache's status clock (via WatchService's global forwarding) BEFORE notifying subscribers,
|
|
370
|
+
// so a subscriber that synchronously reads status sees the post-change generation, not a joinable pre-change run.
|
|
371
|
+
this.onDidFireWorkingTreeChangeCallback?.(this.repoPath);
|
|
354
372
|
this.workingTreeEmitter.fire({ repoPath: this.repoPath, paths: paths });
|
|
355
373
|
}
|
|
356
374
|
|
package/src/git-cli/exec/git.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
CommitErrorReason,
|
|
9
9
|
FetchErrorReason,
|
|
10
10
|
GitCommandError,
|
|
11
|
+
GitWarningKey,
|
|
11
12
|
MergeErrorReason,
|
|
12
13
|
PausedOperationAbortErrorReason,
|
|
13
14
|
PausedOperationContinueErrorReason,
|
|
@@ -24,8 +25,9 @@ import type {
|
|
|
24
25
|
WorktreeCreateErrorReason,
|
|
25
26
|
WorktreeDeleteErrorReason,
|
|
26
27
|
} from '../../git/errors.js';
|
|
27
|
-
import { WorkspaceUntrustedError } from '../../git/errors.js';
|
|
28
|
+
import { GitWarnings, WorkspaceUntrustedError } from '../../git/errors.js';
|
|
28
29
|
import type { SigningFormat } from '../../git/models/signature.js';
|
|
30
|
+
import type { GitRunCancellation } from '../../git/run.types.js';
|
|
29
31
|
import { CancellationError, getAbortSignalId, isCancellationError } from '../../utils/cancellation.js';
|
|
30
32
|
import { getScopedCounter } from '../../utils/counter.js';
|
|
31
33
|
import { getDurationMilliseconds, hrtime } from '../../utils/hrtime.js';
|
|
@@ -126,26 +128,16 @@ export const GitErrors = {
|
|
|
126
128
|
unsafeRepository:
|
|
127
129
|
/(?:^fatal:\s*detected dubious ownership in repository at '([^']+)'|unsafe repository \('([^']+)' is owned by someone else\))[\s\S]*(git config --global --add safe\.directory [^\n•]+)/m,
|
|
128
130
|
unstagedChanges: /You have unstaged changes/i,
|
|
131
|
+
// Matches both variants: with a lock reason (`..., lock reason: <reason>`) and without (`...;`)
|
|
132
|
+
worktreeLocked: /fatal:\s*cannot remove a locked working tree/i,
|
|
133
|
+
// Only matches the variant where Git reports a lock reason; the reason is free text, so capture the whole line
|
|
134
|
+
worktreeLockedReason: /cannot remove a locked working tree,[ \t]*lock reason:[ \t]*(.*)/i,
|
|
129
135
|
} as const;
|
|
130
136
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
noCommits: /does not have any commits/i,
|
|
136
|
-
notFound: /Path '.*?' does not exist in/i,
|
|
137
|
-
foundButNotInRevision: /Path '.*?' exists on disk, but not in/i,
|
|
138
|
-
headNotABranch: /HEAD does not point to a branch/i,
|
|
139
|
-
noUpstream: /no upstream configured for branch '(.*?)'/i,
|
|
140
|
-
unknownRevision:
|
|
141
|
-
/ambiguous argument '.*?': unknown revision or path not in the working tree|not stored as a remote-tracking branch/i,
|
|
142
|
-
mustRunInWorkTree: /this operation must be run in a work tree/i,
|
|
143
|
-
patchWithConflicts: /Applied patch to '.*?' with conflicts/i,
|
|
144
|
-
noRemoteRepositorySpecified: /No remote repository specified\./i,
|
|
145
|
-
remoteConnectionError: /Could not read from remote repository/i,
|
|
146
|
-
notAGitCommand: /'.+' is not a git command/i,
|
|
147
|
-
tipBehind: /tip of your current branch is behind/i,
|
|
148
|
-
} as const;
|
|
137
|
+
// `GitWarnings` moved to `@gitlens/git/errors.js` so the shared run contract can name its keys; re-exported
|
|
138
|
+
// here because it's long-established as part of this module's surface.
|
|
139
|
+
export { GitWarnings };
|
|
140
|
+
export type { GitWarningKey } from '../../git/errors.js';
|
|
149
141
|
|
|
150
142
|
export class GitError extends Error {
|
|
151
143
|
readonly cmd: string | undefined;
|
|
@@ -393,6 +385,8 @@ const errorToReasonMap = new Map<GitCommand, [RegExp, GitCommandToReasonMap[GitC
|
|
|
393
385
|
[
|
|
394
386
|
'worktree-delete',
|
|
395
387
|
[
|
|
388
|
+
// Must come first -- a locked worktree's lock reason is free text that can otherwise match the errors below
|
|
389
|
+
[GitErrors.worktreeLocked, 'locked'],
|
|
396
390
|
[GitErrors.mainWorkingTree, 'defaultWorkingTree'],
|
|
397
391
|
[GitErrors.uncommittedChanges, 'uncommittedChanges'],
|
|
398
392
|
[GitErrors.failedToDeleteDirectoryNotEmpty, 'directoryNotEmpty'],
|
|
@@ -653,14 +647,37 @@ export class Git {
|
|
|
653
647
|
return options.caching.cache.getOrCreate(
|
|
654
648
|
options.caching.commonPath ?? options.cwd!,
|
|
655
649
|
gitCommand,
|
|
656
|
-
async cacheable => {
|
|
657
|
-
|
|
658
|
-
|
|
650
|
+
async (cacheable, signal) => {
|
|
651
|
+
// Bind the shared spawn to the aggregate `signal` (fires only when ALL current callers
|
|
652
|
+
// abort), not this-caller's `options.cancellation` — otherwise a superseded caller's
|
|
653
|
+
// abort would kill the shared command and reject concurrent riders that never cancelled.
|
|
654
|
+
const result = await this.runCore<T>(
|
|
655
|
+
{ ...options, caching: undefined, cancellation: signal ?? options.cancellation },
|
|
656
|
+
runArgs,
|
|
657
|
+
gitCommand,
|
|
658
|
+
);
|
|
659
|
+
// Never cache a result that isn't a genuine command outcome. Under `errors: 'ignore'` a
|
|
660
|
+
// cancelled/aborted run RESOLVES an empty result, which — left cached — would be served as a
|
|
661
|
+
// real empty result for the full TTL (e.g. a valid merge-base read back as "none").
|
|
662
|
+
// Invalidate on anything that isn't a clean exit, or whenever the aggregate signal aborted,
|
|
663
|
+
// so the entry self-evicts instead of poisoning later callers.
|
|
664
|
+
//
|
|
665
|
+
// `status !== 'exited'` is what catches the case a bare `exitCode` check cannot. A swallowed
|
|
666
|
+
// `GitWarnings` match used to report `exitCode: 0` UNCONDITIONALLY — the old code read it off
|
|
667
|
+
// a `result` that is only ever assigned on the non-throwing path, so it was always the `?? 0`
|
|
668
|
+
// fallback — which meant `exitCode !== 0` could never fire and every swallowed failure was
|
|
669
|
+
// cached. A `warned` result now carries git's real code, so it's the status, not the code,
|
|
670
|
+
// that has to do the work here. The `exitCode !== 0` half is kept as-is — a non-zero exit is
|
|
671
|
+
// a real answer and arguably cacheable, but it isn't cached today and this isn't the change
|
|
672
|
+
// to start.
|
|
673
|
+
if (result.completion.status !== 'exited' || result.exitCode !== 0 || signal?.aborted) {
|
|
659
674
|
cacheable.invalidate();
|
|
660
675
|
}
|
|
661
676
|
return result;
|
|
662
677
|
},
|
|
663
|
-
|
|
678
|
+
// Forward this caller's cancellation so `getOrCreate` races each caller's own wait — an
|
|
679
|
+
// aborting caller rejects only itself, leaving the shared work (and its riders) intact.
|
|
680
|
+
{ ...options.caching.options, cancellation: options.cancellation },
|
|
664
681
|
);
|
|
665
682
|
}
|
|
666
683
|
|
|
@@ -746,12 +763,42 @@ export class Git {
|
|
|
746
763
|
let result;
|
|
747
764
|
try {
|
|
748
765
|
result = await promise;
|
|
766
|
+
// A normal `runSpawn` only resolves on a clean exit — `code !== 0 || signal` rejects — but the
|
|
767
|
+
// `exitCodeOnly` overload resolves unconditionally, INCLUDING for a signalled run (no code, partial
|
|
768
|
+
// or absent stdout). Coercing that to `0` would report a killed command as a clean success, so
|
|
769
|
+
// classify it as the failure it is.
|
|
770
|
+
if (result.exitCode == null) {
|
|
771
|
+
// SIGTERM is how BOTH a timeout kill and a caller abort terminate, so it has to group with
|
|
772
|
+
// cancellations here exactly as it does on the reject path — `failed`/`signal` is for every
|
|
773
|
+
// OTHER signal. Only `exitCodeOnly` reaches this: a native spawn `timeout` fires
|
|
774
|
+
// `close(null, 'SIGTERM')` with no `error` event, so it resolves instead of rejecting.
|
|
775
|
+
// Throwing hands it to the catch below, which owns the timeout-vs-abort heuristic, the ABORTED
|
|
776
|
+
// log, and the `onAborted` hook — none of which a branch here would fire.
|
|
777
|
+
if (result.signal === 'SIGTERM') {
|
|
778
|
+
throw new CancelledRunError(gitCommand, true, undefined, result.signal);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
return {
|
|
782
|
+
stdout: result.stdout,
|
|
783
|
+
stderr: result.stderr,
|
|
784
|
+
completion: {
|
|
785
|
+
status: 'failed',
|
|
786
|
+
reason: result.signal != null ? 'signal' : 'unstarted',
|
|
787
|
+
error: new Error(
|
|
788
|
+
`Command terminated without an exit code${result.signal != null ? ` (${result.signal})` : ''}`,
|
|
789
|
+
),
|
|
790
|
+
},
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
|
|
749
794
|
return {
|
|
750
795
|
stdout: result.stdout,
|
|
751
796
|
stderr: result.stderr,
|
|
752
|
-
exitCode: result.exitCode
|
|
797
|
+
exitCode: result.exitCode,
|
|
798
|
+
completion: { status: 'exited', code: result.exitCode },
|
|
753
799
|
};
|
|
754
800
|
} catch (ex) {
|
|
801
|
+
let cancellationReason: GitRunCancellation = 'unknown';
|
|
755
802
|
if (ex instanceof CancelledRunError) {
|
|
756
803
|
const duration = getDurationMilliseconds(start);
|
|
757
804
|
const timeout = runOpts.timeout ?? 0;
|
|
@@ -761,6 +808,9 @@ export class Git {
|
|
|
761
808
|
: cancellation?.aborted
|
|
762
809
|
? 'cancellation'
|
|
763
810
|
: 'unknown';
|
|
811
|
+
// Also surfaced on the result, but DIAGNOSTIC ONLY — a timeout kill and a caller abort are both
|
|
812
|
+
// SIGTERM, so this duration heuristic can be wrong near the boundary. Never gate behavior on it.
|
|
813
|
+
cancellationReason = reason === 'cancellation' ? 'aborted' : reason;
|
|
764
814
|
Logger.warn(
|
|
765
815
|
`${formatLoggableScopeBlock('GIT')} ${gitCommand} \u00b7 ABORTED after ${duration}ms (${reason})`,
|
|
766
816
|
);
|
|
@@ -774,19 +824,44 @@ export class Git {
|
|
|
774
824
|
|
|
775
825
|
if (errorHandling === 'ignore') {
|
|
776
826
|
if (ex instanceof RunError) {
|
|
827
|
+
// `code` is `string | number | undefined`: a numeric string is a real exit code, but an errno
|
|
828
|
+
// (`'ENOENT'`) means the spawn itself failed, and `undefined` means the process never exited
|
|
829
|
+
// normally. Only the numeric case is an exit; the rest previously became `0` or `NaN`.
|
|
830
|
+
const code = typeof ex.code === 'number' ? ex.code : ex.code != null ? parseInt(ex.code, 10) : NaN;
|
|
831
|
+
const exited = Number.isInteger(code);
|
|
832
|
+
|
|
777
833
|
return {
|
|
778
834
|
stdout: ex.stdout,
|
|
779
835
|
stderr: ex.stderr,
|
|
780
|
-
|
|
781
|
-
|
|
836
|
+
...(exited ? { exitCode: code } : {}),
|
|
837
|
+
completion:
|
|
838
|
+
ex instanceof CancelledRunError
|
|
839
|
+
? { status: 'cancelled', reason: cancellationReason, error: ex }
|
|
840
|
+
: exited
|
|
841
|
+
? { status: 'exited', code: code }
|
|
842
|
+
: {
|
|
843
|
+
status: 'failed',
|
|
844
|
+
// A signal means it ran and was killed (partial `stdout` may exist);
|
|
845
|
+
// no signal and no numeric code means it never got that far.
|
|
846
|
+
reason: ex.signal != null ? 'signal' : 'unstarted',
|
|
847
|
+
error: ex,
|
|
848
|
+
},
|
|
782
849
|
};
|
|
783
850
|
}
|
|
784
851
|
|
|
852
|
+
// No cancellation branch here: `CancelledRunError extends RunError`, so reaching this at all
|
|
853
|
+
// proves `ex` is neither.
|
|
785
854
|
return {
|
|
786
855
|
stdout: '',
|
|
787
856
|
stderr: undefined,
|
|
788
|
-
|
|
789
|
-
|
|
857
|
+
completion: {
|
|
858
|
+
status: 'failed',
|
|
859
|
+
// No `RunError` means no process was ever spawned — a queue rejection or a
|
|
860
|
+
// failure before `spawn` returned. (Not an untrusted workspace: `run` refuses
|
|
861
|
+
// those up front, so they never reach this catch.)
|
|
862
|
+
reason: 'unstarted',
|
|
863
|
+
error: ex instanceof Error ? ex : new Error(String(ex)),
|
|
864
|
+
},
|
|
790
865
|
};
|
|
791
866
|
}
|
|
792
867
|
|
|
@@ -797,9 +872,31 @@ export class Git {
|
|
|
797
872
|
}
|
|
798
873
|
if (errorHandling === 'throw') throw exception;
|
|
799
874
|
|
|
800
|
-
|
|
875
|
+
// Rethrows unless the message matches a `GitWarnings` pattern, in which case it logs and returns the
|
|
876
|
+
// key that matched. Capture the error first — `exception` is cleared to keep it out of the `finally`
|
|
877
|
+
// log, but the result still needs to carry it.
|
|
878
|
+
const swallowed = exception;
|
|
879
|
+
const warning = defaultExceptionHandler(exception, options.cwd, start);
|
|
801
880
|
exception = undefined;
|
|
802
|
-
|
|
881
|
+
// The command did NOT produce this empty stdout — a warning was swallowed. Say so, or the caller
|
|
882
|
+
// can't tell a genuinely empty answer (`noCommits`) from a read that never happened
|
|
883
|
+
// (`notARepository`).
|
|
884
|
+
//
|
|
885
|
+
// The process DID exit though (a warning is only ever swallowed for a non-zero exit), so report the
|
|
886
|
+
// code. `GitError.exitCode` is `number | string | undefined` — same normalization as the
|
|
887
|
+
// `errors: 'ignore'` path above, since only the numeric case is a real exit.
|
|
888
|
+
const rawCode = swallowed instanceof GitError ? swallowed.exitCode : undefined;
|
|
889
|
+
const code = typeof rawCode === 'number' ? rawCode : rawCode != null ? parseInt(rawCode, 10) : NaN;
|
|
890
|
+
|
|
891
|
+
// No `stderr`: it belongs to the error here. The top-level field is the channel for runs that
|
|
892
|
+
// completed WITHOUT one (`exited` carries no error, so a successful command's stderr has nowhere
|
|
893
|
+
// else to go) — a swallowed warning always has a `GitError`, and it carries the stderr. Reading
|
|
894
|
+
// `result?.stderr` would be dead anyway: `result` is only assigned on the non-throwing path.
|
|
895
|
+
return {
|
|
896
|
+
stdout: '',
|
|
897
|
+
...(Number.isInteger(code) ? { exitCode: code } : {}),
|
|
898
|
+
completion: { status: 'warned', warning: warning, error: swallowed },
|
|
899
|
+
};
|
|
803
900
|
} finally {
|
|
804
901
|
this.logGitCommandComplete(gitCommand, exception, getDurationMilliseconds(start), waiting);
|
|
805
902
|
}
|
|
@@ -826,13 +923,7 @@ export class Git {
|
|
|
826
923
|
|
|
827
924
|
// Fixes https://github.com/gitkraken/vscode-gitlens/issues/73 & https://github.com/gitkraken/vscode-gitlens/issues/161
|
|
828
925
|
// See https://stackoverflow.com/questions/4144417/how-to-handle-asian-characters-in-file-names-in-git-on-os-x
|
|
829
|
-
runArgs.unshift(
|
|
830
|
-
'-c',
|
|
831
|
-
'core.quotepath=false',
|
|
832
|
-
'-c',
|
|
833
|
-
'color.ui=false',
|
|
834
|
-
...(configs !== undefined ? configs : emptyArray),
|
|
835
|
-
);
|
|
926
|
+
runArgs.unshift('-c', 'core.quotepath=false', '-c', 'color.ui=false', ...(configs ?? emptyArray));
|
|
836
927
|
|
|
837
928
|
if (process.platform === 'win32') {
|
|
838
929
|
runArgs.unshift('-c', 'core.longpaths=true');
|
|
@@ -962,7 +1053,7 @@ export class Git {
|
|
|
962
1053
|
// Ensure cleanup happens immediately when the generator is explicitly closed (e.g., via break or return)
|
|
963
1054
|
// This is called by JavaScript when the generator is abandoned, ensuring logGitCommand is called
|
|
964
1055
|
// synchronously rather than waiting for garbage collection.
|
|
965
|
-
//
|
|
1056
|
+
// oxlint-disable-next-line typescript/no-meaningless-void-operator
|
|
966
1057
|
return void cleanup();
|
|
967
1058
|
}
|
|
968
1059
|
|
|
@@ -1114,12 +1205,21 @@ export class Git {
|
|
|
1114
1205
|
}
|
|
1115
1206
|
}
|
|
1116
1207
|
|
|
1117
|
-
|
|
1208
|
+
/**
|
|
1209
|
+
* Swallows an error whose message matches a known-benign {@link GitWarnings} pattern, returning WHICH one
|
|
1210
|
+
* matched so the caller can record it — the distinction matters, since `noCommits` is a real answer while
|
|
1211
|
+
* `notARepository` is a failed read. Rethrows anything else.
|
|
1212
|
+
*/
|
|
1213
|
+
export function defaultExceptionHandler(
|
|
1214
|
+
ex: Error,
|
|
1215
|
+
cwd: string | undefined,
|
|
1216
|
+
start?: [number, number],
|
|
1217
|
+
): GitWarningKey | undefined {
|
|
1118
1218
|
if (isCancellationError(ex)) throw ex;
|
|
1119
1219
|
|
|
1120
1220
|
const msg = ex.message || ex.toString();
|
|
1121
1221
|
if (msg) {
|
|
1122
|
-
for (const warning of Object.
|
|
1222
|
+
for (const [key, warning] of Object.entries(GitWarnings) as [GitWarningKey, RegExp][]) {
|
|
1123
1223
|
if (warning.test(msg)) {
|
|
1124
1224
|
const duration = start !== undefined ? ` [${getDurationMilliseconds(start)}ms]` : '';
|
|
1125
1225
|
Logger.warn(
|
|
@@ -1128,7 +1228,7 @@ export function defaultExceptionHandler(ex: Error, cwd: string | undefined, star
|
|
|
1128
1228
|
.replace(/fatal:\s*/g, '')
|
|
1129
1229
|
.replace(/\r?\n|\r/g, ' \u00b7 ')}${duration}`,
|
|
1130
1230
|
);
|
|
1131
|
-
return;
|
|
1231
|
+
return key;
|
|
1132
1232
|
}
|
|
1133
1233
|
}
|
|
1134
1234
|
|
|
@@ -1137,7 +1237,9 @@ export function defaultExceptionHandler(ex: Error, cwd: string | undefined, star
|
|
|
1137
1237
|
const [, ref] = match;
|
|
1138
1238
|
|
|
1139
1239
|
// Since looking up a ref with ^3 (e.g. looking for untracked files in a stash) can error on some versions of git just ignore it
|
|
1140
|
-
|
|
1240
|
+
// Swallowed, but it matched no `GitWarnings` entry — `undefined` records "unclassified", which
|
|
1241
|
+
// callers must treat as "not a real answer" exactly like any warning they don't whitelist.
|
|
1242
|
+
if (ref?.endsWith('^3')) return undefined;
|
|
1141
1243
|
}
|
|
1142
1244
|
}
|
|
1143
1245
|
|
|
@@ -76,7 +76,7 @@ const graphMapping = {
|
|
|
76
76
|
message: '%B',
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
type GraphLogParser = LogParser<typeof graphMapping>;
|
|
79
|
+
export type GraphLogParser = LogParser<typeof graphMapping>;
|
|
80
80
|
let _graphParser: GraphLogParser | undefined;
|
|
81
81
|
type GraphWithStatsLogParser = LogParserWithStats<typeof graphMapping>;
|
|
82
82
|
let _graphWithStatsParser: GraphWithStatsLogParser | undefined;
|
|
@@ -223,6 +223,14 @@ export type AsyncParser<T> = {
|
|
|
223
223
|
separators: { record: string; field: string };
|
|
224
224
|
parse: (data: string | Iterable<string> | undefined) => Generator<T> | Iterable<T>;
|
|
225
225
|
parseAsync: (stream: AsyncGenerator<string>) => AsyncGenerator<T>;
|
|
226
|
+
/**
|
|
227
|
+
* Like `parseAsync` but yields one ARRAY of entries per stream chunk, scanning each chunk
|
|
228
|
+
* synchronously with plain `indexOf` (no per-field iterator machinery). Bulk consumers (the
|
|
229
|
+
* graph walk) avoid two promise hops per record — thousands of awaited yields collapse to one
|
|
230
|
+
* per chunk. Only the plain parser implements it; per-record `parseAsync` remains the
|
|
231
|
+
* general-purpose path.
|
|
232
|
+
*/
|
|
233
|
+
parseAsyncBatched?: (stream: AsyncGenerator<string>) => AsyncGenerator<T[]>;
|
|
226
234
|
};
|
|
227
235
|
|
|
228
236
|
export type LogParser<T> = AsyncParser<LogParsedEntry<T>>;
|
|
@@ -280,6 +288,20 @@ const recordFormatSep = '%x1E';
|
|
|
280
288
|
const fieldSep = '\x1D'; // ASCII Group Separator character
|
|
281
289
|
const fieldFormatSep = '%x1D';
|
|
282
290
|
|
|
291
|
+
// A complete record terminates every mapped field with a field separator — a cancelled/early-closed
|
|
292
|
+
// stream resolves cleanly with a truncated tail missing at least the final terminator.
|
|
293
|
+
function isCompleteRecord(record: string, requiredFields: number): boolean {
|
|
294
|
+
let count = 0;
|
|
295
|
+
let index = -1;
|
|
296
|
+
while (count < requiredFields) {
|
|
297
|
+
index = record.indexOf(fieldSep, index + 1);
|
|
298
|
+
if (index === -1) return false;
|
|
299
|
+
|
|
300
|
+
count++;
|
|
301
|
+
}
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
|
|
283
305
|
export function createLogParser<T extends Record<string, string>>(mapping: ExtractAll<T, string>): LogParser<T> {
|
|
284
306
|
let format = recordFormatSep;
|
|
285
307
|
const keys: (keyof ExtractAll<T, string>)[] = [];
|
|
@@ -339,6 +361,8 @@ export function createLogParser<T extends Record<string, string>>(mapping: Extra
|
|
|
339
361
|
|
|
340
362
|
for await (const record of records) {
|
|
341
363
|
if (!record.length) continue;
|
|
364
|
+
// Drop a truncated tail (cancelled/early-closed stream) instead of yielding undefined/partial fields.
|
|
365
|
+
if (!isCompleteRecord(record, keys.length)) continue;
|
|
342
366
|
|
|
343
367
|
entry = {} as unknown as LogParsedEntry<T>;
|
|
344
368
|
fields = iterateByDelimiter(record, fieldSep);
|
|
@@ -361,11 +385,65 @@ export function createLogParser<T extends Record<string, string>>(mapping: Extra
|
|
|
361
385
|
sw?.stop({ suffix: ` parsed ${count} records` });
|
|
362
386
|
}
|
|
363
387
|
|
|
388
|
+
// Builds one entry from a complete record with a plain `indexOf` walk. Matches `parseAsync`'s
|
|
389
|
+
// semantics exactly: fields beyond the mapping are ignored, and every mapped field is
|
|
390
|
+
// terminated by a field separator (the format string appends one after each field).
|
|
391
|
+
function parseRecord(record: string): LogParsedEntry<T> {
|
|
392
|
+
const entry = {} as unknown as LogParsedEntry<T>;
|
|
393
|
+
let start = 0;
|
|
394
|
+
for (const key of keys) {
|
|
395
|
+
const end = record.indexOf(fieldSep, start);
|
|
396
|
+
if (end === -1) break;
|
|
397
|
+
|
|
398
|
+
entry[key] = record.substring(start, end) as T[keyof T];
|
|
399
|
+
start = end + 1;
|
|
400
|
+
}
|
|
401
|
+
return entry;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
async function* parseAsyncBatched(stream: AsyncGenerator<string>): AsyncGenerator<LogParsedEntry<T>[]> {
|
|
405
|
+
using sw = maybeStopWatch('Git.LogParser.parseAsyncBatched', { log: { onlyExit: true, level: 'debug' } });
|
|
406
|
+
|
|
407
|
+
let count = 0;
|
|
408
|
+
let buffer = '';
|
|
409
|
+
for await (const chunk of stream) {
|
|
410
|
+
buffer += chunk;
|
|
411
|
+
|
|
412
|
+
let batch: LogParsedEntry<T>[] | undefined;
|
|
413
|
+
let start = 0;
|
|
414
|
+
while (true) {
|
|
415
|
+
const end = buffer.indexOf(recordSep, start);
|
|
416
|
+
if (end === -1) break;
|
|
417
|
+
|
|
418
|
+
if (end > start) {
|
|
419
|
+
(batch ??= []).push(parseRecord(buffer.substring(start, end)));
|
|
420
|
+
count++;
|
|
421
|
+
}
|
|
422
|
+
start = end + 1;
|
|
423
|
+
}
|
|
424
|
+
if (start > 0) {
|
|
425
|
+
buffer = buffer.substring(start);
|
|
426
|
+
}
|
|
427
|
+
if (batch != null) {
|
|
428
|
+
yield batch;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Trailing record (the stream doesn't end with a record separator); a truncated tail from a
|
|
432
|
+
// cancelled/early-closed stream is missing a field terminator and must be dropped, not parsed.
|
|
433
|
+
if (buffer.length > 0 && isCompleteRecord(buffer, keys.length)) {
|
|
434
|
+
count++;
|
|
435
|
+
yield [parseRecord(buffer)];
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
sw?.stop({ suffix: ` parsed ${count} records` });
|
|
439
|
+
}
|
|
440
|
+
|
|
364
441
|
return {
|
|
365
442
|
arguments: args,
|
|
366
443
|
separators: { record: recordSep, field: fieldSep },
|
|
367
444
|
parse: parse,
|
|
368
445
|
parseAsync: parseAsync,
|
|
446
|
+
parseAsyncBatched: parseAsyncBatched,
|
|
369
447
|
};
|
|
370
448
|
}
|
|
371
449
|
|
|
@@ -605,6 +683,8 @@ function createLogParserWithFilesAndStats<T extends Record<string, string> | voi
|
|
|
605
683
|
|
|
606
684
|
for await (const record of records) {
|
|
607
685
|
if (!record.length) continue;
|
|
686
|
+
// Drop a truncated tail (cancelled/early-closed stream) instead of yielding undefined/partial fields.
|
|
687
|
+
if (!isCompleteRecord(record, keys.length)) continue;
|
|
608
688
|
|
|
609
689
|
count++;
|
|
610
690
|
entry = {} as unknown as LogParsedEntryWithFilesAndStats<T>;
|
|
@@ -955,6 +1035,8 @@ function createLogParserWithPatch<T extends Record<string, string>>(
|
|
|
955
1035
|
|
|
956
1036
|
for await (const record of records) {
|
|
957
1037
|
if (!record.length) continue;
|
|
1038
|
+
// Drop a truncated tail (cancelled/early-closed stream) instead of yielding undefined/partial fields.
|
|
1039
|
+
if (!isCompleteRecord(record, keys.length)) continue;
|
|
958
1040
|
|
|
959
1041
|
count++;
|
|
960
1042
|
entry = {} as unknown as LogParsedEntryWithFiles<T>;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { SshPublicKey } from '../../git/models/signature.js';
|
|
2
|
+
import { isValidSshKeyData, isValidSshKeyType } from '../../git/utils/sshKey.utils.js';
|
|
3
|
+
|
|
4
|
+
const sshSigMagic = 'SSHSIG';
|
|
5
|
+
const gpgSigHeaderRegex = /^gpgsig(?:-sha256)? /;
|
|
6
|
+
const sshSigArmorRegex = /-----BEGIN SSH SIGNATURE-----\n([\s\S]*?)\n-----END SSH SIGNATURE-----/;
|
|
7
|
+
// A commit header line: `committer Display Name <email> <unix-ts> <tz>`.
|
|
8
|
+
const committerRegex = /^committer (.*) <([^>]*)> \d+ [-+]\d+$/m;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Extracts the committer's name and raw email from a commit object. The raw email (not a mailmapped one) is the
|
|
12
|
+
* principal Git checks an SSH signature against, so it's what an `allowed_signers` entry must use.
|
|
13
|
+
*/
|
|
14
|
+
export function extractCommitterFromCommitObject(commitObject: string): { name: string; email: string } | undefined {
|
|
15
|
+
const match = committerRegex.exec(commitObject);
|
|
16
|
+
if (match == null) return undefined;
|
|
17
|
+
|
|
18
|
+
return { name: match[1], email: match[2] };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Extracts the signer's full SSH public key from a commit object's `gpgsig` SSH signature.
|
|
23
|
+
*
|
|
24
|
+
* A commit signed with `gpg.format=ssh` stores an armored `-----BEGIN SSH SIGNATURE-----` (SSHSIG) blob in its
|
|
25
|
+
* `gpgsig` header, and the SSHSIG wire format embeds the signer's full public key — exactly what an `allowed_signers`
|
|
26
|
+
* entry requires. (`git log`'s signature fields only expose the key fingerprint, never the full key.)
|
|
27
|
+
*
|
|
28
|
+
* @param commitObject Raw commit object text, as produced by `git cat-file commit <sha>`
|
|
29
|
+
* @returns The key type and base64 public-key blob, or `undefined` if the commit isn't SSH-signed or can't be parsed.
|
|
30
|
+
*/
|
|
31
|
+
export function extractSshPublicKeyFromCommitObject(commitObject: string): SshPublicKey | undefined {
|
|
32
|
+
const armored = extractArmoredSignature(commitObject);
|
|
33
|
+
if (armored == null) return undefined;
|
|
34
|
+
|
|
35
|
+
const buffer = Buffer.from(armored, 'base64');
|
|
36
|
+
|
|
37
|
+
// SSHSIG wire format (see OpenSSH PROTOCOL.sshsig):
|
|
38
|
+
// byte[6] MAGIC "SSHSIG" | uint32 version | string publickey | string namespace | ...
|
|
39
|
+
// where each `string` is a big-endian uint32 length followed by that many bytes.
|
|
40
|
+
if (buffer.length < 10 || buffer.toString('latin1', 0, 6) !== sshSigMagic) return undefined;
|
|
41
|
+
|
|
42
|
+
// `publickey` is the first length-prefixed string, after the 6-byte magic and 4-byte version.
|
|
43
|
+
const pubKeyBlob = readSshString(buffer, 10);
|
|
44
|
+
if (pubKeyBlob == null) return undefined;
|
|
45
|
+
|
|
46
|
+
// The public-key blob itself begins with its key type as a length-prefixed string.
|
|
47
|
+
const keyType = readSshString(pubKeyBlob, 0)?.toString('utf8');
|
|
48
|
+
if (!keyType) return undefined;
|
|
49
|
+
|
|
50
|
+
const keyData = pubKeyBlob.toString('base64');
|
|
51
|
+
// The signature blob is attacker-controllable (Git stores it verbatim and never verifies it on read), so reject
|
|
52
|
+
// anything that isn't a recognized key type / well-formed base64 before it can become an `allowed_signers` entry.
|
|
53
|
+
if (!isValidSshKeyType(keyType) || !isValidSshKeyData(keyData)) return undefined;
|
|
54
|
+
|
|
55
|
+
return { keyType: keyType, keyData: keyData };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Extracts and concatenates the base64 body of the armored SSH signature from a commit's `gpgsig` header. */
|
|
59
|
+
function extractArmoredSignature(commitObject: string): string | undefined {
|
|
60
|
+
const lines = commitObject.split('\n');
|
|
61
|
+
const start = lines.findIndex(l => gpgSigHeaderRegex.test(l));
|
|
62
|
+
if (start === -1) return undefined;
|
|
63
|
+
|
|
64
|
+
// The header value, followed by continuation lines (each indented with a single leading space).
|
|
65
|
+
const block = [lines[start].replace(gpgSigHeaderRegex, '')];
|
|
66
|
+
for (let i = start + 1; i < lines.length; i++) {
|
|
67
|
+
if (!lines[i].startsWith(' ')) break;
|
|
68
|
+
|
|
69
|
+
block.push(lines[i].slice(1));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const match = sshSigArmorRegex.exec(block.join('\n'));
|
|
73
|
+
return match != null ? match[1].replace(/\s+/g, '') : undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Reads a length-prefixed SSH wire-format string (big-endian uint32 length + bytes) at `offset`. */
|
|
77
|
+
function readSshString(buffer: Buffer, offset: number): Buffer | undefined {
|
|
78
|
+
if (offset + 4 > buffer.length) return undefined;
|
|
79
|
+
|
|
80
|
+
const start = offset + 4;
|
|
81
|
+
const end = start + buffer.readUInt32BE(offset);
|
|
82
|
+
if (end > buffer.length) return undefined;
|
|
83
|
+
|
|
84
|
+
return buffer.subarray(start, end);
|
|
85
|
+
}
|
|
@@ -39,8 +39,6 @@ export function parseGitWorktrees(
|
|
|
39
39
|
let index: number;
|
|
40
40
|
let key: string;
|
|
41
41
|
let value: string;
|
|
42
|
-
let locked: string;
|
|
43
|
-
let prunable: string;
|
|
44
42
|
let main = true; // the first worktree is the main worktree
|
|
45
43
|
|
|
46
44
|
for (line of iterateByDelimiter(data, '\n')) {
|
|
@@ -54,7 +52,7 @@ export function parseGitWorktrees(
|
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
if (!key && entry != null) {
|
|
57
|
-
//
|
|
55
|
+
// oxlint-disable-next-line no-loop-func
|
|
58
56
|
const branch = entry.branch ? branches?.find(b => b.name === entry!.branch) : undefined;
|
|
59
57
|
const uri = fileUri(entry.path!);
|
|
60
58
|
|
|
@@ -96,13 +94,13 @@ export function parseGitWorktrees(
|
|
|
96
94
|
case 'detached':
|
|
97
95
|
entry.detached = true;
|
|
98
96
|
break;
|
|
97
|
+
// `value` is the whole reason, which is only present when the locker/Git provides one.
|
|
98
|
+
// Reasons with unusual characters (e.g. newlines) come through C-quoted, per `core.quotePath`
|
|
99
99
|
case 'locked':
|
|
100
|
-
|
|
101
|
-
entry.locked = locked?.trim() || true;
|
|
100
|
+
entry.locked = value.trim() || true;
|
|
102
101
|
break;
|
|
103
102
|
case 'prunable':
|
|
104
|
-
|
|
105
|
-
entry.prunable = prunable?.trim() || true;
|
|
103
|
+
entry.prunable = value.trim() || true;
|
|
106
104
|
break;
|
|
107
105
|
}
|
|
108
106
|
}
|