import type winston from 'winston';
import { z } from 'zod';
export declare const PROJECT_CONFIG_DOCS_LINK = "https://github.com/sorenlouv/backport/blob/main/docs/configuration.md#project-config-backportrcjson";
export declare const GLOBAL_CONFIG_DOCS_LINK = "https://github.com/sorenlouv/backport/blob/main/docs/configuration.md#global-config-backportconfigjson";
export interface TargetBranchChoice {
    name: string;
    value: string;
    checked?: boolean;
}
export type TargetBranchChoiceOrString = string | TargetBranchChoice;
export type AutoFixConflictsHandler = ({ files, directory, logger, targetBranch, }: {
    files: string[];
    directory: string;
    logger: winston.Logger;
    targetBranch: string;
}) => boolean | Promise<boolean>;
/**
 * Schema for options that can appear in config files, module API, or CLI.
 * This is the single source of truth for option types and defaults.
 */
export declare const configOptionsSchema: z.ZodObject<{
    githubToken: z.ZodOptional<z.ZodString>;
    assignees: z.ZodDefault<z.ZodArray<z.ZodString>>;
    author: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    autoAssign: z.ZodDefault<z.ZodBoolean>;
    autoFixConflicts: z.ZodOptional<z.ZodCustom<AutoFixConflictsHandler, AutoFixConflictsHandler>>;
    autoMerge: z.ZodDefault<z.ZodBoolean>;
    autoMergeMethod: z.ZodDefault<z.ZodEnum<{
        merge: "merge";
        rebase: "rebase";
        squash: "squash";
    }>>;
    backportBinary: z.ZodDefault<z.ZodString>;
    backportBranchName: z.ZodOptional<z.ZodString>;
    branchLabelMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    cherryPickRef: z.ZodDefault<z.ZodBoolean>;
    conflictResolution: z.ZodDefault<z.ZodEnum<{
        commit: "commit";
        abort: "abort";
        theirs: "theirs";
    }>>;
    commitPaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
    copySourcePRLabels: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodArray<z.ZodString>]>>;
    copySourcePRReviewers: z.ZodDefault<z.ZodBoolean>;
    cwd: z.ZodDefault<z.ZodString>;
    since: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    until: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    verbose: z.ZodDefault<z.ZodBoolean>;
    workdir: z.ZodOptional<z.ZodString>;
    draft: z.ZodDefault<z.ZodBoolean>;
    dryRun: z.ZodOptional<z.ZodBoolean>;
    editor: z.ZodOptional<z.ZodString>;
    fork: z.ZodDefault<z.ZodBoolean>;
    gitAuthorEmail: z.ZodOptional<z.ZodString>;
    gitAuthorName: z.ZodOptional<z.ZodString>;
    gitHostname: z.ZodDefault<z.ZodString>;
    githubActionRunId: z.ZodOptional<z.ZodNumber>;
    githubApiBaseUrlV3: z.ZodOptional<z.ZodString>;
    githubApiBaseUrlV4: z.ZodOptional<z.ZodString>;
    globalConfigFile: z.ZodOptional<z.ZodString>;
    interactive: z.ZodDefault<z.ZodBoolean>;
    logFilePath: z.ZodOptional<z.ZodString>;
    mainline: z.ZodOptional<z.ZodNumber>;
    ls: z.ZodOptional<z.ZodBoolean>;
    maxCount: z.ZodDefault<z.ZodNumber>;
    multipleBranches: z.ZodDefault<z.ZodBoolean>;
    multipleCommits: z.ZodDefault<z.ZodBoolean>;
    noVerify: z.ZodDefault<z.ZodBoolean>;
    noUnmergedBackportsHelp: z.ZodDefault<z.ZodBoolean>;
    onlyMissing: z.ZodOptional<z.ZodBoolean>;
    prDescription: z.ZodOptional<z.ZodString>;
    prQuery: z.ZodOptional<z.ZodString>;
    prTitle: z.ZodOptional<z.ZodString>;
    projectConfigFile: z.ZodOptional<z.ZodString>;
    publishStatusCommentOnAbort: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnFailure: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnSuccess: z.ZodDefault<z.ZodBoolean>;
    pullNumber: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodNumber>]>>;
    repoForkOwner: z.ZodOptional<z.ZodString>;
    repoName: z.ZodOptional<z.ZodString>;
    repoOwner: z.ZodOptional<z.ZodString>;
    resetAuthor: z.ZodDefault<z.ZodBoolean>;
    reviewers: z.ZodDefault<z.ZodArray<z.ZodString>>;
    sha: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
    signoff: z.ZodDefault<z.ZodBoolean>;
    skipRemoteConfig: z.ZodOptional<z.ZodBoolean>;
    sourceBranch: z.ZodOptional<z.ZodString>;
    sourcePRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetBranchChoices: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodPipe<z.ZodObject<{
        name: z.ZodString;
        value: z.ZodOptional<z.ZodString>;
        checked: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodTransform<{
        value: string;
        name: string;
        checked?: boolean | undefined;
    }, {
        name: string;
        value?: string | undefined;
        checked?: boolean | undefined;
    }>>]>>>;
    targetBranches: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetPRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
}, z.core.$strip>;
/**
 * Partial config options — what config files and CLI provide (all fields optional).
 */
export type ConfigOptions = z.input<typeof configOptionsSchema>;
/**
 * Fully resolved config options with defaults applied.
 */
export type ResolvedConfigOptions = z.output<typeof configOptionsSchema>;
/**
 * The default values for all config options, derived from Zod schema.
 */
export declare const defaultConfigOptions: ResolvedConfigOptions;
/**
 * Extended schema for JSON config files that might contain deprecated fields.
 * The deprecated fields are stripped during parsing in `read-config-file.ts`.
 *
 * IMPORTANT: When adding or removing deprecated fields here, also update
 * `normalizeDeprecatedOptions()` in `read-config-file.ts` — it handles the
 * runtime mapping from old keys to new keys.
 */
export declare const configFileOptionsSchema: z.ZodObject<{
    githubToken: z.ZodOptional<z.ZodString>;
    assignees: z.ZodDefault<z.ZodArray<z.ZodString>>;
    author: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    autoAssign: z.ZodDefault<z.ZodBoolean>;
    autoFixConflicts: z.ZodOptional<z.ZodCustom<AutoFixConflictsHandler, AutoFixConflictsHandler>>;
    autoMerge: z.ZodDefault<z.ZodBoolean>;
    autoMergeMethod: z.ZodDefault<z.ZodEnum<{
        merge: "merge";
        rebase: "rebase";
        squash: "squash";
    }>>;
    backportBinary: z.ZodDefault<z.ZodString>;
    backportBranchName: z.ZodOptional<z.ZodString>;
    branchLabelMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    cherryPickRef: z.ZodDefault<z.ZodBoolean>;
    conflictResolution: z.ZodDefault<z.ZodEnum<{
        commit: "commit";
        abort: "abort";
        theirs: "theirs";
    }>>;
    commitPaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
    copySourcePRLabels: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodArray<z.ZodString>]>>;
    copySourcePRReviewers: z.ZodDefault<z.ZodBoolean>;
    cwd: z.ZodDefault<z.ZodString>;
    since: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    until: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    verbose: z.ZodDefault<z.ZodBoolean>;
    workdir: z.ZodOptional<z.ZodString>;
    draft: z.ZodDefault<z.ZodBoolean>;
    dryRun: z.ZodOptional<z.ZodBoolean>;
    editor: z.ZodOptional<z.ZodString>;
    fork: z.ZodDefault<z.ZodBoolean>;
    gitAuthorEmail: z.ZodOptional<z.ZodString>;
    gitAuthorName: z.ZodOptional<z.ZodString>;
    gitHostname: z.ZodDefault<z.ZodString>;
    githubActionRunId: z.ZodOptional<z.ZodNumber>;
    githubApiBaseUrlV3: z.ZodOptional<z.ZodString>;
    githubApiBaseUrlV4: z.ZodOptional<z.ZodString>;
    globalConfigFile: z.ZodOptional<z.ZodString>;
    interactive: z.ZodDefault<z.ZodBoolean>;
    logFilePath: z.ZodOptional<z.ZodString>;
    mainline: z.ZodOptional<z.ZodNumber>;
    ls: z.ZodOptional<z.ZodBoolean>;
    maxCount: z.ZodDefault<z.ZodNumber>;
    multipleBranches: z.ZodDefault<z.ZodBoolean>;
    multipleCommits: z.ZodDefault<z.ZodBoolean>;
    noVerify: z.ZodDefault<z.ZodBoolean>;
    noUnmergedBackportsHelp: z.ZodDefault<z.ZodBoolean>;
    onlyMissing: z.ZodOptional<z.ZodBoolean>;
    prDescription: z.ZodOptional<z.ZodString>;
    prQuery: z.ZodOptional<z.ZodString>;
    prTitle: z.ZodOptional<z.ZodString>;
    projectConfigFile: z.ZodOptional<z.ZodString>;
    publishStatusCommentOnAbort: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnFailure: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnSuccess: z.ZodDefault<z.ZodBoolean>;
    pullNumber: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodNumber>]>>;
    repoForkOwner: z.ZodOptional<z.ZodString>;
    repoName: z.ZodOptional<z.ZodString>;
    repoOwner: z.ZodOptional<z.ZodString>;
    resetAuthor: z.ZodDefault<z.ZodBoolean>;
    reviewers: z.ZodDefault<z.ZodArray<z.ZodString>>;
    sha: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
    signoff: z.ZodDefault<z.ZodBoolean>;
    skipRemoteConfig: z.ZodOptional<z.ZodBoolean>;
    sourceBranch: z.ZodOptional<z.ZodString>;
    sourcePRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetBranchChoices: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodPipe<z.ZodObject<{
        name: z.ZodString;
        value: z.ZodOptional<z.ZodString>;
        checked: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodTransform<{
        value: string;
        name: string;
        checked?: boolean | undefined;
    }, {
        name: string;
        value?: string | undefined;
        checked?: boolean | undefined;
    }>>]>>>;
    targetBranches: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetPRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
    help: z.ZodOptional<z.ZodBoolean>;
    version: z.ZodOptional<z.ZodBoolean>;
    v: z.ZodOptional<z.ZodBoolean>;
    accessToken: z.ZodOptional<z.ZodString>;
    upstream: z.ZodOptional<z.ZodString>;
    branches: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodPipe<z.ZodObject<{
        name: z.ZodString;
        value: z.ZodOptional<z.ZodString>;
        checked: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodTransform<{
        value: string;
        name: string;
        checked?: boolean | undefined;
    }, {
        name: string;
        value?: string | undefined;
        checked?: boolean | undefined;
    }>>]>>>;
    labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
    addOriginalReviewers: z.ZodOptional<z.ZodBoolean>;
    commitConflicts: z.ZodOptional<z.ZodBoolean>;
    autoResolveConflictsWithTheirs: z.ZodOptional<z.ZodBoolean>;
    maxNumber: z.ZodOptional<z.ZodNumber>;
    prFilter: z.ZodOptional<z.ZodString>;
    dateSince: z.ZodOptional<z.ZodString>;
    dateUntil: z.ZodOptional<z.ZodString>;
    dir: z.ZodOptional<z.ZodString>;
    cherrypickRef: z.ZodOptional<z.ZodBoolean>;
    details: z.ZodOptional<z.ZodBoolean>;
    all: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
/**
 * The type used by consumers to pass config-file-style options.
 * This is the public API type (exported from entrypoint.api.ts).
 */
export type ConfigFileOptions = z.input<typeof configFileOptionsSchema>;
/**
 * Schema for the final validated options that include required fields
 * resolved during startup (github token, repo info, authenticated user).
 */
export declare const validOptionsSchema: z.ZodObject<{
    assignees: z.ZodDefault<z.ZodArray<z.ZodString>>;
    autoAssign: z.ZodDefault<z.ZodBoolean>;
    autoFixConflicts: z.ZodOptional<z.ZodCustom<AutoFixConflictsHandler, AutoFixConflictsHandler>>;
    autoMerge: z.ZodDefault<z.ZodBoolean>;
    autoMergeMethod: z.ZodDefault<z.ZodEnum<{
        merge: "merge";
        rebase: "rebase";
        squash: "squash";
    }>>;
    backportBinary: z.ZodDefault<z.ZodString>;
    backportBranchName: z.ZodOptional<z.ZodString>;
    branchLabelMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    cherryPickRef: z.ZodDefault<z.ZodBoolean>;
    conflictResolution: z.ZodDefault<z.ZodEnum<{
        commit: "commit";
        abort: "abort";
        theirs: "theirs";
    }>>;
    commitPaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
    copySourcePRLabels: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodArray<z.ZodString>]>>;
    copySourcePRReviewers: z.ZodDefault<z.ZodBoolean>;
    cwd: z.ZodDefault<z.ZodString>;
    since: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    until: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    verbose: z.ZodDefault<z.ZodBoolean>;
    workdir: z.ZodOptional<z.ZodString>;
    draft: z.ZodDefault<z.ZodBoolean>;
    dryRun: z.ZodOptional<z.ZodBoolean>;
    editor: z.ZodOptional<z.ZodString>;
    fork: z.ZodDefault<z.ZodBoolean>;
    gitAuthorEmail: z.ZodOptional<z.ZodString>;
    gitAuthorName: z.ZodOptional<z.ZodString>;
    gitHostname: z.ZodDefault<z.ZodString>;
    githubActionRunId: z.ZodOptional<z.ZodNumber>;
    githubApiBaseUrlV3: z.ZodOptional<z.ZodString>;
    githubApiBaseUrlV4: z.ZodOptional<z.ZodString>;
    globalConfigFile: z.ZodOptional<z.ZodString>;
    interactive: z.ZodDefault<z.ZodBoolean>;
    logFilePath: z.ZodOptional<z.ZodString>;
    mainline: z.ZodOptional<z.ZodNumber>;
    ls: z.ZodOptional<z.ZodBoolean>;
    maxCount: z.ZodDefault<z.ZodNumber>;
    multipleBranches: z.ZodDefault<z.ZodBoolean>;
    multipleCommits: z.ZodDefault<z.ZodBoolean>;
    noVerify: z.ZodDefault<z.ZodBoolean>;
    noUnmergedBackportsHelp: z.ZodDefault<z.ZodBoolean>;
    onlyMissing: z.ZodOptional<z.ZodBoolean>;
    prDescription: z.ZodOptional<z.ZodString>;
    prQuery: z.ZodOptional<z.ZodString>;
    prTitle: z.ZodOptional<z.ZodString>;
    projectConfigFile: z.ZodOptional<z.ZodString>;
    publishStatusCommentOnAbort: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnFailure: z.ZodDefault<z.ZodBoolean>;
    publishStatusCommentOnSuccess: z.ZodDefault<z.ZodBoolean>;
    pullNumber: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodNumber>]>>;
    resetAuthor: z.ZodDefault<z.ZodBoolean>;
    reviewers: z.ZodDefault<z.ZodArray<z.ZodString>>;
    sha: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
    signoff: z.ZodDefault<z.ZodBoolean>;
    skipRemoteConfig: z.ZodOptional<z.ZodBoolean>;
    sourcePRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetBranchChoices: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodPipe<z.ZodObject<{
        name: z.ZodString;
        value: z.ZodOptional<z.ZodString>;
        checked: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>, z.ZodTransform<{
        value: string;
        name: string;
        checked?: boolean | undefined;
    }, {
        name: string;
        value?: string | undefined;
        checked?: boolean | undefined;
    }>>]>>>;
    targetBranches: z.ZodDefault<z.ZodArray<z.ZodString>>;
    targetPRLabels: z.ZodDefault<z.ZodArray<z.ZodString>>;
    githubToken: z.ZodString;
    author: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    repoName: z.ZodString;
    repoOwner: z.ZodString;
    repoForkOwner: z.ZodString;
    authenticatedUsername: z.ZodString;
    sourceBranch: z.ZodString;
    isRepoPrivate: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
export type ValidConfigOptions = Readonly<z.output<typeof validOptionsSchema>>;
