/**
 * M25 Release Push — service-owner of the `release_push` table and the push flow.
 *
 * `push(releaseId)` is a COORDINATOR: it gates on the M24 session, delegates the
 * bundle build to M17 (`releaseService.buildBundleArchive`), transports it via the
 * M24 client (`remoteAuth.pushBundle`), records the attempt, and cleans up. It
 * never builds the bundle itself — there are intentionally NO `tar`/`gzip`/
 * `archiver`/`crypto.createHash` imports here (grep-checkable, AC m25).
 *
 * Every completed attempt (success OR error) is an append-only INSERT; in-progress
 * attempts are not persisted. Retry = a new INSERT (no UPDATE, no DELETE).
 *
 * Spec: brief 0-1-28-to-0-1-29.md (M25).
 */
import type Database from 'better-sqlite3';
import type { ReleaseService } from './release.js';
import type { RemoteAuthService } from './remote-auth.js';
import type { GitService } from './git.js';
import type { ReleasePushResponse } from '../../shared/release-push.js';
export declare class ReleasePushService {
    private db;
    private releaseService;
    private remoteAuth;
    private gitService;
    private cwd;
    constructor(db: Database.Database, releaseService: ReleaseService, remoteAuth: RemoteAuthService, gitService: GitService, cwd: string);
    /**
     * Synchronous push of release N to the remote. Algorithm (brief §1.3):
     * gate → validate release → build bundle (M17) → transport (M24) → persist →
     * cleanup. The bundle's `tarGzPath` is unlinked in `finally` ALWAYS (M17 does
     * not clean it up — the consumer owns it).
     */
    push(releaseId: number): Promise<ReleasePushResponse>;
    /** Audit log for one release, newest first (uses idx_release_push_release_id). */
    listForRelease(releaseId: number): ReleasePushResponse[];
    getById(id: number): ReleasePushResponse | null;
    /**
     * Whole audit log, newest first. Consumed by the `/releases` page to derive
     * per-release push-count badges — one request per render, aggregated
     * client-side, rather than N × `?releaseId=X`. (M17 owns release identity,
     * M25 owns the push audit log — see brief 0.1.32 §3.)
     */
    listAll(): ReleasePushResponse[];
    private insertRow;
}
