import { GitError } from '../../shared/utils/error-classes.js';
/**
 * GitManager - Handles all Git command execution and repository operations
 *
 * This class provides a centralized interface for Git operations with proper
 * error handling, command validation, and consistent output formatting.
 */
export declare class GitManager {
    [key: string]: any;
    constructor(options?: Record<string, any>);
    /**
     * Check if current directory is a Git repository
     * @returns {boolean} True if in a Git repository
     */
    get isGitRepo(): any;
    /**
     * Get the Git directory path
     * @returns {string|null} Path to .git directory or null if not a Git repo
     */
    get gitDir(): any;
    /**
     * Execute a Git command with full error handling
     * @param {string} command - The Git command to execute
     * @returns {string} Command output
     * @throws {GitError} If command fails
     */
    execGit(command: any): string;
    /**
     * Execute a Git command safely, returning empty string on failure
     * @param {string} command - The Git command to execute
     * @returns {string} Command output or empty string on failure
     */
    execGitSafe(command: any): string;
    /**
     * Execute a Git show command with specific error handling for missing files
     * @param {string} command - The Git show command to execute
     * @returns {string|null} Command output or null if file doesn't exist
     */
    execGitShow(command: any): string | null;
    /**
     * Validate a commit hash exists in the repository
     * @param {string} hash - The commit hash to validate
     * @returns {boolean} True if commit exists
     */
    validateCommitHash(hash: any): boolean;
    /**
     * Get the current branch name
     * @returns {string} Current branch name or 'HEAD' if detached
     */
    getCurrentBranch(): string;
    /**
     * Get the remote URL for the repository
     * @param {string} remoteName - Name of the remote (default: 'origin')
     * @returns {string|null} Remote URL or null if not found
     */
    getRemoteUrl(remoteName?: string): string | null;
    /**
     * Get repository root directory
     * @returns {string|null} Repository root path or null if not in a Git repo
     */
    getRepositoryRoot(): string | null;
    /**
     * Check if working directory is clean (no uncommitted changes)
     * @returns {boolean} True if working directory is clean
     */
    isWorkingDirectoryClean(): boolean;
    /**
     * Get list of all tags in repository
     * @returns {Array<string>} Array of tag names
     */
    getAllTags(): string[];
    /**
     * Get the latest tag
     * @returns {string|null} Latest tag name or null if no tags
     */
    getLatestTag(): string | null;
    /**
     * Get commits between two references
     * @param {string} from - Starting reference (commit, tag, branch)
     * @param {string} to - Ending reference (default: 'HEAD')
     * @param {Object} options - Optional filters
     * @param {string} options.author - Filter by author name or email
     * @returns {Array<Object>} Array of commit objects
     */
    getCommitsBetween(from: any, to?: string, options?: Record<string, any>): {
        hash: string;
        message: string;
    }[];
    /**
     * Get commits filtered by author
     * @param {string} author - Author name or email to filter by
     * @param {number} limit - Maximum number of commits to return
     * @returns {Array<Object>} Array of commit objects by this author
     */
    getCommitsByAuthor(author: any, limit?: number): {
        hash: string;
        message: string;
    }[];
    /**
     * Get commits between two tags
     * @param {string} fromTag - Starting tag
     * @param {string} toTag - Ending tag (default: 'HEAD')
     * @param {Object} options - Optional filters
     * @returns {Array<Object>} Array of commit objects between tags
     */
    getCommitsBetweenTags(fromTag: any, toTag?: string, options?: Record<string, any>): {
        hash: string;
        message: string;
    }[];
    /**
     * Get list of all authors in repository
     * @returns {Array<string>} Array of unique author names
     */
    getAllAuthors(): string[];
    /**
     * Get list of stashed changes
     * @returns {Array<Object>} Array of stash entries with index, message, and date
     */
    getStashList(): {
        index: string;
        message: string;
        date: string;
    }[];
    /**
     * Get detailed information about a specific stash entry
     * @param {string} stashRef - Stash reference (e.g., 'stash@{0}')
     * @returns {Object|null} Stash details including files changed
     */
    getStashDetails(stashRef?: string): {
        ref: string;
        message: string;
        files: ({
            path: string;
            changes: number;
        } | null)[];
        diff: string;
        stats: {
            filesChanged: number;
            insertions: number;
            deletions: number;
        };
    } | null;
    /**
     * Check if there are any stashed changes
     * @returns {boolean} True if stash has entries
     */
    hasStashedChanges(): boolean;
    /**
     * Check if a file exists in a specific commit
     * @param {string} commitHash - The commit to check
     * @param {string} filePath - The file path to check
     * @returns {boolean} True if file exists in the commit
     */
    fileExistsInCommit(commitHash: any, filePath: any): boolean;
    /**
     * Get file content from a specific commit
     * @param {string} commitHash - The commit to get the file from
     * @param {string} filePath - The file path to retrieve
     * @returns {string|null} File content or null if file doesn't exist
     */
    getFileFromCommit(commitHash: any, filePath: any): string | null;
    /**
     * Reset internal caches (call when repository state might have changed)
     */
    resetCache(): void;
    /**
     * Get detailed repository information
     * @returns {Object} Repository information object
     */
    getRepositoryInfo(): {
        isGitRepo: boolean;
        gitDir?: undefined;
        repositoryRoot?: undefined;
        currentBranch?: undefined;
        remoteUrl?: undefined;
        isClean?: undefined;
        latestTag?: undefined;
        totalTags?: undefined;
    } | {
        isGitRepo: boolean;
        gitDir: any;
        repositoryRoot: string | null;
        currentBranch: string;
        remoteUrl: string | null;
        isClean: boolean;
        latestTag: string | null;
        totalTags: number;
    };
    /**
     * Check if current directory is a Git repository
     * @private
     * @returns {boolean}
     */
    _checkIsGitRepo(): boolean;
    /**
     * Create a GitError from a command execution error
     * @private
     * @param {string} command - The Git command that failed
     * @param {Error} error - The original error
     * @returns {GitError}
     */
    _createGitError(command: any, error: any): GitError;
}
