import type { CleanConfig, CleanRuleId } from './compile/CleanConfig.ts';
import type { RuleLevel } from './compile/RuleLevelConfig.ts';
/** Hard safety rules — always enforced; cannot be disabled via config. */
export declare const CLEAN_HARD_RULES: readonly [{
    readonly description: "Patterns must resolve strictly inside the monorepo root (never the root itself or outside it)";
    readonly id: "clean.inside-root";
}, {
    readonly description: "Patterns must be non-empty and package-relative (absolute paths are rejected)";
    readonly id: "clean.relative-pattern";
}];
export type CleanHardRuleId = (typeof CLEAN_HARD_RULES)[number]['id'];
export interface CleanConfigurableRuleDefinition {
    defaultLevel: RuleLevel;
    description: string;
    id: CleanRuleId;
}
/**
 * Configurable clean rules. Levels can be set in `commands.clean.rules`.
 */
export declare const CLEAN_CONFIGURABLE_RULES: readonly CleanConfigurableRuleDefinition[];
/** Immutable exclude entries — always skipped by clean, cannot be overridden. */
export declare const CLEAN_IMMUTABLE_EXCLUDE: readonly [".git", "**/.git", "**/.git/**"];
/**
 * Default exclude entries applied in addition to config (and immutable entries).
 * Prevents `clean.gitignored-all` from wiping install trees by default.
 */
export declare const CLEAN_DEFAULT_EXCLUDE: readonly ["node_modules", "**/node_modules", "**/node_modules/**"];
export interface ResolvedCleanRules {
    /** Level for `clean.gitignored-all` (enabled when not `off`). */
    gitignoredAll: RuleLevel;
    /** Level for `clean.gitignored-only` (enabled when not `off`). */
    gitignoredOnly: RuleLevel;
}
export declare function isCleanRuleEnabled(level: RuleLevel): boolean;
/**
 * Resolve configurable clean rule levels from config. Throws if the config
 * references hard (non-configurable) rules or unknown rule ids.
 */
export declare function resolveCleanRules(config: CleanConfig | undefined): ResolvedCleanRules;
/**
 * How aggressively exclude patterns are applied.
 * - `normal` — immutable + default (node_modules) + config.exclude
 * - `immutable-only` — only hard safety (`.git`); used by `xy clean --full-all`
 */
export type CleanExcludeMode = 'immutable-only' | 'normal';
/** Merge exclude patterns (deduped, order preserved). */
export declare function resolveCleanExclude(config: CleanConfig | undefined, mode?: CleanExcludeMode): string[];
export declare function resolveCleanInclude(config: CleanConfig | undefined): string[];
export declare function resolveCleanPatterns(config: CleanConfig | undefined): string[];
//# sourceMappingURL=cleanRules.d.ts.map