import { type SyncStatus } from "../governance/policy.js";
import { type AheadBehind } from "./outcome.js";
import { type RunStoreGit } from "./store-merge.js";
export type StoreSyncStatus = "unchanged" | "updated" | "pushed" | "conflict" | "busy" | "error" | "skipped";
export interface StoreSyncOutcome {
    status: StoreSyncStatus;
    detail: string;
    counts?: AheadBehind;
    backupRef?: string;
    /** Abandoned state removed before syncing, one line each. */
    cleaned: string[];
}
export interface StoreSyncOptions {
    git?: RunStoreGit;
    now?: number;
    /** A pull-only store never pushes. */
    push?: boolean;
    /** Names the caller in background-sync.log. */
    source?: string;
}
/** Hook store sync cadence; `PHREN_STORE_SYNC_SECONDS=0` turns it off. */
export declare const DEFAULT_STORE_SYNC_SECONDS = 300;
export declare function storeSyncSeconds(env?: NodeJS.ProcessEnv): number;
export declare function syncStore(store: string, options?: StoreSyncOptions): Promise<StoreSyncOutcome>;
/** Every store this computer has, in turn: a readonly or pull-only store only pulls. */
export declare function syncAllStores(primary: string, options?: Omit<StoreSyncOptions, "push">): Promise<Array<{
    name: string;
    outcome: StoreSyncOutcome;
}>>;
/** The Hook's sync loop: the first pass a minute after start, then every `seconds`. */
export declare function startStoreSyncLoop(primary: string, seconds?: number): {
    stop: () => void;
};
/** A store with a remote that has not synced for this long is flagged. */
export declare const STORE_STALE_MS: number;
/** Diverged, stale and failing in one sentence, most urgent first. */
export declare function storeWarning(store: {
    name: string;
    ahead?: number;
    behind?: number;
    diverged?: boolean;
    stale?: boolean;
    error?: string;
    lastSyncedAt?: string;
}, now?: number): string | undefined;
/** The newest successful pull or push in a store's sync record. */
export declare function lastSyncedAt(sync: SyncStatus | undefined): string | undefined;
export interface StoreSyncState {
    name: string;
    upstream?: string;
    ahead?: number;
    behind?: number;
    lastSyncedAt?: string;
    diverged: boolean;
    stale: boolean;
    error?: string;
    warning?: string;
}
/** Where a store stands against its last-fetched upstream and its sync record; nothing is fetched. */
export declare function storeSyncState(name: string, store: string, git?: RunStoreGit, now?: number): Promise<StoreSyncState>;
