/**
 * Plugin Registry Validator
 *
 * Validates registry consistency with filesystem, detects orphaned/missing plugins,
 * and validates cross-framework references.
 *
 * @module src/plugin/registry-validator
 * @implements @.aiwg/requirements/use-cases/UC-011-validate-plugin-security.md
 * @architecture @.aiwg/architecture/software-architecture-doc.md - Section 5.1 PluginManager
 * @adr @.aiwg/architecture/decisions/ADR-002-plugin-isolation-strategy.md
 * @tests @test/unit/plugin/registry-validator.test.ts
 * @depends @src/plugin/metadata-validator.ts
 */
/**
 * Registry entry structure
 */
export interface RegistryEntry {
    id: string;
    type: 'framework' | 'add-on' | 'extension';
    name: string;
    version: string;
    path: string;
    installedAt: string;
    parentFramework?: string;
    projects?: string[];
    health?: {
        status: 'healthy' | 'warning' | 'error';
        lastCheck: string;
        issues?: string[];
    };
}
/**
 * Registry structure
 */
export interface Registry {
    version: string;
    lastModified: string;
    plugins: RegistryEntry[];
}
/**
 * Validation issue
 */
export interface ValidationIssue {
    type: 'error' | 'warning';
    category: 'orphaned' | 'missing' | 'mismatch' | 'invalid-ref' | 'stale-health';
    pluginId?: string;
    path?: string;
    message: string;
    suggestion?: string;
}
/**
 * Validation result
 */
export interface RegistryValidationResult {
    valid: boolean;
    issues: ValidationIssue[];
    stats: {
        totalPlugins: number;
        healthyPlugins: number;
        orphanedPlugins: number;
        missingPlugins: number;
        invalidRefs: number;
    };
}
/**
 * Validation options
 */
export interface RegistryValidationOptions {
    /** Check that filesystem directories match registry entries */
    checkFilesystem?: boolean;
    /** Check parent framework references are valid */
    checkFrameworkRefs?: boolean;
    /** Check health status is not stale (older than threshold) */
    checkHealthStaleness?: boolean;
    /** Health staleness threshold in hours (default: 24) */
    healthStaleThresholdHours?: number;
    /** Auto-fix issues where possible */
    autoFix?: boolean;
}
/**
 * RegistryValidator validates plugin registry consistency
 */
export declare class RegistryValidator {
    private registryPath;
    private aiwgRoot;
    private options;
    constructor(aiwgRoot: string, options?: RegistryValidationOptions);
    /**
     * Validate the entire registry
     *
     * @returns Validation result with issues and stats
     */
    validate(): Promise<RegistryValidationResult>;
    /**
     * Validate a single plugin entry
     *
     * @param plugin - Plugin registry entry
     * @returns Array of validation issues
     */
    private validatePlugin;
    /**
     * Find directories in the plugins folder that aren't in the registry
     *
     * @param registry - Current registry
     * @returns Array of validation issues for orphaned directories
     */
    private findOrphanedDirectories;
    /**
     * Validate parent framework references
     *
     * @param registry - Current registry
     * @returns Array of validation issues for invalid references
     */
    private validateFrameworkReferences;
    /**
     * Validate registry against filesystem and return consistency status
     *
     * @returns True if registry and filesystem are consistent
     */
    isConsistent(): Promise<boolean>;
    /**
     * Get orphaned plugins (in registry but not filesystem)
     *
     * @returns Array of orphaned plugin IDs
     */
    getOrphanedPlugins(): Promise<string[]>;
    /**
     * Get missing plugins (in filesystem but not registry)
     *
     * @returns Array of directory paths not in registry
     */
    getMissingPlugins(): Promise<string[]>;
    /**
     * Generate a validation report
     *
     * @param format - Report format (text or json)
     * @returns Formatted report string
     */
    generateReport(format?: 'text' | 'json'): Promise<string>;
    /**
     * Load and parse registry file
     */
    private loadRegistry;
    /**
     * Generate text format report
     */
    private generateTextReport;
}
//# sourceMappingURL=registry-validator.d.ts.map