apps/mobile/src/features/review/reviewModel.ts | 5 +- apps/server/package.json | 1 + apps/server/src/auth/RpcAuthorization.ts | 2 + apps/server/src/persistence/Errors.ts | 1 + apps/server/src/persistence/Migrations.ts | 2 + apps/server/src/persistence/Migrations/053_PullRequestFilesViewed.ts | 25 + apps/server/src/persistence/PullRequestFilesViewed.ts | 184 +++++ apps/server/src/pullRequest/AzureDevOpsPullRequestCli.test.ts | 854 ++++++++++++++++++- apps/server/src/pullRequest/AzureDevOpsPullRequestCli.ts | 245 +++++- apps/server/src/pullRequest/AzureDevOpsPullRequestProvider.test.ts | 420 ++++++++++ apps/server/src/pullRequest/AzureDevOpsPullRequestProvider.ts | 425 +++++++++- apps/server/src/pullRequest/BitbucketPullRequestApi.test.ts | 155 ++++ apps/server/src/pullRequest/BitbucketPullRequestApi.ts | 119 ++- apps/server/src/pullRequest/BitbucketPullRequestProvider.ts | 14 + apps/server/src/pullRequest/ForgejoPullRequestProvider.ts | 13 + apps/server/src/pullRequest/GitHubPullRequestCli.test.ts | 263 +++++- apps/server/src/pullRequest/GitHubPullRequestCli.ts | 125 ++- apps/server/src/pullRequest/GitHubPullRequestProvider.ts | 7 + apps/server/src/pullRequest/GitLabPullRequestCli.test.ts | 167 ++++ apps/server/src/pullRequest/GitLabPullRequestCli.ts | 101 +++ apps/server/src/pullRequest/GitLabPullRequestProvider.ts | 14 + apps/server/src/pullRequest/PullRequestProvider.ts | 61 ++ apps/server/src/pullRequest/PullRequestService.test.ts | 1426 +++++++++++++++++++++++++++++++- apps/server/src/pullRequest/PullRequestService.ts | 189 ++++- apps/server/src/pullRequest/azureDevOpsDiff.test.ts | 459 ++++++++++ apps/server/src/pullRequest/azureDevOpsDiff.ts | 273 ++++++ apps/server/src/pullRequest/azureDevOpsPullRequestJson.test.ts | 325 +++++++- apps/server/src/pullRequest/azureDevOpsPullRequestJson.ts | 228 ++++- apps/server/src/pullRequest/bitbucketDiffRevisions.test.ts | 280 +++++++ apps/server/src/pullRequest/bitbucketDiffRevisions.ts | 129 +++ apps/server/src/pullRequest/gitHubPullRequestJson.test.ts | 147 ++++ apps/server/src/pullRequest/gitHubPullRequestJson.ts | 130 ++- apps/server/src/pullRequest/gitLabMergeRequestJson.test.ts | 171 ++++ apps/server/src/pullRequest/gitLabMergeRequestJson.ts | 91 +- apps/server/src/pullRequest/pullRequestViewedFiles.ts | 423 ++++++++++ apps/server/src/server.test.ts | 6 +- apps/server/src/server.ts | 3 + apps/server/src/sourceControl/azureDevOpsPullRequests.ts | 8 +- apps/server/src/ws.ts | 14 +- apps/web/src/components/ChatMarkdown.tsx | 3 +- apps/web/src/components/ChatView.tsx | 5 +- apps/web/src/components/pullRequest/PullRequestCodeTab.tsx | 217 ++++- apps/web/src/components/pullRequest/pullRequestDiff.logic.test.ts | 33 +- apps/web/src/components/pullRequest/pullRequestDiff.logic.ts | 21 + apps/web/src/components/pullRequest/pullRequestFilesViewed.logic.test.ts | 174 ++++ apps/web/src/components/pullRequest/pullRequestFilesViewed.logic.ts | 100 +++ apps/web/src/components/pullRequest/usePullRequestFilesViewed.test.tsx | 161 ++++ apps/web/src/components/pullRequest/usePullRequestFilesViewed.ts | 211 +++++ apps/web/src/lib/diffRendering.test.ts | 59 ++ apps/web/src/lib/diffRendering.ts | 15 +- apps/web/src/lib/openPullRequestLink.test.ts | 27 + docs/README.md | 1 + docs/internals/pull-request-file-revisions.md | 65 ++ docs/user/source-control.md | 18 +- packages/client-runtime/src/state/pullRequestRouting.ts | 13 +- packages/client-runtime/src/state/pullRequests.test.ts | 78 ++ packages/client-runtime/src/state/pullRequests.ts | 21 + packages/contracts/src/pullRequest.test.ts | 67 ++ packages/contracts/src/pullRequest.ts | 75 ++ packages/contracts/src/rpc.ts | 18 + packages/shared/package.json | 4 + packages/shared/src/git.test.ts | 32 + packages/shared/src/git.ts | 37 +- packages/shared/src/gitPatchPath.test.ts | 97 +++ packages/shared/src/gitPatchPath.ts | 140 ++++ packages/shared/src/sourceControl.test.ts | 14 + pnpm-lock.yaml | 3 + 67 files changed, 9014 insertions(+), 200 deletions(-)