diff --git a/packages/web/src/features/agents/review-agent/nodes/githubPrParser.test.ts b/packages/web/src/features/agents/review-agent/nodes/githubPrParser.test.ts index d06cdd889..e8a9b6729 100644 --- a/packages/web/src/features/agents/review-agent/nodes/githubPrParser.test.ts +++ b/packages/web/src/features/agents/review-agent/nodes/githubPrParser.test.ts @@ -79,15 +79,30 @@ describe('githubPrParser', () => { expect(result.description).toBe(''); }); - test('fetches diff using the pull request diff_url', async () => { - const mockRequest = vi.fn().mockResolvedValue({ data: '' }); - const octokit = { request: mockRequest } as unknown as Octokit; - const pr = makePullRequest({ diff_url: 'https://github.com/my-org/my-repo/pull/7.diff' }); +test('fetches diff using the GitHub pulls API with diff accept header', async () => { + const mockRequest = vi.fn().mockResolvedValue({ data: '' }); + const octokit = { request: mockRequest } as unknown as Octokit; + const pr = makePullRequest({ + owner: 'my-org', + repo: 'my-repo', + number: 7, + diff_url: 'https://github.com/my-org/my-repo/pull/7.diff', + }); - await githubPrParser(octokit, pr); + await githubPrParser(octokit, pr); - expect(mockRequest).toHaveBeenCalledWith('https://github.com/my-org/my-repo/pull/7.diff'); - }); + expect(mockRequest).toHaveBeenCalledWith( + 'GET /repos/{owner}/{repo}/pulls/{pull_number}', + { + owner: 'my-org', + repo: 'my-repo', + pull_number: 7, + headers: { + accept: 'application/vnd.github.diff', + }, + } + ); +}); test('returns empty file_diffs for an empty diff', async () => { const octokit = makeMockOctokit(''); diff --git a/packages/web/src/features/agents/review-agent/nodes/githubPrParser.ts b/packages/web/src/features/agents/review-agent/nodes/githubPrParser.ts index b633450ea..4064c04f0 100644 --- a/packages/web/src/features/agents/review-agent/nodes/githubPrParser.ts +++ b/packages/web/src/features/agents/review-agent/nodes/githubPrParser.ts @@ -11,12 +11,23 @@ export const githubPrParser = async (octokit: Octokit, pullRequest: GitHubPullRe let parsedDiff: parse.File[] = []; try { - const diff = await octokit.request(pullRequest.diff_url); - parsedDiff = parse(diff.data); - } catch (error) { - logger.error("Error fetching diff: ", error); - throw error; - } + const { owner, name: repo } = pullRequest.base.repo; + const pullNumber = pullRequest.number; + + const diff = await octokit.request("GET /repos/{owner}/{repo}/pulls/{pull_number}", { + owner: owner.login, + repo, + pull_number: pullNumber, + headers: { + accept: "application/vnd.github.diff", + }, + }); + + parsedDiff = parse(diff.data as string); +} catch (error) { + logger.error("Error fetching diff: ", error); + throw error; +} const sourcebotFileDiffs: (sourcebot_file_diff | null)[] = parsedDiff.map((file) => { if (!file.from || !file.to) { @@ -64,4 +75,4 @@ export const githubPrParser = async (octokit: Octokit, pullRequest: GitHubPullRe number: pullRequest.number, head_sha: pullRequest.head.sha } -} \ No newline at end of file +}