import type { ArtifactBundle } from "../io/artifacts.js"; import type { FileDispositionStatus } from "audit-tools/shared"; import type { DocsDigestEntry } from "../types/docsDigest.js"; /** * A row in the excluded_summary that represents a collapsed directory. * Present when all files under a directory prefix share the same status+reason. */ export interface AggregatedExcludedRow { prefix: string; file_count: number; status: string; reason: string; } /** * A row in the excluded_summary that represents an individual "oddball" file — * a file that is excluded while its sibling files in the same directory are * included (or have a different status/reason than the directory majority). */ export interface IndividualExcludedRow { path: string; status: string; reason: string; } /** Union type discriminated by presence of `prefix` vs `path`. */ export type ExcludedSummaryRow = AggregatedExcludedRow | IndividualExcludedRow; export interface DispositionOverrideProposal { path: string; proposed_status: FileDispositionStatus; reason: string; } /** * A single row in the canonical lens proposition table (dogfood note 1). Every * canonical lens gets exactly one disposition; the host's invisible LLM review * may flip a disposition or append rows for non-canonical (custom) lenses it * decides would help — those appear in the same table, undistinguished from * canonical rows. Dispositions are exactly three: there is no "available". */ export type LensDisposition = "mandatory" | "recommend_include" | "recommend_exclude"; export interface LensProposition { /** Canonical lens name OR an LLM-authored custom lens name. */ lens: string; disposition: LensDisposition; reason: string; } /** * Deterministic pre-digest of the audit scope, shown to the host in the * `confirm_intent` step. * Everything here is computed deterministically from the intake artifacts; the * host uses it to confirm the discovered scope and add any exclusions the * disposition pass missed (the scope-pollution case). */ export interface ScopePreDigest { mode: "full" | "delta"; since: string | null; files_in_scope: number; /** Top-level directories of in-scope files, with file counts (desc). */ scope_dirs: Array<{ dir: string; files: number; }>; /** * Collapsed excluded-scope summary. Directories where all files share the * same status+reason are emitted as a single aggregate row; individual * "oddball" files are emitted as individual rows. */ excluded_summary: ExcludedSummaryRow[]; /** * Suspicious inclusions: files whose path matches build-output, vendor, or * generated patterns but whose disposition status is `included`. These are * heuristic misses that the host may want to override. */ disposition_override_proposals: DispositionOverrideProposal[]; /** * Canonical lens proposition table (dogfood note 1) — ONE disposition per * canonical lens, in registry order, derived deterministically from codebase * character (language distribution, test presence, network surface, config * files). Mandatory lenses always carry the `mandatory` disposition. The host * reviews/adjusts these (and may add custom rows) invisibly before showing the * user the final table. */ lens_propositions: LensProposition[]; /** * Render-ready docs digest (change 3): the repo's STATED purpose, extracted * deterministically from the doc universe (`docs_digest.json`). Empty when the * digest artifact is absent or the repo * has no prose docs — the render omits the section then. */ docs_digest: DocsDigestEntry[]; /** * Signals that the resolved root may be the wrong audit target (docsN-5) — * recomputed deterministically from the root, the same input intake used. * Intake only folds a COUNT into its progress summary, so the confirm-intent * pause is the first place a host both sees the warning text and can act on * it. Empty on a well-targeted root — the render omits the section then. */ mis_scope_smells: string[]; } export declare function computeScopePreDigest(bundle: ArtifactBundle, root: string, since?: string): ScopePreDigest; //# sourceMappingURL=intentCheckpointExecutor.d.ts.map