import type { JsonValue } from "./json-path.js";
import type { LegacyAliasMapping } from "./legacy-aliases.js";
/**
 * A project file that mirrors a synced setting. Artifact files are only ever
 * written when they already exist on disk — sync never scaffolds an artifact
 * into a project whose stack does not use it.
 */
export interface ArtifactBinding {
    /** Repo-relative path of the mirrored file */
    readonly file: string;
    /** Dot path of the mirrored value inside the file ("" = whole document) */
    readonly pointer: string;
}
/** One synced setting: a config key, its default, and optional mirrors. */
export interface SyncedSetting {
    /** Dot path of the setting inside `.lisa.config.json` */
    readonly key: string;
    /** Built-in default used when neither config nor artifact has a value */
    readonly defaultValue: JsonValue;
    /** Optional executable validator for human/config supplied values. */
    readonly validate?: (value: unknown) => JsonValue;
    /**
     * Internal relative-path mappings for deprecated keys that remain readable.
     * Sync uses these to avoid filling a new default beside a human-owned alias.
     */
    readonly legacyAliases?: readonly LegacyAliasMapping[];
    /** Files that mirror this value (written from config on every sync) */
    readonly artifacts?: readonly ArtifactBinding[];
    /**
     * Entry applies when ANY condition matches (absent = always applies).
     * `"github"` means the `github` section exists; `"tracker=jira"` means the
     * `tracker` key equals `"jira"`.
     */
    readonly relevantWhen?: readonly string[];
    /** One-line human description used in sync reports */
    readonly description: string;
}
/** A key sync cannot default and must report when missing. */
export interface RequiredKey {
    /** Dot path of the required setting */
    readonly key: string;
    /** Applies when ANY condition matches (absent = always required) */
    readonly relevantWhen?: readonly string[];
    /** Setup command that provisions the key */
    readonly setupHint: string;
}
/** One provider's exact setup scope contract. */
export interface SetupProviderRequirement {
    readonly allOf: readonly string[];
    readonly anyOf?: readonly string[];
    readonly setupHint: string;
}
/**
 * Authoritative tracker/PRD-source setup requirements. Config sync and
 * read-only readiness consumers share this map so provider lanes cannot drift.
 */
export declare const SETUP_PROVIDER_REQUIREMENTS: Readonly<{
    tracker: Readonly<Record<string, SetupProviderRequirement>>;
    source: Readonly<Record<string, SetupProviderRequirement>>;
}>;
/**
 * All settings `lisa sync` manages. Local-only keys (`atlassian.email`,
 * `intake.assignee`, `jira.verified_workflow_hash`, secret paths) are
 * deliberately absent — sync never populates the committed file with values
 * that belong in `.lisa.config.local.json`.
 */
export declare const SYNC_REGISTRY: readonly SyncedSetting[];
/**
 * Keys sync can never default: they identify external systems and must come
 * from a human (via the matching `/lisa:setup:*` skill). Sync reports them
 * when missing instead of inventing values.
 */
export declare const REQUIRED_KEYS: readonly RequiredKey[];
//# sourceMappingURL=registry.d.ts.map