import type { Adapter, ImplementationFact } from "../adapters/types.js"; export interface FactsOptions { /** * Machine-level content cache dir (B3). Defaults to `~/.cache/loopgraph`; * pass `null` to disable (the zero-cache-dependency path CI can take). */ cacheDir?: string | null; /** * The adapter supplying the candidate pattern + extractors. REQUIRED — this * runner carries zero target-repo knowledge (Proposal 010: no adapter is * bundled in this repo; the caller resolves one via `--adapter-path` or the * `.loopgraph/adapter/` convention path and passes it in). */ adapter: Adapter; /** * Repo-relative files to scan IN ADDITION to whatever `candidatePattern` * matches — in practice the model's own file anchors (see * `modelAnchoredCandidates`). * * `candidatePattern` is a syntactic guess about where facts live, and it is * wrong in a specific, recurring way: the file holding a queue's authoritative * literal need not contain the call site the pattern looks for. A model anchor * is not a guess — it is a human saying "this file is part of this loop", so * it earns a scan regardless of what the regex thinks. Paths that don't exist * or aren't extractable source are dropped, so a stale anchor costs nothing. */ extraCandidates?: readonly string[]; } export interface FactsResult { /** false when the scan couldn't run (no git checkout) — a loud skip, not a silent empty result. */ ran: boolean; skippedReason?: string; facts: ImplementationFact[]; candidateFiles: number; filesScanned: number; timingMs: number; } /** * Extracts implementation facts from the target repo via the caller-supplied * adapter (Proposal 010: this runner is engine-generic and carries no default * adapter — every caller must resolve and pass one explicitly). Same * git-grep-then-pure-AST posture as A6's INV-1 scan. */ export declare function runFacts(repoRoot: string, options: FactsOptions): Promise; //# sourceMappingURL=runner.d.ts.map