import type { SessionEntry } from "@earendil-works/pi-coding-agent"; import type { FabricExtractiveConfig } from "../config.js"; export interface ExtractiveSource { entryId: string; role: "user" | "assistant"; /** Complete text parts, never thinking, tool calls, tool results or summaries. */ quotes: string[]; } export interface ExtractiveCandidate { id: string; order: number; sources: ExtractiveSource[]; hash: string; } export interface ExtractiveNode { id: string; first: string; last: string; /** Underlying candidates, not the children's display selections. */ candidateRange: { first: number; last: number; }; children: ExtractiveNode[]; } export declare const digest: (value: unknown) => string; export declare function extractSources(entries: readonly SessionEntry[]): ExtractiveSource[]; export declare function buildExtractiveIndex(sources: ExtractiveSource[]): { candidates: ExtractiveCandidate[]; root: ExtractiveNode | undefined; }; /** TF-IDF relevance + recency + role coverage, with MMR redundancy penalty. */ export declare function rankExtractiveCandidates(pool: ExtractiveCandidate[], query: string, salience?: ReadonlyMap): ExtractiveCandidate[]; /** Bound whole bundles before NLP or inference; spread across chronology, newest first. */ export declare function boundExtractivePool(candidates: ExtractiveCandidate[], config: FabricExtractiveConfig): ExtractiveCandidate[]; export declare function selectExtractiveNode(node: ExtractiveNode, candidates: ExtractiveCandidate[], query: string, config: FabricExtractiveConfig, salience?: ReadonlyMap): ExtractiveCandidate[]; /** JSON quoted strings preserve exact text while keeping source delimiters data. */ export declare function renderExtractiveView(input: { session: string; candidates: ExtractiveCandidate[]; ranked: ExtractiveCandidate[]; root?: ExtractiveNode | undefined; config: FabricExtractiveConfig; diagnostic: string; }): string; //# sourceMappingURL=extractive-index.d.ts.map