import type { AcCoverageStatus, SpecAcCoverageResult } from '../../types/github.js';
/**
 * Extract a SPEC-NNN id from a PR branch name.
 * Returns null when the branch does not follow the SPEC-XXX convention.
 */
export declare function extractSpecIdFromBranch(branch: string): string | null;
/**
 * Locate the spec.md file for the given specId inside the planu/specs directory.
 * Returns null when no matching directory is found.
 */
export declare function findSpecFile(specId: string, specsRootDir: string): Promise<string | null>;
/**
 * Parse acceptance criteria from a spec.md file content.
 * Supports lean format (YAML criteria:) and old format (## Acceptance Criteria).
 */
export declare function parseAcceptanceCriteria(specContent: string): string[];
/**
 * Build a set of keywords from a diff that can be matched against an AC text.
 * Extracts meaningful tokens from added lines only (+lines).
 */
export declare function buildDiffKeywords(diff: string): Set<string>;
/**
 * Determine coverage status of a single AC text against the diff keywords.
 * Heuristic: extract meaningful words from the AC text and check how many
 * appear in the diff keywords set. Score thresholds:
 *   >= 0.5 → covered
 *   >= 0.2 → partial
 *   < 0.2  → missing
 */
export declare function assessAcCoverage(acText: string, diffKeywords: Set<string>): AcCoverageStatus;
/**
 * Full analysis: given a diff and a specId, loads the AC list and returns
 * per-criterion coverage plus an overall compliance score.
 *
 * @param diff       Raw unified diff text from the PR.
 * @param specId     Spec identifier, e.g. "SPEC-155".
 * @param specsRoot  Absolute path to the `planu/specs/` directory.
 */
export declare function analyzeSpecCoverage(diff: string, specId: string, specsRoot: string): Promise<SpecAcCoverageResult>;
//# sourceMappingURL=spec-ac-analyzer.d.ts.map