/**
 * CartographerNavigator — the capstone of cartographer-conformance (spec #5,
 * docs/specs/CARTOGRAPHER-SUBTREE-NAV.md).
 *
 * A deterministic, recursive navigator over the cartographer doc-tree. Given a
 * task/query it walks the tree's plain-language summaries TOP-DOWN and returns the
 * minimal **relevant subtree** — the set of node paths a sub-agent should be scoped
 * to instead of loading the whole repo.
 *
 * Hard rules (pinned at convergence):
 *  - Deterministic-first, NO LLM. Term overlap on summary + path, with distinctive
 *    identifiers (camelCase/PascalCase/snake_case — the spec #2 extractCodeSymbols
 *    shape) weighing more than common words.
 *  - Two-phase dir scoring: a PROVISIONAL dir score (the dir's OWN summary+path
 *    overlap) gates descent; a FINAL dir score is folded UP from visited children
 *    (max child score, lightly depth-discounted) so a dir whose own text didn't
 *    match but whose children did still surfaces as a container of relevance.
 *  - Minimal-covering-subtree collapse: a dir collapses iff ≥ collapseFraction of
 *    its VISITED direct children scored > minScore; unvisited children are EXCLUDED
 *    from the fraction; applied bottom-up so a collapsed dir can participate in its
 *    parent's fraction.
 *  - Bounds: maxDepth / branchingFactor / maxNodesVisited / maxResults — each
 *    enforced with the truncated count reported (no silent cap).
 *  - SAFETY: every emitted `summary` is neutralizeInstructionShapedContent → then
 *    delimitUntrusted. A summary is LLM-authored over untrusted code; rendering it
 *    as quoted untrusted data is the binding consumer-contract spec #2 declared.
 *  - `fresh` per node is derived from ONE batched current-oid read (the spec #1
 *    currentOids() pattern), NOT a per-node computeStaleness.
 *
 * Observe-only: the navigator RETURNS a scoped manifest; it never spawns a
 * sub-agent or mutates anything.
 */
import type { CartographerTree, CartographerNode, NodeKind, CartographerConfidence } from './CartographerTree.js';
export interface NavigateOptions {
    /** Hard cap on descent depth from the root (default 6). */
    maxDepth?: number;
    /** Descend into at most this many top-scoring children per dir (default 4). */
    branchingFactor?: number;
    /** Stop the walk once this many nodes have been scored/visited (default 200). */
    maxNodesVisited?: number;
    /** Cap the emitted `scored` set + relevantPaths breadth (default 25). */
    maxResults?: number;
    /** A node must score strictly above this to be relevant / descended-into (default 0.1). */
    minScore?: number;
    /** Fraction of a dir's VISITED direct children that must be relevant for it to collapse (default 0.6). */
    collapseFraction?: number;
}
export interface ScoredNode {
    path: string;
    kind: NodeKind;
    score: number;
    /** Delimited + neutralized — quoted untrusted data, never an instruction. Absent when the node had no summary. */
    summary?: string;
    confidence?: CartographerConfidence;
    fresh: boolean;
}
export interface NavigateManifest {
    query: string;
    /** The minimal covering subtree — scope a sub-agent here. */
    relevantPaths: string[];
    scored: ScoredNode[];
    /** Fraction of scored nodes that had a non-empty summary (path-only vs summary-informed). */
    summaryCoverage: number;
    nodesVisited: number;
    /** True if a bound (depth/visited/results) truncated the walk. */
    truncated: boolean;
}
/**
 * Deterministic relevance score for a single node against a query.
 *
 * Signals (all case-insensitive):
 *  - term overlap between the query words and the node's summary + path basename
 *    + path segments;
 *  - a distinctive identifier (camelCase/PascalCase/snake_case) match weighs MORE
 *    than a common-word match (reusing the spec #2 extractCodeSymbols shape);
 *  - a path-segment / basename match is a strong, cheap signal.
 *
 * Pure + deterministic — no clock, no I/O, no randomness.
 */
export declare function scoreNodeRelevance(query: string, node: CartographerNode): number;
/**
 * The bounded top-down recursive walk + minimal-covering-subtree collapse.
 *
 * @param tree  a CartographerTree (already scaffolded; the route lazy-scaffolds).
 * @param query the task description / search text.
 * @param opts  bound + threshold overrides.
 */
export declare function navigate(tree: CartographerTree, query: string, opts?: NavigateOptions): NavigateManifest;
//# sourceMappingURL=CartographerNavigator.d.ts.map