import { ReviewComment } from '../entities/ReviewComment'; import { ReviewReport } from '../entities/ReviewReport'; export interface GitHubConfig { readonly token: string; readonly baseUrl?: string; readonly apiVersion?: string; } export interface PullRequestInfo { readonly number: number; readonly title: string; readonly body: string; readonly author: string; readonly baseBranch: string; readonly headBranch: string; readonly state: 'open' | 'closed' | 'merged'; readonly files: string[]; readonly commits: string[]; } export interface IssueInfo { readonly number: number; readonly title: string; readonly body: string; readonly author: string; readonly state: 'open' | 'closed'; readonly labels: string[]; } export interface GitHubPort { /** * Post a review comment to a pull request */ postReviewComment( owner: string, repo: string, pullNumber: number, comment: ReviewComment ): Promise; /** * Post multiple review comments to a pull request */ postReviewComments( owner: string, repo: string, pullNumber: number, comments: ReviewComment[] ): Promise; /** * Post a review report as a comment to a pull request */ postReviewReport( owner: string, repo: string, pullNumber: number, report: ReviewReport ): Promise; /** * Get pull request information */ getPullRequest( owner: string, repo: string, pullNumber: number ): Promise; /** * Get issue information */ getIssue( owner: string, repo: string, issueNumber: number ): Promise; /** * Get repository information */ getRepository(owner: string, repo: string): Promise<{ readonly name: string; readonly fullName: string; readonly description: string; readonly language: string; readonly defaultBranch: string; readonly isPrivate: boolean; } | null>; /** * Check if the GitHub API is accessible */ isAccessible(): Promise; /** * Get the current user information */ getCurrentUser(): Promise<{ readonly login: string; readonly name: string; readonly email: string; } | null>; }