/** Git merge-driver name shared by `.gitattributes` and the local git config. */
export declare const LEARNINGS_MERGE_DRIVER_NAME = "lisa-learnings";
/** Human-readable driver name recorded alongside the command. */
export declare const LEARNINGS_MERGE_DRIVER_DESCRIPTION = "Union project learnings by entry id";
/** Marker opening the Lisa-managed block in a host `.gitattributes`. */
export declare const GITATTRIBUTES_BEGIN_MARKER = "# BEGIN: AI GUARDRAILS";
/** Marker closing the Lisa-managed block in a host `.gitattributes`. */
export declare const GITATTRIBUTES_END_MARKER = "# END: AI GUARDRAILS";
/**
 * Build the `merge.<name>.driver` command string.
 *
 * Git expands `%O` (merge base), `%A` (our version, and the file the driver
 * MUST overwrite with the result), `%B` (their version), and `%P` (the real
 * pathname, used only for diagnostics). The driver reports success by exiting
 * zero; any non-zero exit tells git to record a conflict.
 *
 * ⚠️ DO NOT WRAP THE PLACEHOLDERS IN QUOTES. Git runs this string through
 * `sh -c` and substitutes `%O/%A/%B/%P` already shell-quoted (git's own
 * `sq_quote`), so bare `--path %P` is correct AND safe for a pathname
 * containing spaces or metacharacters. Adding quotes — `--path "%P"` — looks
 * like a fix for filenames with spaces and is a remote code execution hole: the
 * value arrives pre-quoted, so the added double quotes re-expose `$(...)`,
 * backticks and `$` inside a filename to the shell. A security review
 * demonstrated a working RCE for exactly that "fix". If a path with spaces
 * appears broken, the bug is elsewhere.
 *
 * The `invocation` argument is a different matter: it is OUR string, not git's,
 * so it must be shell-quoted by the caller before it gets here (see
 * `learnings-merge-driver-install.ts`).
 * @param invocation - How to invoke the Lisa CLI, already shell-quoted
 * @returns Fully expanded git driver command
 */
export declare function buildLearningsMergeDriverCommand(invocation: string): string;
/**
 * Build the `.gitattributes` line binding one ledger path to the driver.
 * @param ledgerPath - Project-relative learnings file path
 * @returns Single `.gitattributes` line, without a trailing newline
 */
export declare function buildLearningsAttributeLine(ledgerPath: string): string;
/**
 * Render the complete Lisa-managed `.gitattributes` block.
 *
 * Wrapped in the same guardrail markers the `.gitignore` template uses, so the
 * `copy-contents` strategy replaces exactly this block on re-apply and leaves
 * every host-authored rule outside it untouched.
 *
 * Both halves of the learnings surface are bound. The overflow file
 * (CodySwannGT/lisa#1996) is written by the same concurrent learner passes, on
 * the same per-fingerprint branches, in the same canonical document format — so
 * it has the ledger's exact merge problem and the exact same union-by-id
 * resolution. Binding only the ledger would leave the overflow on git's default
 * text merge, silently re-introducing the corruption this driver exists to
 * remove, on the one file whose whole job is not losing content.
 * @param ledgerPath - Project-relative learnings file path
 * @returns Managed block, newline-terminated
 */
export declare function renderLearningsGitattributesBlock(ledgerPath: string): string;
//# sourceMappingURL=learnings-merge-driver.d.ts.map