/**
 * takt-repertoire.yaml parsing and validation.
 *
 * Handles:
 * - YAML parsing with default values
 * - path field validation (no absolute paths, no directory traversal)
 * - min_version format validation (strict semver X.Y.Z)
 * - Numeric semver comparison
 * - Package content presence check (facets/ or workflows/ must exist)
 * - Realpath validation to prevent symlink-based traversal outside root
 */
export interface TaktRepertoireConfig {
    description?: string;
    path: string;
    takt?: {
        min_version?: string;
    };
}
interface PackageContentCheckContext {
    manifestPath?: string;
    configuredPath?: string;
}
/**
 * Parse takt-repertoire.yaml content string into a TaktRepertoireConfig.
 * Applies default path "." when not specified.
 */
export declare function parseTaktRepertoireConfig(yaml: string): TaktRepertoireConfig;
/**
 * Validate that the path field is safe:
 * - Must not start with "/" (absolute path)
 * - Must not start with "~" (home-relative path)
 * - Must not contain ".." segments (directory traversal)
 *
 * Throws on validation failure.
 */
export declare function validateTaktRepertoirePath(path: string): void;
/**
 * Validate min_version format: must match /^\d+\.\d+\.\d+$/ exactly.
 * Pre-release suffixes (e.g. "1.0.0-alpha") and "v" prefix are rejected.
 *
 * Throws on validation failure.
 */
export declare function validateMinVersion(version: string): void;
/**
 * Compare versions numerically.
 *
 * @param minVersion     - minimum required version (X.Y.Z)
 * @param currentVersion - current installed version (X.Y.Z)
 * @returns true if currentVersion >= minVersion
 */
export declare function isVersionCompatible(minVersion: string, currentVersion: string): boolean;
/**
 * Check that the package root contains at least one of facets/ or workflows/.
 * Throws if neither exists (empty package).
 */
export declare function checkPackageHasContent(packageRoot: string): void;
/**
 * Check package content and include user-facing diagnostics when empty.
 *
 * Adds manifest/configured-path details and a practical hint for nested layouts
 * (e.g. when actual content is under ".takt/" but path remains ".").
 */
export declare function checkPackageHasContentWithContext(packageRoot: string, context: PackageContentCheckContext): void;
/**
 * Resolve the path to takt-repertoire.yaml within an extracted tarball directory.
 *
 * Search order (first found wins):
 *   1. {extractDir}/.takt/takt-repertoire.yaml
 *   2. {extractDir}/takt-repertoire.yaml
 *
 * @param extractDir - root of the extracted tarball
 * @throws if neither candidate exists
 */
export declare function resolveRepertoireConfigPath(extractDir: string): string;
/**
 * Validate that resolvedPath is inside (or equal to) repoRoot after realpath normalization.
 * This prevents symlink-based traversal that would escape the package root.
 *
 * @param resolvedPath - absolute path to validate (must exist)
 * @param repoRoot     - absolute path of the repository/package root
 * @throws if resolvedPath does not exist, or if it resolves outside repoRoot
 */
export declare function validateRealpathInsideRoot(resolvedPath: string, repoRoot: string): void;
export {};
//# sourceMappingURL=takt-repertoire-config.d.ts.map