/**
 * Capability descriptors.
 *
 * Each capability the dispatcher knows about has one descriptor. The
 * descriptor bundles the capability's stable id with its aggregate
 * function — how to combine multiple providers' results into one
 * envelope. Aggregation is bespoke per capability rather than a generic
 * 'sum' / 'append' / 'last' strategy because the merge semantics
 * legitimately differ (depVulns sums counts AND concats findings AND
 * joins tool names AND prefers any provider that did osv enrichment),
 * and a 5-strategy enum would lie about that.
 *
 * The dispatcher never calls aggregate() with an empty array — that
 * case is handled upstream by returning null.
 */
import type { CapabilityEnvelope, CodePatternsResult, CoverageResult, DepVulnResult, DuplicationResult, ImportsResult, LicensesResult, LintResult, SecretsResult, StructuralResult, TestFrameworkResult } from './types';
export interface CapabilityDescriptor<T extends CapabilityEnvelope> {
    readonly id: string;
    /** Combine ≥1 non-null results from different providers into one envelope. */
    aggregate(results: ReadonlyArray<T>): T;
}
export declare const DEP_VULNS: CapabilityDescriptor<DepVulnResult>;
export declare const LINT: CapabilityDescriptor<LintResult>;
export declare const COVERAGE: CapabilityDescriptor<CoverageResult>;
export declare const TEST_FRAMEWORK: CapabilityDescriptor<TestFrameworkResult>;
export declare const SECRETS: CapabilityDescriptor<SecretsResult>;
export declare const CODE_PATTERNS: CapabilityDescriptor<CodePatternsResult>;
export declare const DUPLICATION: CapabilityDescriptor<DuplicationResult>;
export declare const STRUCTURAL: CapabilityDescriptor<StructuralResult>;
export declare const IMPORTS: CapabilityDescriptor<ImportsResult>;
export declare const LICENSES: CapabilityDescriptor<LicensesResult>;
/**
 * Per-language capabilities — one provider registered per language pack.
 * Keys must match `keyof LanguagePackCapabilities`; the contract test
 * enforces that symmetry.
 */
export declare const PER_PACK_REGISTRY: {
    readonly depVulns: CapabilityDescriptor<DepVulnResult>;
    readonly lint: CapabilityDescriptor<LintResult>;
    readonly coverage: CapabilityDescriptor<CoverageResult>;
    readonly testFramework: CapabilityDescriptor<TestFrameworkResult>;
    readonly imports: CapabilityDescriptor<ImportsResult>;
    readonly licenses: CapabilityDescriptor<LicensesResult>;
};
/**
 * Global capabilities — tools that run once per repo (gitleaks, semgrep,
 * jscpd, graphify), not per pack. Keys must match `keyof GlobalCapabilities`.
 * Pack-dependent inputs (e.g. semgrep's rulesets from each active pack's
 * `semgrepRulesets` declaration) are read by the provider itself via
 * `detectActiveLanguages(cwd)` — the provider interface is uniform.
 */
export declare const GLOBAL_REGISTRY: {
    readonly secrets: CapabilityDescriptor<SecretsResult>;
    readonly codePatterns: CapabilityDescriptor<CodePatternsResult>;
    readonly duplication: CapabilityDescriptor<DuplicationResult>;
    readonly structural: CapabilityDescriptor<StructuralResult>;
};
/**
 * Union of both registries — kept as the canonical "every descriptor"
 * surface for tests and for callers that don't care about per-pack vs
 * global distinction. `providersFor()` (src/languages/capabilities/index.ts)
 * is the routing layer that picks the right source.
 */
export declare const CAPABILITY_REGISTRY: {
    readonly secrets: CapabilityDescriptor<SecretsResult>;
    readonly codePatterns: CapabilityDescriptor<CodePatternsResult>;
    readonly duplication: CapabilityDescriptor<DuplicationResult>;
    readonly structural: CapabilityDescriptor<StructuralResult>;
    readonly depVulns: CapabilityDescriptor<DepVulnResult>;
    readonly lint: CapabilityDescriptor<LintResult>;
    readonly coverage: CapabilityDescriptor<CoverageResult>;
    readonly testFramework: CapabilityDescriptor<TestFrameworkResult>;
    readonly imports: CapabilityDescriptor<ImportsResult>;
    readonly licenses: CapabilityDescriptor<LicensesResult>;
};
export type CapabilityId = keyof typeof CAPABILITY_REGISTRY;
//# sourceMappingURL=descriptors.d.ts.map