/**
 * Detect the consumer repo's default branch so workflow templates
 * that fire on pushes to "the main branch" point at the right name.
 * The resolution order is intentionally lenient — we'd rather
 * substitute *some* sensible branch and let the consumer edit the
 * workflow than refuse to install when git state is incomplete.
 *
 *   1. `git symbolic-ref refs/remotes/origin/HEAD` (set whenever the
 *      repo was cloned from a remote with a default-branch HEAD)
 *   2. `git rev-parse --verify <name>` against `main` / `master` /
 *      `trunk` / `develop` — the four conventions that cover ~all
 *      real repos
 *   3. The current branch (`git branch --show-current`) — the best
 *      guess in a freshly-`git init`'d repo that hasn't been pushed
 *   4. Fallback to `'main'` — the GitHub default-branch default
 */
export declare function detectDefaultBranch(cwd: string): string;
export interface ShipInstallResult {
    /** Relative paths (from cwd) of files newly written to the consumer repo. */
    installed: string[];
    /** Relative paths the installer left alone because the consumer already had them. */
    skipped: string[];
    /** Sidecar paths emitted when a conflict was detected (foo.dxkit form). */
    sidecars: string[];
    /** Human-readable merge instructions. Surfaced by the CLI summary. */
    notes: string[];
}
interface InstallerOpts {
    /** Overwrite consumer files in place rather than emitting sidecars. */
    readonly force?: boolean;
    /**
     * Install the pre-commit hook in addition to pre-push.
     *
     * Default off: pre-commit re-runs every analyzer on the full repo
     * (no incremental scope yet), which makes it slow on large
     * codebases (~3 min on a 500-file repo). Pre-push is faster to
     * tolerate because it fires once per push regardless of how many
     * commits batch up.
     *
     * Customers who want commit-time gating (e.g. on small repos where
     * the scan is fast) can opt in with `--with-precommit-hook`.
     * Incremental scoped scanning lands in a future phase; the trade-
     * off goes away then.
     */
    readonly withPrecommit?: boolean;
}
/**
 * Hooks installer. Writes `.githooks/pre-push` by default;
 * additionally writes `.githooks/pre-commit` when
 * `opts.withPrecommit === true`. When the consumer already has a
 * matching hook (via .githooks/ or .husky/), emits a `.dxkit`
 * sidecar instead and prints merge instructions.
 *
 * Customer still needs to run `git config core.hooksPath .githooks`
 * to activate. We don't run it for them — that's a global git config
 * mutation outside dxkit's purview.
 *
 * Why pre-commit is opt-in: see `InstallerOpts.withPrecommit`.
 */
export declare function installHooks(cwd: string, opts?: InstallerOpts): ShipInstallResult;
/**
 * Devcontainer installer. Writes the dxkit lightweight devcontainer
 * (devcontainer.json + post-create.sh + install-agent-clis.sh) into
 * `.devcontainer/`. If the consumer already has a devcontainer.json,
 * writes the entire dxkit set into `.devcontainer/.dxkit-reference/`
 * for manual merge.
 *
 * devcontainer.json is rendered per-detected-stack: only active
 * packs' features land in the output. Always-on entries (Node +
 * GitHub CLI) ship regardless so the post-create script can run on
 * a non-Node project.
 */
export declare function installDevcontainer(cwd: string, opts?: InstallerOpts): ShipInstallResult;
export declare function installCiGuardrails(cwd: string, opts?: InstallerOpts): ShipInstallResult;
export declare function installCiBaselineRefresh(cwd: string, opts?: InstallerOpts): ShipInstallResult;
/**
 * AI PR-review workflow installer. Writes
 * `.github/workflows/pr-review.yml` — a workflow that runs Claude
 * Code over a PR's diff and posts a review comment.
 *
 * Opt-in (via `--with-pr-review`) because the workflow needs an
 * `ANTHROPIC_API_KEY` repo secret AND a flipped `ENABLE_AI_REVIEW`
 * repo variable to actually run anything; without both, the
 * workflow file just sits inert in the repo and clutters the
 * Actions tab. Customers who want this should opt in explicitly
 * with the flag (and configure the repo secret + variable
 * separately).
 */
export declare function installPrReview(cwd: string, opts?: InstallerOpts): ShipInstallResult;
/**
 * Seed `.gitignore` with dxkit's runtime-output paths and write a
 * starter `.dxkit-ignore` template explaining the optional dxkit-
 * specific scan-exclusion file.
 *
 * Concerns the seeded files address:
 *   - `.gitignore`: stops customers from accidentally committing
 *     `.dxkit/reports/*.md` and `.dxkit/dashboard.html` (which
 *     churn on every analyzer run). Selectively keeps
 *     `.dxkit/baselines/` tracked — it IS the guardrail anchor.
 *   - `.dxkit-ignore`: dxkit's own scan-exclusion file. Loaded by
 *     `loadExclusions()` if present; never created by dxkit before
 *     this commit. Seeding a documented template makes the feature
 *     discoverable.
 *
 * Both are additive: existing `.gitignore` entries are preserved
 * (dedup against current contents); existing `.dxkit-ignore` is
 * never overwritten.
 */
export declare function installIgnoreFiles(cwd: string, opts?: InstallerOpts): ShipInstallResult;
export declare function installHooksPostinstall(cwd: string, _opts?: InstallerOpts): ShipInstallResult;
export {};
//# sourceMappingURL=ship-installers.d.ts.map