/** Registrars for non-project gate commands shipped to host projects. */
import type { Command } from "commander";
import type { FileUpstreamOptions } from "./file-upstream-cmd.js";
/**
 * Gate runners kept structural to avoid importing the whole CLI dependency
 * record.
 *
 * `merge-learnings`, `install-merge-driver`, and `learnings-overflow` are
 * deliberately NOT members. They are invoked by git, by an operator repairing a
 * repository, or by the gardener draining its buffer — never substituted by the
 * root CLI — and all three mutate real state: the merge driver overwrites the
 * file git hands it, the installer writes local git config, and the drain
 * removes entries from the only durable copy of a dropped capture. An optional,
 * defaulted field would be the worst shape here: a caller that
 * believed it had stubbed every gate command would silently run the real driver
 * against real files. Leaving them off the record makes non-injectability
 * explicit; they are covered directly by unit tests and by end-to-end tests
 * that drive real `git merge`.
 */
export interface GateCommandDependencies {
    runCheckLearningsBudget: (path: string | undefined) => Promise<number>;
    runFileUpstream: (options: FileUpstreamOptions) => Promise<number>;
}
/**
 * Gate commands skip the root npm update check.
 *
 * `merge-learnings` especially: git runs it inline during every merge of the
 * ledger, so a network update check would stall the merge and pollute the
 * driver's output.
 */
export declare const GATE_COMMAND_NAMES: readonly ["check-learnings-budget", "file-upstream", "learnings-overflow", "merge-learnings", "install-merge-driver"];
/**
 * Register all non-project gate commands.
 * @param program - Commander program
 * @param dependencies - Gate runners
 */
export declare function addGateCommands(program: Command, dependencies: GateCommandDependencies): void;
//# sourceMappingURL=gate-commands.d.ts.map