import type { AgencyConfig } from "../config.js"; /** * One interrupt site: a single `interruptStatement` AST node, located by * (file, line, effect). `line` is **1-indexed** for human consumption (the * parser stores 0-indexed lines, so we add 1 when building this shape). */ export type InterruptSite = { file: string; /** 1-indexed line number of the `interrupt …` statement. */ line: number; /** Interrupt effect, e.g. `"std::read"`. `"unknown"` for the bare * `interrupt(...)` form. */ effect: string; }; /** * One handler reference, ready for rendering. `line` is **1-indexed**. */ export type HandlerRef = { file: string; /** 1-indexed line of the `handle {` block. */ line: number; shape: "inline" | "functionRef"; /** Present iff `shape === "functionRef"`. */ functionName?: string; }; /** The final per-site result. */ export type SiteResult = { site: InterruptSite; /** Deduped handler set. May be empty. */ handlers: HandlerRef[]; }; export type AnalysisResult = { /** Sorted by `site.file`, then `site.line`. */ sites: SiteResult[]; }; export declare function analyzeInterrupts(rootFile: string, config: AgencyConfig): AnalysisResult;