import type { Client } from "@libsql/client"; import { type NudgeIneligibleReason, type OfferState } from "../util/nudge-state.js"; export declare const SEARCH_CONFIDENCE_TIER_0 = 0.95; export declare const SEARCH_CONFIDENCE_TIER_1 = 0.9; export declare const SEARCH_CONFIDENCE_TIER_2 = 0.7; export declare const SEARCH_CONFIDENCE_TIER_3 = 0.5; export declare const SOFT_TIER_ALPHA = 0.25; export declare const KEYPHRASE_BETA = 0.2; export declare const EXACT_TITLE_BOOST = 1; export declare const FUSION_BLEND_HI = 1.05; export declare const FUSION_BLEND_MID = 0.95; export declare const FUSION_KEEP_N_FALLBACK = 3; export declare const FUSION_ADAPTIVE = true; export type SearchCascadeScope = "vault" | "mesh" | "federation"; export interface SearchResult { figment_path: string; vault_name: string; mesh_name: string | null; snippet: string; confidence: number; tier: number; foundBy: Array<"keyword" | "meaning">; metadata?: Record; vaultRidHex?: string; rawScore?: number; blendedScore?: number; kpMatch?: number; exactTitleMatch?: boolean; } export interface SearchTrace { tiersRun: readonly number[]; perTierHitCount: readonly number[]; vaultsSearched: readonly string[]; selfHealed?: { reindexedVaults: readonly string[]; }; semanticFused?: boolean; nudge?: NudgeDecisionTrace; } export interface NudgeDecisionTrace { eligible: boolean; state: OfferState; reason: NudgeIneligibleReason | null; declines: number; daysSince: number | null; searchesSince: number; persistError?: boolean; } export type { NudgeIneligibleReason }; export interface SearchCascadeArgs { query: string; scope?: SearchCascadeScope; scopeTarget?: string; limit?: number; meaningLimit?: number; totalLimit?: number; fields?: readonly string[]; expansionTerms?: readonly string[]; registryDb?: Client; softTierAlpha?: number; keyphraseBeta?: number; semantic?: boolean; fusionBlendHi?: number; fusionBlendMid?: number; selfHeal?: boolean; nudge?: boolean; nudgeNowFn?: () => Date; nudgeModelPresentFn?: () => boolean; } export interface SearchCascadeResult { query: string; scope: SearchCascadeScope; scopeTarget: string | null; limit: number; lexicalLimit: number; meaningLimit: number; maxResults: number; results: SearchResult[]; trace: SearchTrace; durationMs: number; } export declare function searchCascadeFlow(args: SearchCascadeArgs): Promise; export interface DenseCandidate { key: string; figmentPath: string; vaultName: string; vaultRidHex: string; meshName: string | null; vector: Float32Array; } export declare const MEANING_CANDIDATE_CAVEAT = "Similarity candidates only \u2014 not confirmed matches. Inspect them only when useful for this task."; export declare function fuseDense(lexical: readonly SearchResult[], qVec: Float32Array, denseDocs: readonly DenseCandidate[], blendHi: number, blendMid: number, snippetLen?: number, lexicalLimit?: number, meaningLimit?: number): SearchResult[]; //# sourceMappingURL=search-cascade.d.ts.map