@entro314labs/ai-changelog-generator
Version:
AI-powered changelog generator with MCP server support - works with most providers, online and local models
209 lines (208 loc) • 6.46 kB
TypeScript
interface RepositoryHealth {
healthy: boolean;
score: number;
issues: string[];
recommendations: string[];
metrics: {
branches: number;
commits: number;
untrackedFiles: number;
staleBranches: number;
largeBinaryFiles: number;
commitFrequency: number;
conventionalCommitRatio?: number;
recentCommitsCount?: number;
repositoryAgeInDays?: number;
totalCommits?: number;
totalBranches?: number;
unmergedCommits?: number;
danglingCommits?: number;
};
}
interface BranchInfo {
name: string;
lastCommitDate: string;
lastCommitAuthor: string;
lastCommitSubject: string;
isRemote: boolean;
isStale: boolean;
type: 'remote' | 'local';
}
interface UnmergedCommitInfo {
hash: string;
message: string;
branch: string;
}
interface DanglingCommitInfo {
hash: string | undefined;
type: 'dangling';
}
interface BranchAnalysis {
branches: BranchInfo[];
unmergedCommits: UnmergedCommitInfo[];
danglingCommits: DanglingCommitInfo[];
analysis: string;
}
interface ComprehensiveGitAnalysis {
analysis: string;
recommendations?: string[];
metrics: RepositoryHealth['metrics'];
health: RepositoryHealth;
}
export declare class GitService {
[key: string]: any;
constructor(gitManager: any, tagger: any);
getCommitAnalysis(commitHash: any): Promise<{
hash: any;
fullHash: any;
subject: any;
author: any;
date: any;
body: any;
files: any[];
diffStats: {
files: number;
insertions: number;
deletions: number;
};
semanticChanges: any;
breakingChanges: any;
categories: any;
importance: any;
tags: any;
} | null>;
analyzeFileChange(commitHash: any, status: any, filePath: any): Promise<{
status: any;
filePath: any;
diff: string;
beforeContent: string;
afterContent: string;
category: string;
language: string;
importance: string;
complexity: {
score: number;
additions?: undefined;
deletions?: undefined;
total?: undefined;
level?: undefined;
} | {
score: number;
additions: any;
deletions: any;
total: any;
level: string;
};
semanticChanges: any;
functionalImpact: any;
} | null>;
analyzeWorkingDirectoryFileChange(status: any, filePath: any): Promise<{
status: any;
filePath: any;
diff: string;
beforeContent: string;
afterContent: string;
category: string;
language: string;
importance: string;
complexity: {
score: number;
additions?: undefined;
deletions?: undefined;
total?: undefined;
level?: undefined;
} | {
score: number;
additions: any;
deletions: any;
total: any;
level: string;
};
semanticChanges: any;
functionalImpact: any;
}>;
analyzeStagedFileChange(status: any, filePath: any): Promise<{
status: string;
filePath: any;
diff: string;
beforeContent: string;
afterContent: string;
additions: number;
deletions: number;
category: string;
language: string;
importance: string;
complexity: {
score: number;
additions?: undefined;
deletions?: undefined;
total?: undefined;
level?: undefined;
} | {
score: number;
additions: any;
deletions: any;
total: any;
level: string;
};
semanticChanges: any;
functionalImpact: any;
}>;
getCommitDiffStats(commitHash: any): {
files: number;
insertions: number;
deletions: number;
};
getCommitsSince(since: any, options?: Record<string, any>): Promise<any>;
/**
* Get commits in the range fromRef..toRef.
*
* Both refs are validated with `git rev-parse --verify <ref>^{commit}` before
* the range is queried, so a typo'd tag/SHA surfaces as a clear error instead
* of an empty range that masquerades as "no changes".
*
* @param {string} fromRef - Exclusive lower bound (commit, tag, or branch)
* @param {string} toRef - Inclusive upper bound (default: 'HEAD')
* @param {Object} options - Optional filters
* @param {string} options.author - Filter by author name or email
* @returns {Promise<Array<{hash: string, message: string}>>} Commits in range
* @throws {Error} If either ref cannot be resolved to a commit
*/
getCommitsBetween(fromRef: string, toRef?: string, options?: Record<string, any>): Promise<Array<{
hash: string;
message: string;
}>>;
/**
* Process merge commit statistics to create meaningful file analysis
*/
processMergeCommitStats(commitHash: any, statOutput: any): any[];
/**
* Create a meaningful diff summary for merge commits with enhanced categorization
*/
createMergeCommitDiffSummary(filePath: any, totalChanges: any, additions: any, deletions: any, _commitHash: any): string;
/**
* Generate comprehensive merge commit summary with categorized changes and technical details
*/
generateMergeCommitSummary(files: any, commitHash: any, subject: any): string;
/**
* Extract technical details from key merge commit files for specific descriptions
*/
extractTechnicalDetailsFromMerge(files: any, commitHash: any): string[];
/**
* Extract specific technical changes from a diff
*/
extractSpecificChanges(filePath: any, diff: any): string | null;
assessRepositoryHealth(_config?: Record<string, any>): Promise<RepositoryHealth>;
analyzeBranches(format?: string): Promise<BranchAnalysis>;
analyzeComprehensive(includeRecommendations?: boolean): Promise<ComprehensiveGitAnalysis | {
analysis: string;
recommendations: string[] | undefined;
metrics: {};
health: {
healthy: boolean;
score: number;
};
}>;
findMainBranch(): any;
}
export {};