import { ChangeRecord } from '@rivet/core';
import { RepoInfo } from './LocalGitService';
type SessionStatus = {
    isGitEnabled: boolean;
    branchName?: string;
    baseBranch?: string;
    hasUncommittedChanges: boolean;
    repoInfo?: RepoInfo;
    canUndo: boolean;
    prUrl?: string | null;
    diffStats?: import('./LocalGitService').DiffStats;
};
export declare class SessionService {
    private gitService;
    private projectPath;
    private branchName?;
    private repoInfo?;
    private isGitEnabled;
    private baseBranch;
    private startingSha?;
    private lastKnownPrUrl?;
    constructor(projectPath: string, isGitEnabled?: boolean, baseBranch?: string);
    /** Detects repo info and current branch without creating a new one. */
    initializeSession(): Promise<void>;
    commitModification(change: ChangeRecord): Promise<void>;
    publishChanges(): Promise<{
        prUrl: string;
        branchName: string;
    }>;
    /** Updates the tracked branch after the user explicitly creates one. */
    switchBranch(newBranchName: string, parentBranch: string): Promise<void>;
    /** Switches to an existing local branch. */
    switchToBranch(branchName: string): Promise<void>;
    /** Lists all local branches. */
    listBranches(): Promise<string[]>;
    getBaseBranch(): string;
    getSessionStatus(): Promise<SessionStatus>;
    undoLastChange(): Promise<void>;
    private determineBaseBranch;
}
export {};
//# sourceMappingURL=SessionService.d.ts.map