mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-03-20 11:03:08 +00:00
* feat: Add PR review comments and resolution endpoints, improve prompt handling * Feature: File Editor (#789) * feat: Add file management feature * feat: Add auto-save functionality to file editor * fix: Replace HardDriveDownload icon with Save icon for consistency * fix: Prevent recursive copy/move and improve shell injection prevention * refactor: Extract editor settings form into separate component * ``` fix: Improve error handling and stabilize async operations - Add error event handlers to GraphQL process spawns to prevent unhandled rejections - Replace execAsync with execFile for safer command execution and better control - Fix timeout cleanup in withTimeout generator to prevent memory leaks - Improve outdated comment detection logic by removing redundant condition - Use resolveModelString for consistent model string handling - Replace || with ?? for proper falsy value handling in dialog initialization - Add comments clarifying branch name resolution logic for local branches with slashes - Add catch handler for project selection to handle async errors gracefully ``` * refactor: Extract PR review comments logic to dedicated service * fix: Improve robustness and UX for PR review and file operations * fix: Consolidate exec utilities and improve type safety * refactor: Replace ScrollArea with div and improve file tree layout
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
/**
|
|
* POST /pr-review-comments endpoint - Fetch review comments for a GitHub PR
|
|
*
|
|
* Fetches both regular PR comments and inline code review comments
|
|
* for a specific pull request, providing file path and line context.
|
|
*/
|
|
|
|
import type { Request, Response } from 'express';
|
|
import { getErrorMessage, logError } from './common.js';
|
|
import { checkGitHubRemote } from './check-github-remote.js';
|
|
import {
|
|
fetchPRReviewComments,
|
|
fetchReviewThreadResolvedStatus,
|
|
type PRReviewComment,
|
|
type ListPRReviewCommentsResult,
|
|
} from '../../../services/pr-review-comments.service.js';
|
|
|
|
// Re-export types so existing callers continue to work
|
|
export type { PRReviewComment, ListPRReviewCommentsResult };
|
|
// Re-export service functions so existing callers continue to work
|
|
export { fetchPRReviewComments, fetchReviewThreadResolvedStatus };
|
|
|
|
interface ListPRReviewCommentsRequest {
|
|
projectPath: string;
|
|
prNumber: number;
|
|
}
|
|
|
|
export function createListPRReviewCommentsHandler() {
|
|
return async (req: Request, res: Response): Promise<void> => {
|
|
try {
|
|
const { projectPath, prNumber } = req.body as ListPRReviewCommentsRequest;
|
|
|
|
if (!projectPath) {
|
|
res.status(400).json({ success: false, error: 'projectPath is required' });
|
|
return;
|
|
}
|
|
|
|
if (!prNumber || typeof prNumber !== 'number') {
|
|
res
|
|
.status(400)
|
|
.json({ success: false, error: 'prNumber is required and must be a number' });
|
|
return;
|
|
}
|
|
|
|
// Check if this is a GitHub repo and get owner/repo
|
|
const remoteStatus = await checkGitHubRemote(projectPath);
|
|
if (!remoteStatus.hasGitHubRemote || !remoteStatus.owner || !remoteStatus.repo) {
|
|
res.status(400).json({
|
|
success: false,
|
|
error: 'Project does not have a GitHub remote',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const comments = await fetchPRReviewComments(
|
|
projectPath,
|
|
remoteStatus.owner,
|
|
remoteStatus.repo,
|
|
prNumber
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
comments,
|
|
totalCount: comments.length,
|
|
});
|
|
} catch (error) {
|
|
logError(error, 'Fetch PR review comments failed');
|
|
res.status(500).json({ success: false, error: getErrorMessage(error) });
|
|
}
|
|
};
|
|
}
|