review-copilot
Version:
ReviewCopilot - AI-powered code review assistant with customizable prompts
99 lines (98 loc) • 2.55 kB
TypeScript
import { ReviewLanguage } from '../constants/ai-messages';
export type AIProviderType = 'openai' | 'deepseek';
export interface AIProviderConfig {
enabled: boolean;
reviewLanguage?: ReviewLanguage;
apiKey: string;
model: string;
baseURL: string;
defaultHeaders?: Record<string, string>;
timeout?: number;
}
export interface TriggerConfig {
on: 'pull_request' | 'merge_request' | 'push';
actions?: string[];
}
export interface ProviderFactoryConfig {
providers: Partial<Record<AIProviderType, AIProviderConfig>>;
triggers: TriggerConfig[];
rules: {
commitMessage: {
enabled: boolean;
pattern: string;
prompt: string;
};
branchName: {
enabled: boolean;
pattern: string;
prompt: string;
};
codeChanges: {
enabled: boolean;
filePatterns: string[];
prompt: string;
};
};
customReviewPoints: Array<{
name: string;
prompt: string;
}>;
}
export interface CodeReviewSuggestion {
message: string;
filename?: string;
line?: number;
severity?: 'info' | 'warning' | 'error';
side?: 'LEFT' | 'RIGHT';
startLine?: number;
endLine?: number;
commitId?: string;
diffHunk?: string;
reviewType: 'general' | 'line-specific';
}
export interface CodeReviewResult {
success: boolean;
suggestions: CodeReviewSuggestion[];
error?: {
message: string;
};
}
export interface IAIProvider {
review(prompt: string, content: string): Promise<string>;
reviewWithLineSpecificSuggestions?(prompt: string, content: string, fileContext: Array<{
filePath: string;
parsedDiff: ParsedDiff;
}>): Promise<CodeReviewSuggestion[]>;
}
export interface DiffLine {
lineNumber: number;
oldLineNumber?: number;
newLineNumber?: number;
content: string;
type: 'add' | 'remove' | 'context';
position: number;
}
export interface DiffHunk {
oldStart: number;
oldLines: number;
newStart: number;
newLines: number;
lines: DiffLine[];
header: string;
}
export interface ParsedDiff {
filePath: string;
oldFile: string;
newFile: string;
hunks: DiffHunk[];
additions: number;
deletions: number;
}
export interface LineSpecificSuggestion extends CodeReviewSuggestion {
reviewType: 'line-specific';
filename: string;
line: number;
commitId: string;
position?: number;
diffContext: string;
}