/** A skill identified by name + its trigger-surface description. */ export interface DescribedSurface { readonly name: string; readonly description: string; /** * Repo-relative path to report the surface at. Optional for callers that have * no path, but REQUIRED in practice to keep the message actionable: since the * loader started reading BOTH discovery levels, a repo that keeps a copy of a * skill in `skills/` and `.claude/skills/` yields two surfaces with the SAME * name, and "skills \"dup\" and \"dup\" have near-identical descriptions" names * neither file. Measured on `nyldn/claude-octopus`: 50 such pairs. The path is * the only thing that distinguishes them. */ readonly where?: string; } export interface DescriptionOverlap { /** Display label for the first skill — `"name"`, or `"name" (path)`. */ readonly a: string; /** Display label for the second skill — `"name"`, or `"name" (path)`. */ readonly b: string; /** 0–1, higher = more alike (1 − NCD), rounded to 2 dp. */ readonly similarity: number; readonly message: string; } /** * The NCD cutoff below which two descriptions count as a near-duplicate. 0.2 sits * safely under the sweep's most-similar legitimately-distinct pair (0.25), so * only basically-identical text is flagged. Exported so a caller / test can see * the calibrated value. */ export declare const OVERLAP_NCD_CUTOFF = 0.2; export declare function findDescriptionOverlaps(surfaces: readonly DescribedSurface[], cutoff?: number): DescriptionOverlap[]; //# sourceMappingURL=description-overlap.d.ts.map