import { ToolResult } from "../types/index.js";
export interface GitStatus {
    staged: string[];
    unstaged: string[];
    untracked: string[];
    branch: string;
    ahead: number;
    behind: number;
}
export interface CommitOptions {
    message?: string;
    autoGenerate?: boolean;
    push?: boolean;
    addAll?: boolean;
}
export declare class GitTool {
    private confirmationService;
    private cwd;
    constructor(cwd?: string);
    /**
     * Execute git command safely with array arguments
     * @param args - Array of command arguments (NOT a single string)
     */
    private execGit;
    isGitRepo(): Promise<boolean>;
    getStatus(): Promise<GitStatus>;
    getDiff(staged?: boolean): Promise<string>;
    getLog(count?: number): Promise<string>;
    add(files: string[] | "all"): Promise<ToolResult>;
    commit(message: string): Promise<ToolResult>;
    push(setUpstream?: boolean): Promise<ToolResult>;
    pull(): Promise<ToolResult>;
    autoCommit(options?: CommitOptions): Promise<ToolResult>;
    private generateCommitMessage;
    stash(message?: string): Promise<ToolResult>;
    stashPop(): Promise<ToolResult>;
    checkout(branchOrFile: string, create?: boolean): Promise<ToolResult>;
    branch(name?: string, delete_?: boolean): Promise<ToolResult>;
    formatStatus(status: GitStatus): string;
}
export declare function getGitTool(cwd?: string): GitTool;
