import { type Static } from '@sinclair/typebox';
import { type IndicatorCheck } from './schemas';
export declare const RegistryBadgeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"compatible">, import("@sinclair/typebox").TLiteral<"loads">, import("@sinclair/typebox").TLiteral<"activates">, import("@sinclair/typebox").TLiteral<"has-providers">, import("@sinclair/typebox").TLiteral<"tested">, import("@sinclair/typebox").TLiteral<"tests-failing">, import("@sinclair/typebox").TLiteral<"npm-audit-ok">, import("@sinclair/typebox").TLiteral<"audit-moderate">, import("@sinclair/typebox").TLiteral<"audit-high">, import("@sinclair/typebox").TLiteral<"audit-critical">, import("@sinclair/typebox").TLiteral<"broken">, import("@sinclair/typebox").TString]>;
export type RegistryBadge = Static<typeof RegistryBadgeSchema>;
export declare const RegistryIndexEntrySchema: import("@sinclair/typebox").TObject<{
    name: import("@sinclair/typebox").TString;
    version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    composite_stable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    badges_stable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"compatible">, import("@sinclair/typebox").TLiteral<"loads">, import("@sinclair/typebox").TLiteral<"activates">, import("@sinclair/typebox").TLiteral<"has-providers">, import("@sinclair/typebox").TLiteral<"tested">, import("@sinclair/typebox").TLiteral<"tests-failing">, import("@sinclair/typebox").TLiteral<"npm-audit-ok">, import("@sinclair/typebox").TLiteral<"audit-moderate">, import("@sinclair/typebox").TLiteral<"audit-high">, import("@sinclair/typebox").TLiteral<"audit-critical">, import("@sinclair/typebox").TLiteral<"broken">, import("@sinclair/typebox").TString]>>>;
    test_status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    last_tested: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    installs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    loads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    activates: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    providers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
    stars: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    open_issues: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    contributors: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    downloads_per_week: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    github_url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    plugin_ci: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
        status: import("@sinclair/typebox").TLiteral<"no-githead">;
    }>, import("@sinclair/typebox").TObject<{
        status: import("@sinclair/typebox").TLiteral<"no-run">;
        head_sha: import("@sinclair/typebox").TString;
        commit_url: import("@sinclair/typebox").TString;
    }>, import("@sinclair/typebox").TObject<{
        status: import("@sinclair/typebox").TLiteral<"no-plugin-ci">;
        head_sha: import("@sinclair/typebox").TString;
        workflow_run_url: import("@sinclair/typebox").TString;
    }>, import("@sinclair/typebox").TObject<{
        status: import("@sinclair/typebox").TLiteral<"in-progress">;
        head_sha: import("@sinclair/typebox").TString;
        workflow_run_url: import("@sinclair/typebox").TString;
        tested_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    }>, import("@sinclair/typebox").TObject<{
        status: import("@sinclair/typebox").TLiteral<"ok">;
        head_sha: import("@sinclair/typebox").TString;
        commit_url: import("@sinclair/typebox").TString;
        workflow_run_url: import("@sinclair/typebox").TString;
        tested_at: import("@sinclair/typebox").TString;
        workflow_ref: import("@sinclair/typebox").TString;
        jobs: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
            platform: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"linux-x64">, import("@sinclair/typebox").TLiteral<"linux-arm64">, import("@sinclair/typebox").TLiteral<"macos">, import("@sinclair/typebox").TLiteral<"windows">, import("@sinclair/typebox").TLiteral<"armv7-cerbo">, import("@sinclair/typebox").TLiteral<"integration">, import("@sinclair/typebox").TString]>;
            node: import("@sinclair/typebox").TNumber;
            conclusion: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">, import("@sinclair/typebox").TLiteral<"skipped">, import("@sinclair/typebox").TLiteral<"cancelled">, import("@sinclair/typebox").TLiteral<"in_progress">, import("@sinclair/typebox").TNull]>;
            server_version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            job_url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        }>>;
    }>]>>;
}>;
export type RegistryIndexEntry = Static<typeof RegistryIndexEntrySchema>;
export declare const RegistryIndexSchema: import("@sinclair/typebox").TObject<{
    generated: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    server_version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    plugin_count: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    plugins: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
        name: import("@sinclair/typebox").TString;
        version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        composite_stable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        badges_stable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"compatible">, import("@sinclair/typebox").TLiteral<"loads">, import("@sinclair/typebox").TLiteral<"activates">, import("@sinclair/typebox").TLiteral<"has-providers">, import("@sinclair/typebox").TLiteral<"tested">, import("@sinclair/typebox").TLiteral<"tests-failing">, import("@sinclair/typebox").TLiteral<"npm-audit-ok">, import("@sinclair/typebox").TLiteral<"audit-moderate">, import("@sinclair/typebox").TLiteral<"audit-high">, import("@sinclair/typebox").TLiteral<"audit-critical">, import("@sinclair/typebox").TLiteral<"broken">, import("@sinclair/typebox").TString]>>>;
        test_status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        last_tested: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        installs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        loads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        activates: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        providers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
        stars: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        open_issues: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        contributors: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        downloads_per_week: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        github_url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        plugin_ci: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
            status: import("@sinclair/typebox").TLiteral<"no-githead">;
        }>, import("@sinclair/typebox").TObject<{
            status: import("@sinclair/typebox").TLiteral<"no-run">;
            head_sha: import("@sinclair/typebox").TString;
            commit_url: import("@sinclair/typebox").TString;
        }>, import("@sinclair/typebox").TObject<{
            status: import("@sinclair/typebox").TLiteral<"no-plugin-ci">;
            head_sha: import("@sinclair/typebox").TString;
            workflow_run_url: import("@sinclair/typebox").TString;
        }>, import("@sinclair/typebox").TObject<{
            status: import("@sinclair/typebox").TLiteral<"in-progress">;
            head_sha: import("@sinclair/typebox").TString;
            workflow_run_url: import("@sinclair/typebox").TString;
            tested_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        }>, import("@sinclair/typebox").TObject<{
            status: import("@sinclair/typebox").TLiteral<"ok">;
            head_sha: import("@sinclair/typebox").TString;
            commit_url: import("@sinclair/typebox").TString;
            workflow_run_url: import("@sinclair/typebox").TString;
            tested_at: import("@sinclair/typebox").TString;
            workflow_ref: import("@sinclair/typebox").TString;
            jobs: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
                platform: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"linux-x64">, import("@sinclair/typebox").TLiteral<"linux-arm64">, import("@sinclair/typebox").TLiteral<"macos">, import("@sinclair/typebox").TLiteral<"windows">, import("@sinclair/typebox").TLiteral<"armv7-cerbo">, import("@sinclair/typebox").TLiteral<"integration">, import("@sinclair/typebox").TString]>;
                node: import("@sinclair/typebox").TNumber;
                conclusion: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"failure">, import("@sinclair/typebox").TLiteral<"skipped">, import("@sinclair/typebox").TLiteral<"cancelled">, import("@sinclair/typebox").TLiteral<"in_progress">, import("@sinclair/typebox").TNull]>;
                server_version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
                job_url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            }>>;
        }>]>>;
    }>>;
}>;
export type RegistryIndex = Static<typeof RegistryIndexSchema>;
export declare const RegistryPluginVersionRunSchema: import("@sinclair/typebox").TObject<{
    tested: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    server_version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    installs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    loads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    activates: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    has_schema: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    has_own_tests: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    own_tests_pass: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    tests_runnable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    has_install_scripts: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    audit_critical: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    audit_high: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    audit_moderate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    composite: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    badges: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"compatible">, import("@sinclair/typebox").TLiteral<"loads">, import("@sinclair/typebox").TLiteral<"activates">, import("@sinclair/typebox").TLiteral<"has-providers">, import("@sinclair/typebox").TLiteral<"tested">, import("@sinclair/typebox").TLiteral<"tests-failing">, import("@sinclair/typebox").TLiteral<"npm-audit-ok">, import("@sinclair/typebox").TLiteral<"audit-moderate">, import("@sinclair/typebox").TLiteral<"audit-high">, import("@sinclair/typebox").TLiteral<"audit-critical">, import("@sinclair/typebox").TLiteral<"broken">, import("@sinclair/typebox").TString]>>>;
    test_status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
    detected_providers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
    unstubbed_accesses: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
}>;
export type RegistryPluginVersionRun = Static<typeof RegistryPluginVersionRunSchema>;
export declare const RegistryPluginDetailSchema: import("@sinclair/typebox").TObject<{
    name: import("@sinclair/typebox").TString;
    versions: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
        tested: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        server_version: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        installs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        loads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        activates: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        has_schema: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        has_own_tests: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        own_tests_pass: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        tests_runnable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        has_install_scripts: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        audit_critical: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        audit_high: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        audit_moderate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        composite: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        badges: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"compatible">, import("@sinclair/typebox").TLiteral<"loads">, import("@sinclair/typebox").TLiteral<"activates">, import("@sinclair/typebox").TLiteral<"has-providers">, import("@sinclair/typebox").TLiteral<"tested">, import("@sinclair/typebox").TLiteral<"tests-failing">, import("@sinclair/typebox").TLiteral<"npm-audit-ok">, import("@sinclair/typebox").TLiteral<"audit-moderate">, import("@sinclair/typebox").TLiteral<"audit-high">, import("@sinclair/typebox").TLiteral<"audit-critical">, import("@sinclair/typebox").TLiteral<"broken">, import("@sinclair/typebox").TString]>>>;
        test_status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        detected_providers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
        unstubbed_accesses: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>>;
    }>>>;
}>;
export type RegistryPluginDetail = Static<typeof RegistryPluginDetailSchema>;
export interface RegistryClientOptions {
    baseUrl?: string;
    cacheDir?: string;
    indexTtlMs?: number;
    pluginTtlMs?: number;
    fetchTimeoutMs?: number;
}
export interface RegistryClient {
    getIndex(): Promise<RegistryIndex | undefined>;
    getPlugin(name: string): Promise<RegistryPluginDetail | undefined>;
    getIndexEntry(name: string): Promise<RegistryIndexEntry | undefined>;
    invalidate(): void;
    baseUrl(): string;
}
export declare function createRegistryClient(options?: RegistryClientOptions): RegistryClient;
export declare function badgesToIndicators(badges: RegistryBadge[] | undefined, composite: number | undefined): {
    score: number;
    checks: IndicatorCheck[];
};
//# sourceMappingURL=registry.d.ts.map