import type { Message } from "@kenkaiiii/gg-ai"; export interface RankedContextMessage { index: number; score: number; } export type ContextRetriever = (messages: readonly Message[], query: string) => readonly RankedContextMessage[]; export interface QueryAwareSelectionResult { messages: Message[]; strategy: "query_aware" | "fallback"; selectedTokens: number; droppedMessages: number; queryTerms: number; fallbackReason?: "empty_query" | "retrieval_failed" | "invalid_ranking" | "no_relevant_messages"; } export interface QueryAwareSelectionOptions { retrieve?: ContextRetriever; fallback: (messages: Message[], tokenBudget: number) => Message[]; } export declare function tokenizeRetrievalText(text: string): string[]; /** Latest genuine human request; runtime continuation/control messages never become the query. */ export declare function findLatestHumanQuery(messages: readonly Message[]): string; /** * Deterministic lexical retriever. Rare identifiers, file paths and exact terms * naturally receive more weight through inverse document frequency. */ export declare const rankMessagesByQuery: ContextRetriever; /** * Select query-relevant context under a hard token budget. Retrieval is * replaceable; invalid output or exceptions deterministically use the existing * recency selector instead of breaking compaction. */ export declare function selectQueryAwareContext(messages: Message[], query: string, tokenBudget: number, options: QueryAwareSelectionOptions): QueryAwareSelectionResult; //# sourceMappingURL=query-aware-selector.d.ts.map