import { type SearchResult } from './search.js'; /** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds * worst-case work and keeps the flag honest). */ export declare const MAX_HOPS = 3; /** Default per-hop fanout cap (bounds blow-up on a future dense graph). */ export declare const DEFAULT_MAX_NEIGHBORS = 25; export interface GraphExpandOpts { /** Hops to expand. <= 0 is a no-op (caller should not invoke, but guarded anyway). */ hops: number; /** Per-hop fanout cap. Defaults to DEFAULT_MAX_NEIGHBORS. */ maxNeighbors?: number; /** The local store root (where local seeds' graph lives). */ hippoRoot: string; /** The global store root, when distinct + initialized (where global seeds' graph lives). * A global seed is only expanded if this is provided. */ globalRoot?: string; tenantId: string; /** Mirror the recall handler's hard filters when re-loading graph-reached rows. */ includeSuperseded?: boolean; /** ISO date; bi-temporal as-of filter applied to graph-reached rows (full rule, matching * cmdRecall: a row is visible if valid_from <= asOf AND, when superseded, its successor * was not yet valid at asOf). */ asOf?: string; /** Token budget for the augmented set (defaults to 4000, matching recall's default). */ budget?: number; /** The recall --min-results floor: this many top base rows are kept regardless of * budget, so graph expansion never violates the floor. Defaults to 1. */ minResults?: number; /** Recall-side envelope scope rule applied to graph-REACHED memories (the injected * rows), mirroring shared.ts SearchBothOptions.recallScope. Omitted = default-deny * (private + quarantine scopes excluded, NULL passes) — the fail-closed default for * bare/SDK callers. { requested, additive: true } = CLI --scope unlock semantics * (passesCliRecallScopeFilter); additive false/absent with requested set = api * exact-narrowing semantics (passesScopeFilterForRecall). Base results are the * caller's responsibility (they passed through the caller's own scope filter). */ recallScope?: { requested?: string; additive?: boolean; }; } /** * Augment `baseResults` with memories reached by walking the graph `hops` edges out from * the seed results' entities (across the local AND global stores). Each graph hit is * inserted directly after the base result it descends from, scored just below that seed; * the base list's own order is preserved. Token-budget-bounded; deduped against the base * set and across stores. * * No-op (returns `baseResults` unchanged) when `hops <= 0`, there are no base results, the * graph is empty, no seed maps to an entity, or nothing new survives the filters/budget. */ export declare function graphExpandRecall(baseResults: SearchResult[], opts: GraphExpandOpts): SearchResult[]; //# sourceMappingURL=graph-recall.d.ts.map