/**
 * Vertical detection from filesystem signals.
 *
 * Pure scoring function consumed by Stage 0.5 of the agent activation flow.
 * Performs no filesystem IO; the caller is responsible for shallow-scanning the
 * install directory and passing the resulting metadata in. This keeps detection
 * deterministic, testable, and host-independent (the same function runs in the
 * MCP server, the CLI, and any future browser-side prototype).
 *
 * The signal table mirrors the per-vertical heuristics documented in
 * `docs/foundation/file_ranking_heuristic.md` so the human-readable reference
 * and the machine implementation can never silently drift.
 *
 * Notes:
 *   - Matching is case-insensitive on filenames AND folder paths.
 *   - Folder signals are matched against any segment of the relative path.
 *   - Glob-style filename hints are translated into anchored regexes.
 *   - `personal-agent` is intentionally absent from the signal table because
 *     it is the meta-fallback returned when no other vertical scores.
 */
export interface FileSignal {
    /**
     * Path relative to the scan root, using forward slashes regardless of host OS.
     * Example: `Clients/Acme/contracts/msa-2024.pdf`.
     */
    relativePath: string;
    /**
     * Whether the entry is a directory. Directory entries contribute folder
     * signals only; their `relativePath` should NOT include a trailing slash.
     */
    isDirectory: boolean;
    /**
     * Optional file size hint (bytes). Currently unused by the scorer but
     * reserved so future heuristics can downweight massive binaries without a
     * breaking change to the input shape.
     */
    sizeBytes?: number;
}
export interface VerticalDetectionResult {
    /** Slug of the highest-scoring vertical, or `null` if no signal scored. */
    topVertical: string | null;
    /**
     * Whether scoring was ambiguous: the runner-up score is within the
     * `ambiguityMargin` of the top score. The agent MUST ask the user to
     * disambiguate before auto-installing a pack.
     */
    ambiguous: boolean;
    /**
     * Full per-vertical score table. Entries with score 0 are omitted to keep
     * the payload compact. Sorted descending by score.
     */
    scores: Array<{
        slug: string;
        score: number;
        matched: string[];
    }>;
    /**
     * When `true`, the caller should fall back to the `personal-agent`
     * meta-fallback (no native schemas, but a sensible default for individual
     * agentic-OS operators).
     */
    recommendFallback: boolean;
}
export interface VerticalDetectionOptions {
    /**
     * Tie threshold for the ambiguity flag, expressed as a fraction of the top
     * score. Defaults to 0.15 (~15%); a runner-up scoring within 85% of the top
     * triggers a disambiguation prompt instead of auto-confirming.
     */
    ambiguityMargin?: number;
}
/**
 * Score the supplied filesystem entries against the vertical signal table.
 * Returns the full sorted result; the caller decides how to act on it
 * (auto-confirm, ask, or fall back to `personal-agent`).
 */
export declare function detectVerticalFromSignals(entries: readonly FileSignal[], options?: VerticalDetectionOptions): VerticalDetectionResult;
//# sourceMappingURL=vertical_detection.d.ts.map