/**
 * Data provider for the TUI footer bar.
 *
 * Aggregates git branch, extension statuses, credit balance, sandbox state,
 * and current agent mode into a single observable source. The footer
 * component reads from this; extensions write via setExtensionStatus().
 *
 * Git branch is watched via fs.watch on the .git/HEAD directory so the
 * footer updates immediately on checkout / branch switch.
 */
/**
 * Provides git branch and extension statuses - data not otherwise accessible to extensions.
 * Token stats, model info available via ctx.sessionManager and ctx.model.
 */
export declare class FooterDataProvider {
    private extensionStatuses;
    private cachedBranch;
    private gitWatcher;
    private branchChangeCallbacks;
    private availableProviderCount;
    constructor();
    /** Current git branch, null if not in repo, "detached" if detached HEAD */
    getGitBranch(): string | null;
    /** Extension status texts set via ctx.ui.setStatus() */
    getExtensionStatuses(): ReadonlyMap<string, string>;
    /** Subscribe to git branch changes. Returns unsubscribe function. */
    onBranchChange(callback: () => void): () => void;
    /** Internal: set extension status */
    setExtensionStatus(key: string, text: string | undefined): void;
    /** Internal: clear extension statuses */
    clearExtensionStatuses(): void;
    /** Number of unique providers with available models (for footer display) */
    getAvailableProviderCount(): number;
    /** Internal: update available provider count */
    setAvailableProviderCount(count: number): void;
    /** Shortcut credit balance (null = not fetched or not using shortcut) */
    private creditBalance;
    /** Initial credit balance captured at session start, used to compute credits used */
    private initialCreditBalance;
    /** True when the active model uses credits (suppresses $cost even when balance fetch fails) */
    private _usesCredits;
    private _sandboxActive;
    getCreditBalance(): {
        creditsRemaining: number;
        isUnlimited: boolean;
        hasTeamBilling: boolean;
    } | null;
    /** Credits consumed this session (initial - current). Returns 0 if not yet known. */
    getCreditsUsed(): number;
    setCreditBalance(balance: {
        creditsRemaining: number;
        isUnlimited: boolean;
        hasTeamBilling: boolean;
    } | null): void;
    get usesCredits(): boolean;
    setUsesCredits(value: boolean): void;
    get sandboxActive(): boolean;
    setSandboxActive(value: boolean): void;
    /** Reads directly from the canonical shared mode state — no sync needed. */
    get currentMode(): string;
    /** Internal: cleanup */
    dispose(): void;
    private setupGitWatcher;
}
/** Read-only view for extensions - excludes setExtensionStatus, setAvailableProviderCount and dispose */
export type ReadonlyFooterDataProvider = Pick<FooterDataProvider, 'getGitBranch' | 'getExtensionStatuses' | 'getAvailableProviderCount' | 'onBranchChange' | 'getCreditBalance' | 'getCreditsUsed' | 'usesCredits' | 'sandboxActive' | 'currentMode'>;
//# sourceMappingURL=footer-data-provider.d.ts.map