import { type Rubric } from "oh-my-plumb-schema"; export type SourceCandidate = { /** Rubric spelling: repo-relative or "~/...". */ path: string; absolute: string; /** Glob the file's rules apply to. */ scope: string; /** Required candidates must appear in the rubric for it to be fresh. */ required: boolean; origin: "root" | "nested" | "global" | "contributing" | "mcp" | "skill"; /** The server's `initialize` instructions, captured at compile time (origin "mcp"). */ text?: string; }; /** An MCP source always carries the instructions it was captured from. */ export type McpSourceCandidate = SourceCandidate & { origin: "mcp"; text: string; }; /** The scope glob tying a rule source to one MCP server's tool calls. */ export declare const mcpSourceScope: (server: string) => string; /** A rubric source backed by MCP server instructions instead of a file. */ export declare const isMcpSource: (source: { kind?: "mcp" | undefined; }) => boolean; /** The rubric's opted-in MCP servers, spelled the way source paths are compared, so one owner decides a match. */ export declare const optedInServers: (rubric: Rubric | undefined, root: string) => Set; /** sha256 of each captured MCP source's instructions, keyed by canonical source path. */ export declare const capturedMcpShas: (root: string, candidates: readonly SourceCandidate[]) => Map; export declare const discoverProjectSources: (root: string) => SourceCandidate[]; export declare const discoverGlobalSources: () => SourceCandidate[]; export declare const hashFile: (absolute: string) => string | undefined; export type Staleness = { status: "missing"; } | { status: "fresh"; } | { status: "stale"; changed: string[]; added: string[]; removed: string[]; unhashed: string[]; }; export declare const checkStaleness: (rubric: Rubric | undefined, candidates: SourceCandidate[], root: string) => Staleness; export declare const describeStaleness: (s: Staleness) => string; //# sourceMappingURL=sources.d.ts.map