import type { GitCochangeSummary } from '../git/types.js';
import type { CodeSeam, CodebaseIndex, ListCodeSeamsOptions, ResolveCodeSeamsResult } from './types.js';
/**
 * Order-independent seam key: stable while both directories exist. Directory
 * renames change the key by design — consumers treat an unresolvable key as
 * drift, never as clean.
 */
export declare function seamKeyFor(moduleA: string, moduleB: string): string;
/**
 * Enumerate seams — cross-module relationships derived at query time from
 * `imports`/`calls` edges between directory-modules (grouped via
 * `moduleForRelativePath`, shared with `analyzeModuleCoupling`).
 *
 * Pure with respect to git: when the caller supplies a `GitCochangeSummary`
 * (from `getGitCochange`), its file pairs are aggregated to module pairs
 * (count summed, lift max, latest `lastCochangedAt`) and attached to the
 * matching seams. Ranking: lift desc, then summed `rankNodes` file scores of
 * both modules desc, then `seamKey` asc for determinism. `minLift`/`limit`
 * apply after scoring, so `rank` reflects the full enumeration.
 */
export declare function listCodeSeams(index: CodebaseIndex, options?: ListCodeSeamsOptions): CodeSeam[];
/**
 * Re-derive the current seams and answer per key: `resolved` (with current
 * seam data) or `missing` when either module no longer exists or no
 * cross-module edge remains between them. `minLift`/`limit` are ignored —
 * resolution answers existence, not prominence.
 */
export declare function resolveCodeSeams(index: CodebaseIndex, seamKeys: string[], options?: ListCodeSeamsOptions): ResolveCodeSeamsResult[];
/**
 * Rebase co-change pairs from git-toplevel-relative paths onto an index root
 * below the toplevel. `getGitCochange` reports paths relative to the
 * repository toplevel, while seam modules derive from index `relativePath`
 * values — without rebasing, an index rooted in a subdirectory would join
 * zero pairs. `indexRootPrefix` is the index root's toplevel-relative path
 * with forward slashes (empty when the index root is the toplevel, which
 * returns the summary unchanged). Pairs outside the index subtree are
 * dropped — they cannot match any module.
 */
export declare function rebaseCochangeToIndexRoot(cochange: GitCochangeSummary, indexRootPrefix: string): GitCochangeSummary;
