import type { Workspace } from '../../pm/index.ts';
/**
 * Final classification band for a dependency relationship.
 * Bands are ordered from "keep in dependencies" to "must be a peer";
 * see API-EXPOSURE-INDEX.md section 10.
 */
export type AeiRecommendation = 'dependency' | 'probably-dependency' | 'review' | 'probably-peer' | 'peer';
/** Ordered band scale used by the scoring combination matrix. */
export declare const AEI_BAND_ORDER: readonly AeiRecommendation[];
/** Coupling Risk Score band; shifts the AEI band by at most one step. */
export type CrsBand = 'low' | 'moderate' | 'high';
/**
 * Which score a rule contributes to:
 * - `exposure` and `modifier` rules feed the API Exposure Index (AEI)
 * - `coupling` and `dep-signal` rules feed the Coupling Risk Score (CRS)
 */
export type AeiRuleKind = 'exposure' | 'coupling' | 'dep-signal' | 'modifier';
/** A rule weight: a finite additive weight, or conclusive (`infinite` ⇒ peer). */
export type AeiWeight = number | 'infinite';
/** A rule as defined in the registry (`rules.ts`), mirroring API-EXPOSURE-INDEX.md. */
export interface AeiRuleDefinition {
    /** Whether the rule is active without explicit configuration. @default true */
    defaultEnabled?: boolean;
    defaultWeight: AeiWeight;
    description: string;
    id: string;
    kind: AeiRuleKind;
}
/** A rule after config normalization: effective enabled state and weight. */
export interface ResolvedAeiRule extends AeiRuleDefinition {
    enabled: boolean;
    weight: AeiWeight;
}
/**
 * A finding as produced by the analysis walkers, before configuration is
 * applied. Walkers are config-free; `resolveFindings()` turns raw findings
 * into weighted `AeiFinding`s (dropping findings for disabled rules).
 */
export interface RawAeiFinding {
    dependency: string;
    evidence: string;
    file: string;
    line?: number;
    ruleId: string;
}
/** One piece of evidence contributing to a dependency's score. */
export interface AeiFinding {
    dependency: string;
    /** Human-readable evidence line, e.g. "exported runtime value `UserSchema`". */
    evidence: string;
    /** Workspace-relative file path, or `(dependency)` for dep-signal findings. */
    file: string;
    /** True when the effective weight is `infinite` — conclusive peer evidence. */
    infinite: boolean;
    line?: number;
    ruleId: string;
    /** Effective finite weight after config; 0 when `infinite` is true. */
    weight: number;
}
export type AeiDependencySection = 'dependencies' | 'devDependencies' | 'peerDependencies' | 'unlisted';
/**
 * Why the recommendation was produced. `override`/`terminal`/
 * `workspace-internal`/`types-package` bypass scoring entirely; `provided`
 * caps an unlisted-but-exposed dependency at `review` because a declared
 * dependency provides and version-manages it.
 */
export type AeiRecommendationSource = 'score' | 'override' | 'terminal' | 'workspace-internal' | 'types-package' | 'provided';
/** The scored assessment of a single dependency relationship. */
export interface DependencyAssessment {
    aei: number;
    aeiInfinite: boolean;
    crs: number;
    currentSection: AeiDependencySection;
    dependency: string;
    findings: AeiFinding[];
    recommendation: AeiRecommendation;
    recommendationSource: AeiRecommendationSource;
    /** Additive AEI contribution from `aei.modifier.tree-shaking` (0 when not applied). */
    treeShakingModifier: number;
}
/** Result of analyzing one workspace package. */
export interface WorkspaceApiExposureResult {
    assessments: DependencyAssessment[];
    workspace: Workspace;
}
//# sourceMappingURL=types.d.ts.map